mirror of
https://github.com/arendst/Tasmota.git
synced 2025-08-01 15:07:42 +00:00
Add option to disable support for module Sonoff iFan at compile time
Add option to disable support for module Sonoff iFan at compile time (#6093)
This commit is contained in:
parent
a053a2cc4a
commit
d77017fd74
@ -303,7 +303,15 @@
|
|||||||
// #define USE_EXPRESSION // Add support for expression evaluation in rules (+3k2 code, +64 bytes mem)
|
// #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)
|
// #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)
|
#define USE_COUNTER // Enable inputs as counter (+0k8 code)
|
||||||
|
|
||||||
// -- Internal Analog input -----------------------
|
// -- Internal Analog input -----------------------
|
||||||
@ -402,11 +410,6 @@
|
|||||||
#define SDM630_SPEED 9600 // SDM630-Modbus RS485 serial speed (default: 9600 baud)
|
#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 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 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_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_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)
|
// #define USE_PN532_CAUSE_EVENTS // Cause event execution for PN532_UID= and PN532_DATA=[if defined] (+ 30 bytes code)
|
||||||
|
@ -1632,6 +1632,7 @@ void ExecuteCommandPower(uint8_t device, uint8_t state, int source)
|
|||||||
|
|
||||||
// ShowSource(source);
|
// ShowSource(source);
|
||||||
|
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan()) {
|
if (IsModuleIfan()) {
|
||||||
blink_mask &= 1; // No blinking on the fan relays
|
blink_mask &= 1; // No blinking on the fan relays
|
||||||
Settings.flag.interlock = 0; // No interlock mode as it is already done by the microcontroller
|
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[2] = 0;
|
||||||
Settings.pulse_timer[3] = 0;
|
Settings.pulse_timer[3] = 0;
|
||||||
}
|
}
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
|
|
||||||
uint8_t publish_power = 1;
|
uint8_t publish_power = 1;
|
||||||
if ((POWER_OFF_NO_STATE == state) || (POWER_ON_NO_STATE == state)) {
|
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)) {
|
if ((0 == payload) || (99 == payload)) {
|
||||||
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan()) { maxfn = 1; }
|
if (IsModuleIfan()) { maxfn = 1; }
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
stemp[0] = '\0';
|
stemp[0] = '\0';
|
||||||
for (uint32_t i = 0; i < maxfn; i++) {
|
for (uint32_t i = 0; i < maxfn; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("%s%s\"%s\"" ), stemp, (i > 0 ? "," : ""), Settings.friendlyname[i]);
|
snprintf_P(stemp, sizeof(stemp), PSTR("%s%s\"%s\"" ), stemp, (i > 0 ? "," : ""), Settings.friendlyname[i]);
|
||||||
@ -1922,10 +1926,12 @@ void MqttShowState(void)
|
|||||||
} else {
|
} else {
|
||||||
#endif
|
#endif
|
||||||
ResponseAppend_P(PSTR(",\"%s\":\"%s\""), GetPowerDevice(stemp1, i +1, sizeof(stemp1), Settings.flag.device_index_enable), GetStateText(bitRead(power, i)));
|
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()) {
|
if (IsModuleIfan()) {
|
||||||
ResponseAppend_P(PSTR(",\"" D_CMND_FANSPEED "\":%d"), GetFanspeed());
|
ResponseAppend_P(PSTR(",\"" D_CMND_FANSPEED "\":%d"), GetFanspeed());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
#ifdef USE_LIGHT
|
#ifdef USE_LIGHT
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2000,11 +2006,6 @@ void PerformEverySecond(void)
|
|||||||
AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_APPLICATION D_BOOT_COUNT " %d"), Settings.bootcount);
|
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) {
|
if (seriallog_timer) {
|
||||||
seriallog_timer--;
|
seriallog_timer--;
|
||||||
if (!seriallog_timer) {
|
if (!seriallog_timer) {
|
||||||
|
@ -81,6 +81,16 @@ void KNX_CB_Action(message_t const &msg, void *arg);
|
|||||||
#undef CODE_IMAGE
|
#undef CODE_IMAGE
|
||||||
#define CODE_IMAGE 3
|
#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
|
#define USE_COUNTER // Enable counters
|
||||||
#undef USE_ADC_VCC // Add Analog input on selected devices
|
#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)
|
#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_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 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 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_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_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)
|
#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_TIMERS_WEB // Disable support for timer webpage
|
||||||
#undef USE_SUNRISE // Disable support for Sunrise and sunset tools
|
#undef USE_SUNRISE // Disable support for Sunrise and sunset tools
|
||||||
#undef USE_RULES // Disable support for rules
|
#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_COUNTER // Disable counters
|
||||||
#undef USE_I2C // Disable all I2C sensors
|
#undef USE_I2C // Disable all I2C sensors
|
||||||
#undef USE_SPI // Disable all SPI devices
|
#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_SDM120 // Disable support for Eastron SDM120-Modbus energy meter
|
||||||
#undef USE_SDM630 // Disable support for Eastron SDM630-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_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_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_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem)
|
||||||
#undef USE_PZEM004T // Disable PZEM004T energy sensor
|
#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_TIMERS_WEB // Disable support for timer webpage
|
||||||
//#undef USE_SUNRISE // Disable support for Sunrise and sunset tools
|
//#undef USE_SUNRISE // Disable support for Sunrise and sunset tools
|
||||||
//#undef USE_RULES // Disable support for rules
|
//#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_COUNTER // Disable counters
|
||||||
#undef USE_DS18x20 // Disable DS18x20 sensor
|
#undef USE_DS18x20 // Disable DS18x20 sensor
|
||||||
#undef USE_DS18x20_LEGACY // 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_SDM120 // Disable support for Eastron SDM120-Modbus energy meter
|
||||||
#undef USE_SDM630 // Disable support for Eastron SDM630-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_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_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_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem)
|
||||||
#undef USE_PZEM004T // Disable PZEM004T energy sensor
|
#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_RULES // Disable support for rules
|
||||||
#undef USE_SCRIPT // Disable support for script
|
#undef USE_SCRIPT // Disable support for script
|
||||||
#undef USE_LIGHT // Disable support for lights
|
#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_COUNTER // Disable counters
|
||||||
#undef USE_DS18x20 // Disable DS18x20 sensor
|
#undef USE_DS18x20 // Disable DS18x20 sensor
|
||||||
#undef USE_DS18x20_LEGACY // 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_SDM120 // Disable support for Eastron SDM120-Modbus energy meter
|
||||||
#undef USE_SDM630 // Disable support for Eastron SDM630-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_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_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_PN532_HSU // Disable support for PN532 using HSU (Serial) interface (+1k8 code, 140 bytes mem)
|
||||||
#undef USE_PZEM004T // Disable PZEM004T energy sensor
|
#undef USE_PZEM004T // Disable PZEM004T energy sensor
|
||||||
|
@ -669,8 +669,10 @@ const uint8_t kModuleNiceList[] PROGMEM = {
|
|||||||
SONOFF_B1, // Sonoff Light Bulbs
|
SONOFF_B1, // Sonoff Light Bulbs
|
||||||
SLAMPHER,
|
SLAMPHER,
|
||||||
SONOFF_SC, // Sonoff Environmemtal Sensor
|
SONOFF_SC, // Sonoff Environmemtal Sensor
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
SONOFF_IFAN02, // Sonoff Fan
|
SONOFF_IFAN02, // Sonoff Fan
|
||||||
SONOFF_IFAN03,
|
SONOFF_IFAN03,
|
||||||
|
#endif
|
||||||
SONOFF_BRIDGE, // Sonoff Bridge
|
SONOFF_BRIDGE, // Sonoff Bridge
|
||||||
SONOFF_SV, // Sonoff Development Devices
|
SONOFF_SV, // Sonoff Development Devices
|
||||||
SONOFF_DEV,
|
SONOFF_DEV,
|
||||||
|
@ -942,6 +942,7 @@ void HandleRoot(void)
|
|||||||
#endif
|
#endif
|
||||||
WSContentSend_P(HTTP_TABLE100);
|
WSContentSend_P(HTTP_TABLE100);
|
||||||
WSContentSend_P(PSTR("<tr>"));
|
WSContentSend_P(PSTR("<tr>"));
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan()) {
|
if (IsModuleIfan()) {
|
||||||
WSContentSend_P(HTTP_DEVICE_CONTROL, 36, 1, D_BUTTON_TOGGLE, "");
|
WSContentSend_P(HTTP_DEVICE_CONTROL, 36, 1, D_BUTTON_TOGGLE, "");
|
||||||
for (uint32_t i = 0; i < MaxFanspeed(); i++) {
|
for (uint32_t i = 0; i < MaxFanspeed(); i++) {
|
||||||
@ -949,11 +950,14 @@ void HandleRoot(void)
|
|||||||
WSContentSend_P(HTTP_DEVICE_CONTROL, 16, i +2, stemp, "");
|
WSContentSend_P(HTTP_DEVICE_CONTROL, 16, i +2, stemp, "");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
for (uint32_t idx = 1; idx <= devices_present; idx++) {
|
for (uint32_t idx = 1; idx <= devices_present; idx++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR(" %d"), 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 : "");
|
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("</tr></table>"));
|
WSContentSend_P(PSTR("</tr></table>"));
|
||||||
}
|
}
|
||||||
if (SONOFF_BRIDGE == my_module_type) {
|
if (SONOFF_BRIDGE == my_module_type) {
|
||||||
@ -1007,6 +1011,7 @@ bool HandleRootStatusRefresh(void)
|
|||||||
if (strlen(tmp)) {
|
if (strlen(tmp)) {
|
||||||
ShowWebSource(SRC_WEBGUI);
|
ShowWebSource(SRC_WEBGUI);
|
||||||
uint8_t device = atoi(tmp);
|
uint8_t device = atoi(tmp);
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan()) {
|
if (IsModuleIfan()) {
|
||||||
if (device < 2) {
|
if (device < 2) {
|
||||||
ExecuteCommandPower(1, POWER_TOGGLE, SRC_IGNORE);
|
ExecuteCommandPower(1, POWER_TOGGLE, SRC_IGNORE);
|
||||||
@ -1015,8 +1020,11 @@ bool HandleRootStatusRefresh(void)
|
|||||||
ExecuteCommand(svalue, SRC_WEBGUI);
|
ExecuteCommand(svalue, SRC_WEBGUI);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
ExecuteCommandPower(device, POWER_TOGGLE, SRC_IGNORE);
|
ExecuteCommandPower(device, POWER_TOGGLE, SRC_IGNORE);
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
WebGetArg("d", tmp, sizeof(tmp)); // 0 - 100 Dimmer value
|
WebGetArg("d", tmp, sizeof(tmp)); // 0 - 100 Dimmer value
|
||||||
if (strlen(tmp)) {
|
if (strlen(tmp)) {
|
||||||
@ -1042,17 +1050,21 @@ bool HandleRootStatusRefresh(void)
|
|||||||
if (devices_present) {
|
if (devices_present) {
|
||||||
WSContentSend_P(PSTR("{t}<tr>"));
|
WSContentSend_P(PSTR("{t}<tr>"));
|
||||||
uint8_t fsize = (devices_present < 5) ? 70 - (devices_present * 8) : 32;
|
uint8_t fsize = (devices_present < 5) ? 70 - (devices_present * 8) : 32;
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan()) {
|
if (IsModuleIfan()) {
|
||||||
WSContentSend_P(HTTP_DEVICE_STATE, 36, (bitRead(power, 0)) ? "bold" : "normal", 54, GetStateText(bitRead(power, 0)));
|
WSContentSend_P(HTTP_DEVICE_STATE, 36, (bitRead(power, 0)) ? "bold" : "normal", 54, GetStateText(bitRead(power, 0)));
|
||||||
uint8_t fanspeed = GetFanspeed();
|
uint8_t fanspeed = GetFanspeed();
|
||||||
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), fanspeed);
|
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), fanspeed);
|
||||||
WSContentSend_P(HTTP_DEVICE_STATE, 64, (fanspeed) ? "bold" : "normal", 54, (fanspeed) ? svalue : GetStateText(0));
|
WSContentSend_P(HTTP_DEVICE_STATE, 64, (fanspeed) ? "bold" : "normal", 54, (fanspeed) ? svalue : GetStateText(0));
|
||||||
} else {
|
} else {
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
for (uint32_t idx = 1; idx <= devices_present; idx++) {
|
for (uint32_t idx = 1; idx <= devices_present; idx++) {
|
||||||
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), bitRead(power, idx -1));
|
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);
|
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("</tr></table>"));
|
WSContentSend_P(PSTR("</tr></table>"));
|
||||||
}
|
}
|
||||||
WSContentEnd();
|
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" : "");
|
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;
|
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : (!devices_present) ? 1 : devices_present;
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan()) { maxfn = 1; }
|
if (IsModuleIfan()) { maxfn = 1; }
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
for (uint32_t i = 0; i < maxfn; i++) {
|
for (uint32_t i = 0; i < maxfn; i++) {
|
||||||
snprintf_P(stemp, sizeof(stemp), PSTR("%d"), i +1);
|
snprintf_P(stemp, sizeof(stemp), PSTR("%d"), i +1);
|
||||||
WSContentSend_P(PSTR("<b>" D_FRIENDLY_NAME " %d</b> (" FRIENDLY_NAME "%s)<br><input id='a%d' placeholder='" FRIENDLY_NAME "%s' value='%s'><p></p>"),
|
WSContentSend_P(PSTR("<b>" D_FRIENDLY_NAME " %d</b> (" FRIENDLY_NAME "%s)<br><input id='a%d' placeholder='" FRIENDLY_NAME "%s' value='%s'><p></p>"),
|
||||||
@ -1752,7 +1766,9 @@ void HandleInformation(void)
|
|||||||
WSContentSend_P(PSTR("}1" D_BOOT_COUNT "}2%d"), Settings.bootcount);
|
WSContentSend_P(PSTR("}1" D_BOOT_COUNT "}2%d"), Settings.bootcount);
|
||||||
WSContentSend_P(PSTR("}1" D_RESTART_REASON "}2%s"), GetResetReason().c_str());
|
WSContentSend_P(PSTR("}1" D_RESTART_REASON "}2%s"), GetResetReason().c_str());
|
||||||
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present;
|
uint8_t maxfn = (devices_present > MAX_FRIENDLYNAMES) ? MAX_FRIENDLYNAMES : devices_present;
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan()) { maxfn = 1; }
|
if (IsModuleIfan()) { maxfn = 1; }
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
for (uint32_t i = 0; i < maxfn; i++) {
|
for (uint32_t i = 0; i < maxfn; i++) {
|
||||||
WSContentSend_P(PSTR("}1" D_FRIENDLY_NAME " %d}2%s"), i +1, Settings.friendlyname[i]);
|
WSContentSend_P(PSTR("}1" D_FRIENDLY_NAME " %d}2%s"), i +1, Settings.friendlyname[i]);
|
||||||
}
|
}
|
||||||
|
@ -309,6 +309,7 @@ void MqttPublishPowerState(uint8_t device)
|
|||||||
|
|
||||||
if ((device < 1) || (device > devices_present)) { device = 1; }
|
if ((device < 1) || (device > devices_present)) { device = 1; }
|
||||||
|
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan() && (device > 1)) {
|
if (IsModuleIfan() && (device > 1)) {
|
||||||
if (GetFanspeed() < MaxFanspeed()) { // 4 occurs when fanspeed is 3 and RC button 2 is pressed
|
if (GetFanspeed() < MaxFanspeed()) { // 4 occurs when fanspeed is 3 and RC button 2 is pressed
|
||||||
#ifdef USE_DOMOTICZ
|
#ifdef USE_DOMOTICZ
|
||||||
@ -320,6 +321,7 @@ void MqttPublishPowerState(uint8_t device)
|
|||||||
MqttPublish(stopic);
|
MqttPublish(stopic);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
GetPowerDevice(scommand, device, sizeof(scommand), Settings.flag.device_index_enable);
|
GetPowerDevice(scommand, device, sizeof(scommand), Settings.flag.device_index_enable);
|
||||||
GetTopic_P(stopic, STAT, mqtt_topic, (Settings.flag.mqtt_response) ? scommand : S_RSLT_RESULT);
|
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)));
|
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);
|
GetTopic_P(stopic, STAT, mqtt_topic, scommand);
|
||||||
Response_P(GetStateText(bitRead(power, device -1)));
|
Response_P(GetStateText(bitRead(power, device -1)));
|
||||||
MqttPublish(stopic, Settings.flag.mqtt_power_retain);
|
MqttPublish(stopic, Settings.flag.mqtt_power_retain);
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
|
|
||||||
void MqttPublishAllPowerState()
|
void MqttPublishAllPowerState()
|
||||||
{
|
{
|
||||||
for (uint32_t i = 1; i <= devices_present; i++) {
|
for (uint32_t i = 1; i <= devices_present; i++) {
|
||||||
MqttPublishPowerState(i);
|
MqttPublishPowerState(i);
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan()) { break; } // Report status of light relay only
|
if (IsModuleIfan()) { break; } // Report status of light relay only
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ int DomoticzRssiQuality(void)
|
|||||||
return WifiGetRssiAsQuality(WiFi.RSSI()) / 10;
|
return WifiGetRssiAsQuality(WiFi.RSSI()) / 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
void MqttPublishDomoticzFanState()
|
void MqttPublishDomoticzFanState()
|
||||||
{
|
{
|
||||||
if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[1]) {
|
if (Settings.flag.mqtt_enabled && Settings.domoticz_relay_idx[1]) {
|
||||||
@ -95,21 +96,26 @@ void DomoticzUpdateFanState()
|
|||||||
}
|
}
|
||||||
domoticz_update_flag = 1;
|
domoticz_update_flag = 1;
|
||||||
}
|
}
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
|
|
||||||
void MqttPublishDomoticzPowerState(uint8_t device)
|
void MqttPublishDomoticzPowerState(uint8_t device)
|
||||||
{
|
{
|
||||||
if (Settings.flag.mqtt_enabled) {
|
if (Settings.flag.mqtt_enabled) {
|
||||||
if ((device < 1) || (device > devices_present)) { device = 1; }
|
if ((device < 1) || (device > devices_present)) { device = 1; }
|
||||||
if (Settings.domoticz_relay_idx[device -1]) {
|
if (Settings.domoticz_relay_idx[device -1]) {
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan() && (device > 1)) {
|
if (IsModuleIfan() && (device > 1)) {
|
||||||
// Fan handled by MqttPublishDomoticzFanState
|
// Fan handled by MqttPublishDomoticzFanState
|
||||||
} else {
|
} else {
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
char svalue[8]; // Dimmer value
|
char svalue[8]; // Dimmer value
|
||||||
|
|
||||||
snprintf_P(svalue, sizeof(svalue), PSTR("%d"), Settings.light_dimmer);
|
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());
|
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);
|
MqttPublish(domoticz_in_topic);
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,12 +135,16 @@ void DomoticzMqttUpdate(void)
|
|||||||
if (domoticz_update_timer <= 0) {
|
if (domoticz_update_timer <= 0) {
|
||||||
domoticz_update_timer = Settings.domoticz_update_timer;
|
domoticz_update_timer = Settings.domoticz_update_timer;
|
||||||
for (uint32_t i = 1; i <= devices_present; i++) {
|
for (uint32_t i = 1; i <= devices_present; i++) {
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan() && (i > 1)) {
|
if (IsModuleIfan() && (i > 1)) {
|
||||||
MqttPublishDomoticzFanState();
|
MqttPublishDomoticzFanState();
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
MqttPublishDomoticzPowerState(i);
|
MqttPublishDomoticzPowerState(i);
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -214,6 +224,7 @@ bool DomoticzMqttData(void)
|
|||||||
if (idx == Settings.domoticz_relay_idx[i]) {
|
if (idx == Settings.domoticz_relay_idx[i]) {
|
||||||
bool iscolordimmer = strcmp_P(domoticz["dtype"],PSTR("Color Switch")) == 0;
|
bool iscolordimmer = strcmp_P(domoticz["dtype"],PSTR("Color Switch")) == 0;
|
||||||
snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1);
|
snprintf_P(stemp1, sizeof(stemp1), PSTR("%d"), i +1);
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan() && (1 == i)) { // Idx 2 is fanspeed
|
if (IsModuleIfan() && (1 == i)) { // Idx 2 is fanspeed
|
||||||
uint8_t svalue = 0;
|
uint8_t svalue = 0;
|
||||||
if (domoticz.containsKey("svalue1")) {
|
if (domoticz.containsKey("svalue1")) {
|
||||||
@ -231,8 +242,9 @@ bool DomoticzMqttData(void)
|
|||||||
snprintf_P(XdrvMailbox.topic, XdrvMailbox.index, PSTR("/" D_CMND_FANSPEED));
|
snprintf_P(XdrvMailbox.topic, XdrvMailbox.index, PSTR("/" D_CMND_FANSPEED));
|
||||||
snprintf_P(XdrvMailbox.data, XdrvMailbox.data_len, PSTR("%d"), svalue);
|
snprintf_P(XdrvMailbox.data, XdrvMailbox.data_len, PSTR("%d"), svalue);
|
||||||
found = 1;
|
found = 1;
|
||||||
}
|
} else
|
||||||
else if (iscolordimmer && 10 == nvalue) { // Color_SetColor
|
#endif // USE_SONOFF_IFAN
|
||||||
|
if (iscolordimmer && 10 == nvalue) { // Color_SetColor
|
||||||
JsonObject& color = domoticz["Color"];
|
JsonObject& color = domoticz["Color"];
|
||||||
uint16_t level = nvalue = domoticz["svalue1"];
|
uint16_t level = nvalue = domoticz["svalue1"];
|
||||||
uint16_t r = color["r"]; r = r * level / 100;
|
uint16_t r = color["r"]; r = r * level / 100;
|
||||||
@ -472,7 +484,9 @@ void HandleDomoticzConfiguration(void)
|
|||||||
WSContentSend_P(HTTP_FORM_DOMOTICZ_SWITCH,
|
WSContentSend_P(HTTP_FORM_DOMOTICZ_SWITCH,
|
||||||
i +1, i, Settings.domoticz_switch_idx[i]);
|
i +1, i, Settings.domoticz_switch_idx[i]);
|
||||||
}
|
}
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
if (IsModuleIfan() && (1 == i)) { break; }
|
if (IsModuleIfan() && (1 == i)) { break; }
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
}
|
}
|
||||||
for (uint32_t i = 0; i < DZ_MAX_SENSORS; i++) {
|
for (uint32_t i = 0; i < DZ_MAX_SENSORS; i++) {
|
||||||
WSContentSend_P(HTTP_FORM_DOMOTICZ_SENSOR,
|
WSContentSend_P(HTTP_FORM_DOMOTICZ_SENSOR,
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef USE_SONOFF_IFAN
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
Sonoff iFan02 and iFan03
|
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_timer = 0;
|
||||||
uint8_t ifan_fanspeed_goal = 0;
|
uint8_t ifan_fanspeed_goal = 0;
|
||||||
bool ifan_receive_flag = false;
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // USE_SONOFF_IFAN
|
||||||
|
Loading…
x
Reference in New Issue
Block a user