diff --git a/sonoff/my_user_config.h b/sonoff/my_user_config.h index 9cc66a9b9..9d245caa6 100644 --- a/sonoff/my_user_config.h +++ b/sonoff/my_user_config.h @@ -303,7 +303,15 @@ // #define USE_EXPRESSION // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem) // #define SUPPORT_MQTT_EVENT // Support trigger event with MQTT subscriptions (+3k5 code) -// -- Counter input ----------------------- +// -- Optional modules ---------------------------- +#define USE_SONOFF_IFAN // Add support for Sonoff iFan02 and iFan03 (+2k code) +#define USE_TUYA_DIMMER // Add support for Tuya Serial Dimmer + #define TUYA_DIMMER_ID 0 // Default dimmer Id +#define USE_ARMTRONIX_DIMMERS // Add support for Armtronix Dimmers (+1k4 code) +#define USE_PS_16_DZ // Add support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) +//#define ROTARY_V1 // Add support for MI Desk Lamp + +// -- Counter input ------------------------------- #define USE_COUNTER // Enable inputs as counter (+0k8 code) // -- Internal Analog input ----------------------- @@ -402,11 +410,6 @@ #define SDM630_SPEED 9600 // SDM630-Modbus RS485 serial speed (default: 9600 baud) //#define USE_MP3_PLAYER // Use of the DFPlayer Mini MP3 Player RB-DFR-562 commands: play, volume and stop #define MP3_VOLUME 10 // Set the startup volume on init, the range can be 0..30(max) -#define USE_TUYA_DIMMER // Add support for Tuya Serial Dimmer - #define TUYA_DIMMER_ID 0 // Default dimmer Id -#define USE_ARMTRONIX_DIMMERS // Add support for Armtronix Dimmers (+1k4 code) -#define USE_PS_16_DZ // Add support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) -//#define ROTARY_V1 // Add support for MI Desk Lamp //#define USE_AZ7798 // Add support for AZ-Instrument 7798 CO2 datalogger (+1k6 code) //#define USE_PN532_HSU // Add support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem) // #define USE_PN532_CAUSE_EVENTS // Cause event execution for PN532_UID= and PN532_DATA=[if defined] (+ 30 bytes code) diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index 465b59caf..e03f22ea4 100755 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -1632,6 +1632,7 @@ void ExecuteCommandPower(uint8_t device, uint8_t state, int source) // ShowSource(source); +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { blink_mask &= 1; // No blinking on the fan relays Settings.flag.interlock = 0; // No interlock mode as it is already done by the microcontroller @@ -1639,6 +1640,7 @@ void ExecuteCommandPower(uint8_t device, uint8_t state, int source) Settings.pulse_timer[2] = 0; Settings.pulse_timer[3] = 0; } +#endif // USE_SONOFF_IFAN uint8_t publish_power = 1; if ((POWER_OFF_NO_STATE == state) || (POWER_ON_NO_STATE == state)) { @@ -1783,7 +1785,9 @@ void PublishStatus(uint8_t payload) if ((0 == payload) || (99 == payload)) { uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present; +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { maxfn = 1; } +#endif // USE_SONOFF_IFAN stemp[0] = '\0'; for (uint32_t i = 0; i < maxfn; i++) { snprintf_P(stemp, sizeof(stemp), PSTR("%s%s\"%s\"" ), stemp, (i > 0 ? "," : ""), Settings.friendlyname[i]); @@ -1922,10 +1926,12 @@ void MqttShowState(void) } else { #endif ResponseAppend_P(PSTR(",\"%s\":\"%s\""), GetPowerDevice(stemp1, i +1, sizeof(stemp1), Settings.flag.device_index_enable), GetStateText(bitRead(power, i))); +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { ResponseAppend_P(PSTR(",\"" D_CMND_FANSPEED "\":%d"), GetFanspeed()); break; } +#endif // USE_SONOFF_IFAN #ifdef USE_LIGHT } #endif @@ -2000,11 +2006,6 @@ void PerformEverySecond(void) AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_BOOT_COUNT " %d"), Settings.bootcount); } - if ((4 == uptime) && (SONOFF_IFAN02 == my_module_type)) { // Microcontroller needs 3 seconds before accepting commands - SetDevicePower(1, SRC_RETRY); // Sync with default power on state microcontroller being Light ON and Fan OFF - SetDevicePower(power, SRC_RETRY); // Set required power on state - } - if (seriallog_timer) { seriallog_timer--; if (!seriallog_timer) { diff --git a/sonoff/sonoff_post.h b/sonoff/sonoff_post.h index 3be46fb59..7f50782c6 100644 --- a/sonoff/sonoff_post.h +++ b/sonoff/sonoff_post.h @@ -81,6 +81,16 @@ void KNX_CB_Action(message_t const &msg, void *arg); #undef CODE_IMAGE #define CODE_IMAGE 3 +// -- Optional modules ------------------------- +#define USE_SONOFF_IFAN // Add support for Sonoff iFan02 and iFan03 (+2k code) +#define USE_TUYA_DIMMER // Add support for Tuya Serial Dimmer +#ifndef TUYA_DIMMER_ID + #define TUYA_DIMMER_ID 0 // Default dimmer Id +#endif +//#define USE_ARMTRONIX_DIMMERS // Add support for Armtronix Dimmers (+1k4 code) +#define USE_PS_16_DZ // Add support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) +//#define ROTARY_V1 // Add support for MI Desk Lamp + #define USE_COUNTER // Enable counters #undef USE_ADC_VCC // Add Analog input on selected devices #define USE_DS18x20 // For more than one DS18x20 sensors with id sort, single scan and read retry (+1k3 code) @@ -137,11 +147,6 @@ void KNX_CB_Action(message_t const &msg, void *arg); #define USE_SDM630 // Add support for Eastron SDM630-Modbus energy meter (+2k code) #define USE_MP3_PLAYER // Use of the DFPlayer Mini MP3 Player RB-DFR-562 commands: play, volume and stop #define MP3_VOLUME 10 // Set the startup volume on init, the range can be 0..30(max) -#define USE_TUYA_DIMMER // Add support for Tuya Serial Dimmer -#ifndef TUYA_DIMMER_ID - #define TUYA_DIMMER_ID 0 // Default dimmer Id -#endif -#define USE_PS_16_DZ // Add support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) //#define USE_AZ7798 // Add support for AZ-Instrument 7798 CO2 datalogger #define USE_PN532_HSU // Add support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem) #define USE_PZEM004T // Add support for PZEM004T Energy monitor (+2k code) @@ -199,6 +204,16 @@ void KNX_CB_Action(message_t const &msg, void *arg); #undef USE_TIMERS_WEB // Disable support for timer webpage #undef USE_SUNRISE // Disable support for Sunrise and sunset tools #undef USE_RULES // Disable support for rules + +// -- Optional modules ------------------------- +//#ifndef USE_SONOFF_IFAN +#define USE_SONOFF_IFAN // Add support for Sonoff iFan02 and iFan03 (+2k code) +//#endif +#undef USE_TUYA_DIMMER // Disable support for Tuya Serial Dimmer +#undef USE_ARMTRONIX_DIMMERS // Disable support for Armtronix Dimmers (+1k4 code) +#undef USE_PS_16_DZ // Disable support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) +#undef ROTARY_V1 // Disable support for MI Desk Lamp + #undef USE_COUNTER // Disable counters #undef USE_I2C // Disable all I2C sensors #undef USE_SPI // Disable all SPI devices @@ -210,9 +225,6 @@ void KNX_CB_Action(message_t const &msg, void *arg); #undef USE_SDM120 // Disable support for Eastron SDM120-Modbus energy meter #undef USE_SDM630 // Disable support for Eastron SDM630-Modbus energy meter #undef USE_MP3_PLAYER // Disable DFPlayer Mini MP3 Player RB-DFR-562 commands: play, volume and stop -#undef USE_TUYA_DIMMER // Disable support for Tuya Serial Dimmer -#undef USE_ARMTRONIX_DIMMERS // Disable support for Armtronix Dimmers (+1k4 code) -#undef USE_PS_16_DZ // Disable support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) #undef USE_AZ7798 // Disable support for AZ-Instrument 7798 CO2 datalogger #undef USE_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem) #undef USE_PZEM004T // Disable PZEM004T energy sensor @@ -328,6 +340,14 @@ void KNX_CB_Action(message_t const &msg, void *arg); //#undef USE_TIMERS_WEB // Disable support for timer webpage //#undef USE_SUNRISE // Disable support for Sunrise and sunset tools //#undef USE_RULES // Disable support for rules + +// -- Optional modules ------------------------- +#define USE_SONOFF_IFAN // Add support for Sonoff iFan02 and iFan03 (+2k code) +//#undef USE_TUYA_DIMMER // Disable support for Tuya Serial Dimmer +#undef USE_ARMTRONIX_DIMMERS // Disable support for Armtronix Dimmers (+1k4 code) +#undef USE_PS_16_DZ // Disable support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) +#undef ROTARY_V1 // Disable support for MI Desk Lamp + #undef USE_COUNTER // Disable counters #undef USE_DS18x20 // Disable DS18x20 sensor #undef USE_DS18x20_LEGACY // Disable DS18x20 sensor @@ -343,9 +363,6 @@ void KNX_CB_Action(message_t const &msg, void *arg); #undef USE_SDM120 // Disable support for Eastron SDM120-Modbus energy meter #undef USE_SDM630 // Disable support for Eastron SDM630-Modbus energy meter #undef USE_MP3_PLAYER // Disable DFPlayer Mini MP3 Player RB-DFR-562 commands: play, volume and stop -//#undef USE_TUYA_DIMMER // Disable support for Tuya Serial Dimmer -#undef USE_ARMTRONIX_DIMMERS // Disable support for Armtronix Dimmers (+1k4 code) -#undef USE_PS_16_DZ // Disable support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) #undef USE_AZ7798 // Disable support for AZ-Instrument 7798 CO2 datalogger #undef USE_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem) #undef USE_PZEM004T // Disable PZEM004T energy sensor @@ -399,6 +416,14 @@ void KNX_CB_Action(message_t const &msg, void *arg); #undef USE_RULES // Disable support for rules #undef USE_SCRIPT // Disable support for script #undef USE_LIGHT // Disable support for lights + +// -- Optional modules ------------------------- +#undef USE_SONOFF_IFAN // Disable support for Sonoff iFan02 and iFan03 (+2k code) +#undef USE_TUYA_DIMMER // Disable support for Tuya Serial Dimmer +#undef USE_ARMTRONIX_DIMMERS // Disable support for Armtronix Dimmers (+1k4 code) +#undef USE_PS_16_DZ // Disable support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) +#undef ROTARY_V1 // Disable support for MI Desk Lamp + #undef USE_COUNTER // Disable counters #undef USE_DS18x20 // Disable DS18x20 sensor #undef USE_DS18x20_LEGACY // Disable DS18x20 sensor @@ -414,9 +439,6 @@ void KNX_CB_Action(message_t const &msg, void *arg); #undef USE_SDM120 // Disable support for Eastron SDM120-Modbus energy meter #undef USE_SDM630 // Disable support for Eastron SDM630-Modbus energy meter #undef USE_MP3_PLAYER // Disable DFPlayer Mini MP3 Player RB-DFR-562 commands: play, volume and stop -#undef USE_TUYA_DIMMER // Disable support for Tuya Serial Dimmer -#undef USE_ARMTRONIX_DIMMERS // Disable support for Armtronix Dimmers (+1k4 code) -#undef USE_PS_16_DZ // Disable support for PS-16-DZ Dimmer and Sonoff L1 (+2k code) #undef USE_AZ7798 // Disable support for AZ-Instrument 7798 CO2 datalogger #undef USE_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem) #undef USE_PZEM004T // Disable PZEM004T energy sensor diff --git a/sonoff/sonoff_template.h b/sonoff/sonoff_template.h index a99b3bce9..3b336fdc6 100644 --- a/sonoff/sonoff_template.h +++ b/sonoff/sonoff_template.h @@ -669,8 +669,10 @@ const uint8_t kModuleNiceList[] PROGMEM = { SONOFF_B1, // Sonoff Light Bulbs SLAMPHER, SONOFF_SC, // Sonoff Environmemtal Sensor +#ifdef USE_SONOFF_IFAN SONOFF_IFAN02, // Sonoff Fan SONOFF_IFAN03, +#endif SONOFF_BRIDGE, // Sonoff Bridge SONOFF_SV, // Sonoff Development Devices SONOFF_DEV, diff --git a/sonoff/xdrv_01_webserver.ino b/sonoff/xdrv_01_webserver.ino index 2ab583218..23f600525 100644 --- a/sonoff/xdrv_01_webserver.ino +++ b/sonoff/xdrv_01_webserver.ino @@ -942,6 +942,7 @@ void HandleRoot(void) #endif WSContentSend_P(HTTP_TABLE100); WSContentSend_P(PSTR("")); +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { WSContentSend_P(HTTP_DEVICE_CONTROL, 36, 1, D_BUTTON_TOGGLE, ""); for (uint32_t i = 0; i < MaxFanspeed(); i++) { @@ -949,11 +950,14 @@ void HandleRoot(void) WSContentSend_P(HTTP_DEVICE_CONTROL, 16, i +2, stemp, ""); } } else { +#endif // USE_SONOFF_IFAN for (uint32_t idx = 1; idx <= devices_present; idx++) { snprintf_P(stemp, sizeof(stemp), PSTR(" %d"), idx); WSContentSend_P(HTTP_DEVICE_CONTROL, 100 / devices_present, idx, (devices_present < 5) ? D_BUTTON_TOGGLE : "", (devices_present > 1) ? stemp : ""); } +#ifdef USE_SONOFF_IFAN } +#endif // USE_SONOFF_IFAN WSContentSend_P(PSTR("")); } if (SONOFF_BRIDGE == my_module_type) { @@ -1007,6 +1011,7 @@ bool HandleRootStatusRefresh(void) if (strlen(tmp)) { ShowWebSource(SRC_WEBGUI); uint8_t device = atoi(tmp); +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { if (device < 2) { ExecuteCommandPower(1, POWER_TOGGLE, SRC_IGNORE); @@ -1015,8 +1020,11 @@ bool HandleRootStatusRefresh(void) ExecuteCommand(svalue, SRC_WEBGUI); } } else { +#endif // USE_SONOFF_IFAN ExecuteCommandPower(device, POWER_TOGGLE, SRC_IGNORE); +#ifdef USE_SONOFF_IFAN } +#endif // USE_SONOFF_IFAN } WebGetArg("d", tmp, sizeof(tmp)); // 0 - 100 Dimmer value if (strlen(tmp)) { @@ -1042,17 +1050,21 @@ bool HandleRootStatusRefresh(void) if (devices_present) { WSContentSend_P(PSTR("{t}")); uint8_t fsize = (devices_present < 5) ? 70 - (devices_present * 8) : 32; +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { WSContentSend_P(HTTP_DEVICE_STATE, 36, (bitRead(power, 0)) ? "bold" : "normal", 54, GetStateText(bitRead(power, 0))); uint8_t fanspeed = GetFanspeed(); snprintf_P(svalue, sizeof(svalue), PSTR("%d"), fanspeed); WSContentSend_P(HTTP_DEVICE_STATE, 64, (fanspeed) ? "bold" : "normal", 54, (fanspeed) ? svalue : GetStateText(0)); } else { +#endif // USE_SONOFF_IFAN for (uint32_t idx = 1; idx <= devices_present; idx++) { snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1)); WSContentSend_P(HTTP_DEVICE_STATE, 100 / devices_present, (bitRead(power, idx -1)) ? "bold" : "normal", fsize, (devices_present < 5) ? GetStateText(bitRead(power, idx -1)) : svalue); } +#ifdef USE_SONOFF_IFAN } +#endif // USE_SONOFF_IFAN WSContentSend_P(PSTR("")); } WSContentEnd(); @@ -1573,7 +1585,9 @@ void HandleOtherConfiguration(void) WSContentSend_P(HTTP_FORM_OTHER, stemp, (USER_MODULE == Settings.module) ? " checked disabled" : "", (Settings.flag.mqtt_enabled) ? " checked" : ""); uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present; +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { maxfn = 1; } +#endif // USE_SONOFF_IFAN for (uint32_t i = 0; i < maxfn; i++) { snprintf_P(stemp, sizeof(stemp), PSTR("%d"), i +1); WSContentSend_P(PSTR("" D_FRIENDLY_NAME " %d (" FRIENDLY_NAME "%s)

"), @@ -1752,7 +1766,9 @@ void HandleInformation(void) WSContentSend_P(PSTR("}1" D_BOOT_COUNT "}2%d"), Settings.bootcount); WSContentSend_P(PSTR("}1" D_RESTART_REASON "}2%s"), GetResetReason().c_str()); uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present; +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { maxfn = 1; } +#endif // USE_SONOFF_IFAN for (uint32_t i = 0; i < maxfn; i++) { WSContentSend_P(PSTR("}1" D_FRIENDLY_NAME " %d}2%s"), i +1, Settings.friendlyname[i]); } diff --git a/sonoff/xdrv_02_mqtt.ino b/sonoff/xdrv_02_mqtt.ino index 77e8e1876..2ffbedf68 100644 --- a/sonoff/xdrv_02_mqtt.ino +++ b/sonoff/xdrv_02_mqtt.ino @@ -309,6 +309,7 @@ void MqttPublishPowerState(uint8_t device) if ((device < 1) || (device > devices_present)) { device = 1; } +#ifdef USE_SONOFF_IFAN if (IsModuleIfan() && (device > 1)) { if (GetFanspeed() < MaxFanspeed()) { // 4 occurs when fanspeed is 3 and RC button 2 is pressed #ifdef USE_DOMOTICZ @@ -320,6 +321,7 @@ void MqttPublishPowerState(uint8_t device) MqttPublish(stopic); } } else { +#endif // USE_SONOFF_IFAN GetPowerDevice(scommand, device, sizeof(scommand), Settings.flag.device_index_enable); GetTopic_P(stopic, STAT, mqtt_topic, (Settings.flag.mqtt_response) ? scommand : S_RSLT_RESULT); Response_P(S_JSON_COMMAND_SVALUE, scommand, GetStateText(bitRead(power, device -1))); @@ -328,14 +330,18 @@ void MqttPublishPowerState(uint8_t device) GetTopic_P(stopic, STAT, mqtt_topic, scommand); Response_P(GetStateText(bitRead(power, device -1))); MqttPublish(stopic, Settings.flag.mqtt_power_retain); +#ifdef USE_SONOFF_IFAN } +#endif // USE_SONOFF_IFAN } void MqttPublishAllPowerState() { for (uint32_t i = 1; i <= devices_present; i++) { MqttPublishPowerState(i); +#ifdef USE_SONOFF_IFAN if (IsModuleIfan()) { break; } // Report status of light relay only +#endif // USE_SONOFF_IFAN } } diff --git a/sonoff/xdrv_07_domoticz.ino b/sonoff/xdrv_07_domoticz.ino index 7519e677b..bf63e1eb5 100644 --- a/sonoff/xdrv_07_domoticz.ino +++ b/sonoff/xdrv_07_domoticz.ino @@ -74,6 +74,7 @@ int DomoticzRssiQuality(void) return WifiGetRssiAsQuality(WiFi.RSSI()) / 10; } +#ifdef USE_SONOFF_IFAN void MqttPublishDomoticzFanState() { if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[1]) { @@ -95,21 +96,26 @@ void DomoticzUpdateFanState() } domoticz_update_flag = 1; } +#endif // USE_SONOFF_IFAN void MqttPublishDomoticzPowerState(uint8_t device) { if (Settings.flag.mqtt_enabled) { if ((device < 1) || (device > devices_present)) { device = 1; } if (Settings.domoticz_relay_idx[device -1]) { +#ifdef USE_SONOFF_IFAN if (IsModuleIfan() && (device > 1)) { // Fan handled by MqttPublishDomoticzFanState } else { +#endif // USE_SONOFF_IFAN char svalue[8]; // Dimmer value snprintf_P(svalue, sizeof(svalue), PSTR("%d"), Settings.light_dimmer); Response_P(DOMOTICZ_MESSAGE, (int)Settings.domoticz_relay_idx[device -1], (power & (1 << (device -1))) ? 1 : 0, (light_type) ? svalue : "", DomoticzBatteryQuality(), DomoticzRssiQuality()); MqttPublish(domoticz_in_topic); +#ifdef USE_SONOFF_IFAN } +#endif // USE_SONOFF_IFAN } } } @@ -129,12 +135,16 @@ void DomoticzMqttUpdate(void) if (domoticz_update_timer <= 0) { domoticz_update_timer = Settings.domoticz_update_timer; for (uint32_t i = 1; i <= devices_present; i++) { +#ifdef USE_SONOFF_IFAN if (IsModuleIfan() && (i > 1)) { MqttPublishDomoticzFanState(); break; } else { +#endif // USE_SONOFF_IFAN MqttPublishDomoticzPowerState(i); +#ifdef USE_SONOFF_IFAN } +#endif // USE_SONOFF_IFAN } } } @@ -214,6 +224,7 @@ bool DomoticzMqttData(void) if (idx == Settings.domoticz_relay_idx[i]) { bool iscolordimmer = strcmp_P(domoticz["dtype"],PSTR("Color Switch")) == 0; snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1); +#ifdef USE_SONOFF_IFAN if (IsModuleIfan() && (1 == i)) { // Idx 2 is fanspeed uint8_t svalue = 0; if (domoticz.containsKey("svalue1")) { @@ -231,8 +242,9 @@ bool DomoticzMqttData(void) snprintf_P(XdrvMailbox.topic, XdrvMailbox.index, PSTR("/" D_CMND_FANSPEED)); snprintf_P(XdrvMailbox.data, XdrvMailbox.data_len, PSTR("%d"), svalue); found = 1; - } - else if (iscolordimmer && 10 == nvalue) { // Color_SetColor + } else +#endif // USE_SONOFF_IFAN + if (iscolordimmer && 10 == nvalue) { // Color_SetColor JsonObject& color = domoticz["Color"]; uint16_t level = nvalue = domoticz["svalue1"]; uint16_t r = color["r"]; r = r * level / 100; @@ -472,7 +484,9 @@ void HandleDomoticzConfiguration(void) WSContentSend_P(HTTP_FORM_DOMOTICZ_SWITCH, i +1, i, Settings.domoticz_switch_idx[i]); } +#ifdef USE_SONOFF_IFAN if (IsModuleIfan() && (1 == i)) { break; } +#endif // USE_SONOFF_IFAN } for (uint32_t i = 0; i < DZ_MAX_SENSORS; i++) { WSContentSend_P(HTTP_FORM_DOMOTICZ_SENSOR, diff --git a/sonoff/xdrv_22_sonoff_ifan.ino b/sonoff/xdrv_22_sonoff_ifan.ino index ae5a04764..2d4a832af 100644 --- a/sonoff/xdrv_22_sonoff_ifan.ino +++ b/sonoff/xdrv_22_sonoff_ifan.ino @@ -17,6 +17,7 @@ along with this program. If not, see . */ +#ifdef USE_SONOFF_IFAN /*********************************************************************************************\ Sonoff iFan02 and iFan03 \*********************************************************************************************/ @@ -32,6 +33,7 @@ const uint8_t kIFan03Sequence[MAX_FAN_SPEED][MAX_FAN_SPEED] = {{0, 2, 2, 2}, {0, uint8_t ifan_fanspeed_timer = 0; uint8_t ifan_fanspeed_goal = 0; bool ifan_receive_flag = false; +bool ifan_restart_flag = true; /*********************************************************************************************/ @@ -236,6 +238,12 @@ void SonoffIfanUpdate(void) } } } + + if (ifan_restart_flag && (4 == uptime) && (SONOFF_IFAN02 == my_module_type)) { // Microcontroller needs 3 seconds before accepting commands + ifan_restart_flag = false; + SetDevicePower(1, SRC_RETRY); // Sync with default power on state microcontroller being Light ON and Fan OFF + SetDevicePower(power, SRC_RETRY); // Set required power on state + } } /*********************************************************************************************\ @@ -264,3 +272,5 @@ bool Xdrv22(uint8_t function) } return result; } + +#endif // USE_SONOFF_IFAN