New Tuya Serial Based Devices support

Updated the Code to support most of the new Tuya Serial devices like 4Gang Serail switch, 1 Dimmer + 1 relay, 3 Gang  ...
This commit is contained in:
thirug010 2019-05-17 22:03:53 -05:00
parent 48f45a5e2b
commit d59d631e40
7 changed files with 63 additions and 45 deletions

View File

@ -11,7 +11,7 @@
src_dir = sonoff
; *** Uncomment one of the lines below to build/upload only one environment
;env_default = sonoff
env_default = sonoff
;env_default = sonoff-minimal
;env_default = sonoff-basic
;env_default = sonoff-classic
@ -57,7 +57,7 @@ platform = espressif8266@1.8.0
build_flags = ${esp82xx_defaults.build_flags}
-Wl,-Teagle.flash.1m0.ld
-lstdc++ -lsupc++
; lwIP 1.4
; lwIP 1.4 (Default)
; -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
; lwIP 2 - Low Memory
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
@ -65,19 +65,12 @@ build_flags = ${esp82xx_defaults.build_flags}
-DPIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH
-DVTABLES_IN_FLASH
[core_2_5_1]
; *** Esp8266 core for Arduino version 2.5.1
platform = espressif8266@~2.1.1
[core_2_5_0]
; *** Esp8266 core for Arduino version 2.5.0
platform = espressif8266@2.0.1
build_flags = ${esp82xx_defaults.build_flags}
-Wl,-Teagle.flash.1m.ld
; Code optimization see https://github.com/esp8266/Arduino/issues/5790#issuecomment-475672473
-O2
-DBEARSSL_SSL_BASIC
; nonos-sdk 22x
-DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x
; nonos-sdk-pre-v3
; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK3
; lwIP 1.4
; lwIP 1.4 (Default)
; -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
; lwIP 2 - Low Memory
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
@ -96,14 +89,11 @@ build_flags = ${esp82xx_defaults.build_flags}
platform = https://github.com/platformio/platform-espressif8266.git#feature/stage
build_flags = ${esp82xx_defaults.build_flags}
-Wl,-Teagle.flash.1m.ld
; Code optimization see https://github.com/esp8266/Arduino/issues/5790#issuecomment-475672473
-O2
-DBEARSSL_SSL_BASIC
; nonos-sdk 22x
-DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK22x
; nonos-sdk-pre-v3
; -DPIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK3
; lwIP 1.4
; lwIP 1.4 (Default)
; -DPIO_FRAMEWORK_ARDUINO_LWIP_HIGHER_BANDWIDTH
; lwIP 2 - Low Memory
; -DPIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY
@ -129,12 +119,12 @@ build_flags = ${esp82xx_defaults.build_flags}
[core_active]
; Select one core set for platform and build_flags
;platform = ${core_2_3_0.platform}
;build_flags = ${core_2_3_0.build_flags}
platform = ${core_2_3_0.platform}
build_flags = ${core_2_3_0.build_flags}
;platform = ${core_2_4_2.platform}
;build_flags = ${core_2_4_2.build_flags}
platform = ${core_2_5_1.platform}
build_flags = ${core_2_5_1.build_flags}
;platform = ${core_2_5_0.platform}
;build_flags = ${core_2_5_0.build_flags}
;platform = ${core_stage.platform}
;build_flags = ${core_stage.build_flags}
@ -165,7 +155,7 @@ upload_speed = 115200
upload_resetmethod = nodemcu
; *** Upload Serial reset method for Wemos and NodeMCU
upload_port = COM5
upload_port = COM4
extra_scripts = pio/strip-floats.py
; *** Upload file to OTA server using SCP
@ -353,7 +343,7 @@ board = ${common.board}
board_build.flash_mode = ${common.board_build.flash_mode}
board_build.f_cpu = ${common.board_build.f_cpu}
build_unflags = ${common.build_unflags}
build_flags = ${common.build_flags} -DMY_LANGUAGE=es-ES
build_flags = ${common.build_flags} -DMY_LANGUAGE=es-AR
monitor_speed = ${common.monitor_speed}
upload_port = ${common.upload_port}
upload_resetmethod = ${common.upload_resetmethod}

View File

@ -62,10 +62,10 @@
#define WIFI_SUBNETMASK "255.255.255.0" // [IpAddress3] If not using DHCP set Network mask
#define WIFI_DNS "192.168.1.1" // [IpAddress4] If not using DHCP set DNS IP address (might be equal to WIFI_GATEWAY)
#define STA_SSID1 "" // [Ssid1] Wifi SSID
#define STA_PASS1 "" // [Password1] Wifi password
#define STA_SSID2 "" // [Ssid2] Optional alternate AP Wifi SSID
#define STA_PASS2 "" // [Password2] Optional alternate AP Wifi password
#define STA_SSID1 "H-Net-2G_SHD" // [Ssid1] Wifi SSID
#define STA_PASS1 "abcd1234" // [Password1] Wifi password
#define STA_SSID2 "H-Net-2G" // [Ssid2] Optional alternate AP Wifi SSID
#define STA_PASS2 "abcd1234" // [Password2] Optional alternate AP Wifi password
#define WIFI_CONFIG_TOOL WIFI_RETRY // [WifiConfig] Default tool if wifi fails to connect
// (WIFI_RESTART, WIFI_SMARTCONFIG, WIFI_MANAGER, WIFI_WPSCONFIG, WIFI_RETRY, WIFI_WAIT, WIFI_SERIAL)
#define WIFI_CONFIG_NO_SSID WIFI_WPSCONFIG // Default tool if wifi fails to connect and no SSID is configured
@ -87,12 +87,12 @@
// -- MQTT ----------------------------------------
#define MQTT_USE 1 // [SetOption3] Select default MQTT use (0 = Off, 1 = On)
#define MQTT_HOST "" // [MqttHost]
#define MQTT_HOST "192.168.1.10" // [MqttHost]
#define MQTT_FINGERPRINT1 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" // [MqttFingerprint1]
#define MQTT_FINGERPRINT2 "A5 02 FF 13 99 9F 8B 39 8E F1 83 4F 11 23 65 0B 32 36 FC 07" // [MqttFingerprint2]
#define MQTT_PORT 1883 // [MqttPort] MQTT port (10123 on CloudMQTT)
#define MQTT_USER "DVES_USER" // [MqttUser] MQTT user
#define MQTT_PASS "DVES_PASS" // [MqttPassword] MQTT password
#define MQTT_USER "shd_mqtt_user" // [MqttUser] MQTT user
#define MQTT_PASS "abcd1234" // [MqttPassword] MQTT password
#define MQTT_BUTTON_RETAIN 0 // [ButtonRetain] Button may send retain flag (0 = off, 1 = on)
#define MQTT_POWER_RETAIN 0 // [PowerRetain] Power status message may send retain flag (0 = off, 1 = on)

View File

@ -78,7 +78,7 @@ typedef union { // Restricted by MISRA-C Rule 18.4 bu
uint32_t no_hold_retain : 1; // bit 12 (v6.4.1.19) - SetOption62 - Don't use retain flag on HOLD messages
uint32_t no_power_feedback : 1; // bit 13 (v6.5.0.9) - SetOption63 - Don't scan relay power state at restart
uint32_t use_underscore : 1; // bit 14 (v6.5.0.12) - SetOption64 - Enable "_" instead of "-" as sensor index separator
uint32_t spare15 : 1;
uint32_t tuya_show_dimmer : 1; // bit 15 (v6.5.0.12) - SetOption65 - Enable or Disable Dimmer slider control
uint32_t spare16 : 1;
uint32_t spare17 : 1;
uint32_t spare18 : 1;

View File

@ -1535,6 +1535,8 @@ void ExecuteCommandPower(uint8_t device, uint8_t state, int source)
// ShowSource(source);
XdrvMailbox.notused = device;
if (SONOFF_IFAN02 == my_module_type) {
blink_mask &= 1; // No blinking on the fan relays
Settings.flag.interlock = 0; // No interlock mode as it is already done by the microcontroller

View File

@ -890,7 +890,10 @@ void HandleRoot(void)
if ((LST_COLDWARM == (light_type &7)) || (LST_RGBWC == (light_type &7))) {
WSContentSend_P(HTTP_MSG_SLIDER1, LightGetColorTemp());
}
WSContentSend_P(HTTP_MSG_SLIDER2, Settings.light_dimmer);
if(Settings.flag3.tuya_show_dimmer == 1)
{
WSContentSend_P(HTTP_MSG_SLIDER2, Settings.light_dimmer);
}
}
WSContentSend_P(HTTP_TABLE100);
WSContentSend_P(PSTR("<tr>"));

View File

@ -123,16 +123,26 @@ bool TuyaSetPower(void)
int16_t source = XdrvMailbox.payload;
if (source != SRC_SWITCH && TuyaSerial) { // ignore to prevent loop from pushing state from faceplate interaction
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("TYA: SetDevicePower.rpower=%d"), rpower);
TuyaSendBool(TUYA_POWER_ID, rpower);
boolean Bin[] = {0,0,0,0};
convertDecToBin(rpower, Bin);
TuyaSendBool(XdrvMailbox.notused, Bin[XdrvMailbox.notused-1]);
status = true;
}
return status;
}
void convertDecToBin(int Dec, boolean Bin[]) {
for(int i = 3 ; i >= 0 ; i--) {
if(pow(2, i)<=Dec) {
Dec = Dec - pow(2, i);
Bin[(i)] = 1;
} else {
}
}
}
bool TuyaSetChannels(void)
{
LightSerialDuty(((uint8_t*)XdrvMailbox.data)[0]);
@ -146,14 +156,19 @@ void LightSerialDuty(uint8_t duty)
duty = 25; // dimming acts odd below 25(10%) - this mirrors the threshold set on the faceplate itself
}
AddLog_P2(LOG_LEVEL_DEBUG, PSTR( "TYA: Send Serial Packet Dim Value=%d (id=%d)"), duty, Settings.param[P_TUYA_DIMMER_ID]);
TuyaSendValue(Settings.param[P_TUYA_DIMMER_ID], duty);
if(Settings.flag3.tuya_show_dimmer == 1) // no Dimmer for 4 relay
{
AddLog_P2(LOG_LEVEL_DEBUG, PSTR( "TYA: Send Serial Packet Dim Value=%d (id=%d)"), duty, Settings.param[P_TUYA_DIMMER_ID]);
TuyaSendValue(Settings.param[P_TUYA_DIMMER_ID], duty);
}
} else {
tuya_ignore_dim = false; // reset flag
if(Settings.flag3.tuya_show_dimmer == 1) // no Dimmer for 4 relay
{
AddLog_P2(LOG_LEVEL_DEBUG, PSTR( "TYA: Send Dim Level skipped due to 0 or already set. Value=%d"), duty);
}
}
}
@ -194,11 +209,11 @@ void TuyaPacketProcess(void)
case TUYA_CMD_STATE:
if (tuya_buffer[5] == 5) { // on/off packet
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("TYA: RX - %s State"),tuya_buffer[10]?"On":"Off");
if((power || Settings.light_dimmer > 0) && (power != tuya_buffer[10])) {
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("TYA: RX Device -%d --> %s State"),tuya_buffer[6],tuya_buffer[10]?"On":"Off");
ExecuteCommandPower(tuya_buffer[6], tuya_buffer[10], SRC_SWITCH); // send SRC_SWITCH? to use as flag to prevent loop from inbound states from faceplate interaction
/*if((power || Settings.light_dimmer > 0) && (power != tuya_buffer[10])) {
ExecuteCommandPower(1, tuya_buffer[10], SRC_SWITCH); // send SRC_SWITCH? to use as flag to prevent loop from inbound states from faceplate interaction
}
}*/
}
else if (tuya_buffer[5] == 8) { // dim packet
@ -281,6 +296,7 @@ bool TuyaModuleSelected(void)
void TuyaInit(void)
{
devices_present = Settings.param[6] == 0 ? 1 : Settings.param[6];
if (!Settings.param[P_TUYA_DIMMER_ID]) {
Settings.param[P_TUYA_DIMMER_ID] = TUYA_DIMMER_ID;
}

View File

@ -903,7 +903,14 @@ Setting_6_5_0_9['flag3'][0].update ({
'no_power_feedback': ('<L', (0x3A0,1,13), (None, None, ('SetOption', '"SetOption63 {}".format($)')) ),
})
# ======================================================================
# ======================================================================
Setting_6_5_0_10 = copy.deepcopy(Setting_6_5_0_9)
Setting_6_5_0_10['flag3'][0].update ({
'tuya_show_dimmer': ('<L', (0x3A0,1,15), (None, None, ('SetOption', '"SetOption65 {}".format($)')) ),
})
# ======================================================================
Settings = [
(0x6050010, 0xe00, Setting_6_5_0_10),
(0x6050009, 0xe00, Setting_6_5_0_9),
(0x6050007, 0xe00, Setting_6_5_0_7),
(0x6050006, 0xe00, Setting_6_5_0_6),