diff --git a/sonoff/_changelog.ino b/sonoff/_changelog.ino index 2f2a7b1c2..c603f826f 100644 --- a/sonoff/_changelog.ino +++ b/sonoff/_changelog.ino @@ -1,4 +1,5 @@ /* 6.1.1b + * Add support for MCP230xx for general purpose input expansion and command Sensor29 (#3188) * Fix command Scale buffer overflow (#3236) * Fix rules once regression from v6.1.0 (#3198, #3226) * Add default Wifi Configuration tool as define WIFI_CONFIG_NO_SSID in user_config.h if no SSID is configured (#3224) diff --git a/sonoff/language/bg-BG.h b/sonoff/language/bg-BG.h index 6d82a843c..6f03fcf55 100644 --- a/sonoff/language/bg-BG.h +++ b/sonoff/language/bg-BG.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Подтвърдете рестартирането" #define D_CONFIGURE_MODULE "Конфигурация на модула" +#define D_CONFIGURE_MCP230XX "Конфигурация на MCP230xx" #define D_CONFIGURE_WIFI "Конфигурация на WiFi" #define D_CONFIGURE_MQTT "Конфигурация на MQTT" #define D_CONFIGURE_DOMOTICZ "Конфигурация на Domoticz" diff --git a/sonoff/language/cs-CZ.h b/sonoff/language/cs-CZ.h index cb93ad553..03bc4b8cd 100644 --- a/sonoff/language/cs-CZ.h +++ b/sonoff/language/cs-CZ.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Potvrzení restartu" #define D_CONFIGURE_MODULE "Nastavení modulu" +#define D_CONFIGURE_MCP230XX "Nastavení MCP230xx" #define D_CONFIGURE_WIFI "Nastavení WiFi" #define D_CONFIGURE_MQTT "Nastavení MQTT" #define D_CONFIGURE_DOMOTICZ "Nastavení Domoticz" diff --git a/sonoff/language/de-DE.h b/sonoff/language/de-DE.h index 4c0fde470..71d9ae65e 100644 --- a/sonoff/language/de-DE.h +++ b/sonoff/language/de-DE.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Wirklich neustarten?" #define D_CONFIGURE_MODULE "Gerät konfigurieren" +#define D_CONFIGURE_MCP230XX "MCP230xx konfigurieren" #define D_CONFIGURE_WIFI "WLAN konfigurieren" #define D_CONFIGURE_MQTT "MQTT konfigurieren" #define D_CONFIGURE_DOMOTICZ "Domoticz konfigurieren" diff --git a/sonoff/language/el-GR.h b/sonoff/language/el-GR.h index 702381ab1..e45efd5ba 100644 --- a/sonoff/language/el-GR.h +++ b/sonoff/language/el-GR.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Επιβεβαίωση Επανεκκίνησης" #define D_CONFIGURE_MODULE "Ρύθμιση Module" +#define D_CONFIGURE_MCP230XX "Ρύθμιση MCP230xx" #define D_CONFIGURE_WIFI "Ρύθμιση WiFi" #define D_CONFIGURE_MQTT "Ρύθμιση MQTT" #define D_CONFIGURE_DOMOTICZ "Ρύθμιση Domoticz" diff --git a/sonoff/language/en-GB.h b/sonoff/language/en-GB.h index 016e62e41..5a85abba3 100644 --- a/sonoff/language/en-GB.h +++ b/sonoff/language/en-GB.h @@ -166,7 +166,6 @@ #define D_VOLTAGE "Voltage" #define D_WARMLIGHT "Warm" #define D_WEB_SERVER "Web Server" -#define D_CONFIGURE_MCP230XX "Configure MCP230xx" // sonoff.ino #define D_WARNING_MINIMAL_VERSION "WARNING This version does not support persistent settings" @@ -228,6 +227,7 @@ #define D_CONFIRM_RESTART "Confirm Restart" #define D_CONFIGURE_MODULE "Configure Module" +#define D_CONFIGURE_MCP230XX "Configure MCP230xx" #define D_CONFIGURE_WIFI "Configure WiFi" #define D_CONFIGURE_MQTT "Configure MQTT" #define D_CONFIGURE_DOMOTICZ "Configure Domoticz" diff --git a/sonoff/language/es-AR.h b/sonoff/language/es-AR.h index 1c4b4924a..82451d205 100644 --- a/sonoff/language/es-AR.h +++ b/sonoff/language/es-AR.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Confirmar Reinicio" #define D_CONFIGURE_MODULE "Configuración del Módulo" +#define D_CONFIGURE_MCP230XX "Configuración MCP230xx" #define D_CONFIGURE_WIFI "Configuración WiFi" #define D_CONFIGURE_MQTT "Configuración MQTT" #define D_CONFIGURE_DOMOTICZ "Configuración Domoticz" diff --git a/sonoff/language/fr-FR.h b/sonoff/language/fr-FR.h index ce1485513..a5aed67c1 100644 --- a/sonoff/language/fr-FR.h +++ b/sonoff/language/fr-FR.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Confirmer redémarrage" #define D_CONFIGURE_MODULE "Configuration du Module" +#define D_CONFIGURE_MCP230XX "Configuration MCP230xx" #define D_CONFIGURE_WIFI "Configuration WiFi" #define D_CONFIGURE_MQTT "Configuration MQTT" #define D_CONFIGURE_DOMOTICZ "Configuration Domoticz" diff --git a/sonoff/language/hu-HU.h b/sonoff/language/hu-HU.h index 14fb2a08b..a4ac7cea2 100644 --- a/sonoff/language/hu-HU.h +++ b/sonoff/language/hu-HU.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Újraindítás megerősítése" #define D_CONFIGURE_MODULE "Eszköz konfiguráció" +#define D_CONFIGURE_MCP230XX "MCP230xx konfiguráció" #define D_CONFIGURE_WIFI "WiFi konfiguráció" #define D_CONFIGURE_MQTT "MQTT konfiguráció" #define D_CONFIGURE_DOMOTICZ "Domoticz konfiguráció" diff --git a/sonoff/language/it-IT.h b/sonoff/language/it-IT.h index 6f1c4db0f..2a60abaf0 100644 --- a/sonoff/language/it-IT.h +++ b/sonoff/language/it-IT.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Conferma Riavvio" #define D_CONFIGURE_MODULE "Configurazione Modulo" +#define D_CONFIGURE_MCP230XX "Configurazione MCP230xx" #define D_CONFIGURE_WIFI "Configurazione WiFi" #define D_CONFIGURE_MQTT "Configurazione MQTT" #define D_CONFIGURE_DOMOTICZ "Configurazione Domoticz" diff --git a/sonoff/language/nl-NL.h b/sonoff/language/nl-NL.h index cf1c2b3b0..936d14861 100644 --- a/sonoff/language/nl-NL.h +++ b/sonoff/language/nl-NL.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Bevestig herstart" #define D_CONFIGURE_MODULE "Configureer Module" +#define D_CONFIGURE_MCP230XX "Configureer MCP230xx" #define D_CONFIGURE_WIFI "Configureer WiFi" #define D_CONFIGURE_MQTT "Configureer MQTT" #define D_CONFIGURE_DOMOTICZ "Configureer Domoticz" diff --git a/sonoff/language/pl-PL.h b/sonoff/language/pl-PL.h index e250e4c4d..ce29dde07 100644 --- a/sonoff/language/pl-PL.h +++ b/sonoff/language/pl-PL.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Potwierdź restart" #define D_CONFIGURE_MODULE "Konfiguruj moduł" +#define D_CONFIGURE_MCP230XX "Konfiguruj MCP230xx" #define D_CONFIGURE_WIFI "Konfiguruj WiFi" #define D_CONFIGURE_MQTT "Konfiguruj MQTT" #define D_CONFIGURE_DOMOTICZ "Konfiguruj Domoticz" diff --git a/sonoff/language/pt-BR.h b/sonoff/language/pt-BR.h index a32a7b5c3..0e6f82342 100644 --- a/sonoff/language/pt-BR.h +++ b/sonoff/language/pt-BR.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Confirmar o reinicio" #define D_CONFIGURE_MODULE "Configurar Módulo" +#define D_CONFIGURE_MCP230XX "Configurar MCP230xx" #define D_CONFIGURE_WIFI "Configurar WiFi" #define D_CONFIGURE_MQTT "Configurar MQTT" #define D_CONFIGURE_DOMOTICZ "Configurar Domoticz" diff --git a/sonoff/language/pt-PT.h b/sonoff/language/pt-PT.h index 393a74a87..e6d56ba1d 100644 --- a/sonoff/language/pt-PT.h +++ b/sonoff/language/pt-PT.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Confirmar o reinicio" #define D_CONFIGURE_MODULE "Configurar Módulo" +#define D_CONFIGURE_MCP230XX "Configurar MCP230xx" #define D_CONFIGURE_WIFI "Configurar WiFi" #define D_CONFIGURE_MQTT "Configurar MQTT" #define D_CONFIGURE_DOMOTICZ "Configurar Domoticz" diff --git a/sonoff/language/ru-RU.h b/sonoff/language/ru-RU.h index 79df5b2d4..e4bc30ea2 100644 --- a/sonoff/language/ru-RU.h +++ b/sonoff/language/ru-RU.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Подтвердить перезагрузку" #define D_CONFIGURE_MODULE "Конфигурация Модуля" +#define D_CONFIGURE_MCP230XX "Конфигурация MCP230xx" #define D_CONFIGURE_WIFI "Конфигурация WiFi" #define D_CONFIGURE_MQTT "Конфигурация MQTT" #define D_CONFIGURE_DOMOTICZ "Конфигурация Domoticz" diff --git a/sonoff/language/uk-UK.h b/sonoff/language/uk-UK.h index d925d13fb..fda5d2e46 100644 --- a/sonoff/language/uk-UK.h +++ b/sonoff/language/uk-UK.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "Підтвердити перезавантаження" #define D_CONFIGURE_MODULE "Конфігурація модуля" +#define D_CONFIGURE_MCP230XX "Конфігурація MCP230xx" #define D_CONFIGURE_WIFI "Конфігурація WiFi" #define D_CONFIGURE_MQTT "Конфігурація MQTT" #define D_CONFIGURE_DOMOTICZ "Конфігурація Domoticz" diff --git a/sonoff/language/zh-CN.h b/sonoff/language/zh-CN.h index 9e5149125..203e5ac08 100644 --- a/sonoff/language/zh-CN.h +++ b/sonoff/language/zh-CN.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "确认重启" #define D_CONFIGURE_MODULE "模块设置" +#define D_CONFIGURE_MCP230XX "MCP230xx设置" #define D_CONFIGURE_WIFI "WiFi设置" #define D_CONFIGURE_MQTT "MQTT设置" #define D_CONFIGURE_DOMOTICZ "Domoticz设置" diff --git a/sonoff/language/zh-TW.h b/sonoff/language/zh-TW.h index 6d4154cdf..22f35f924 100644 --- a/sonoff/language/zh-TW.h +++ b/sonoff/language/zh-TW.h @@ -227,6 +227,7 @@ #define D_CONFIRM_RESTART "確認重啟" #define D_CONFIGURE_MODULE "模塊設置" +#define D_CONFIGURE_MCP230XX "MCP230xx設置" #define D_CONFIGURE_WIFI "WiFi設置" #define D_CONFIGURE_MQTT "MQTT設置" #define D_CONFIGURE_DOMOTICZ "Domoticz設置" diff --git a/sonoff/user_config.h b/sonoff/user_config.h index 12a4924b1..1550383fb 100644 --- a/sonoff/user_config.h +++ b/sonoff/user_config.h @@ -287,12 +287,9 @@ // #define USE_MGS // Add I2C code for Xadow and Grove Mutichannel Gas sensor using library Multichannel_Gas_Sensor (+10k code) #define MGS_SENSOR_ADDR 0x04 // Default Mutichannel Gas sensor i2c address // #define USE_APDS9960 // Add I2C code for APDS9960 Proximity Sensor. Disables SHT and VEML6070 (+4k7 code) - - // If only USE_MCP230xx then device can be configured using sensor29 command -// #define USE_MCP230xx // Add I2C code for MCP23008/MCP23017 for GP INPUT ONLY (+2260 bytes) -// #define USE_MCP230xx_displaymain // Display pin status on Tasmota main page (+188 bytes) -// #define USE_MCP230xx_webconfig // Enable web config button and form to Tasmota web interface (+2444) - +// #define USE_MCP230xx // Add I2C code for MCP23008/MCP23017 for GP INPUT ONLY providing command Sensor29 for configuration (+2k2 code) +// #define USE_MCP230xx_displaymain // Display pin status on Tasmota main page (+0k2 code) +// #define USE_MCP230xx_webconfig // Enable web config button and form to Tasmota web interface (+2k1 code) #endif // USE_I2C // -- SPI sensors --------------------------------- diff --git a/sonoff/xdrv_02_webserver.ino b/sonoff/xdrv_02_webserver.ino index ec6423e6b..3f6a7b628 100644 --- a/sonoff/xdrv_02_webserver.ino +++ b/sonoff/xdrv_02_webserver.ino @@ -190,6 +190,10 @@ const char HTTP_BTN_RSTRT[] PROGMEM = "
"; const char HTTP_BTN_MENU_MODULE[] PROGMEM = "
"; +#if defined(USE_I2C) && defined(USE_MCP230xx) && defined(USE_MCP230xx_webconfig) +const char HTTP_BTN_MCP230XX[] PROGMEM = + "
"; +#endif // USE_I2C and USE_MCP230xx and USE_MCP230xx_webconfig #if defined(USE_TIMERS) && defined(USE_TIMERS_WEB) const char HTTP_BTN_MENU_TIMER[] PROGMEM = "
"; @@ -202,14 +206,6 @@ const char HTTP_BTN_MENU_MQTT[] PROGMEM = "
" #endif // USE_DOMOTICZ ""; -#ifdef USE_I2C -#ifdef USE_MCP230xx -#ifdef USE_MCP230xx_webconfig - const char HTTP_BTN_MCP230XX[] PROGMEM = - "
"; -#endif // USE_MCP230xx_webconfig -#endif // USE_MCP230xx -#endif // USE_I2C const char HTTP_BTN_MENU4[] PROGMEM = #ifdef USE_KNX "
" @@ -384,16 +380,12 @@ void StartWebserver(int type, IPAddress ipweb) WebServer->on("/u2", HTTP_OPTIONS, HandlePreflightRequest); WebServer->on("/cm", HandleHttpCommand); WebServer->on("/rb", HandleRestart); -#ifdef USE_I2C -#ifdef USE_MCP230xx -#ifdef USE_MCP230xx_webconfig - WebServer->on("/mcp230xx", handleMCP230xx); -#endif // USE_MCP230xx_webconfig -#endif // USE_MCP230xx -#endif // USE_I2C #ifndef BE_MINIMAL WebServer->on("/cn", HandleConfiguration); WebServer->on("/md", HandleModuleConfiguration); +#if defined(USE_I2C) && defined(USE_MCP230xx) && defined(USE_MCP230xx_webconfig) + WebServer->on("/mc", HandleMCP230xxConfiguration); +#endif // USE_I2C and USE_MCP230xx and USE_MCP230xx_webconfig #if defined(USE_TIMERS) && defined(USE_TIMERS_WEB) WebServer->on("/tm", HandleTimerConfiguration); #endif // USE_TIMERS and USE_TIMERS_WEB @@ -701,6 +693,11 @@ void HandleConfiguration() page.replace(F("{v}"), FPSTR(S_CONFIGURATION)); page += FPSTR(HTTP_HEAD_STYLE); page += FPSTR(HTTP_BTN_MENU_MODULE); +#if defined(USE_I2C) && defined(USE_MCP230xx) && defined(USE_MCP230xx_webconfig) + if (MCP230xx_Type()) { // Configuration button will only show if MCP23008/MCP23017 was detected on I2C + page += FPSTR(HTTP_BTN_MCP230XX); + } +#endif // USE_I2C and USE_MCP230xx and USE_MCP230xx_webconfig #if defined(USE_TIMERS) && defined(USE_TIMERS_WEB) #ifdef USE_RULES page += FPSTR(HTTP_BTN_MENU_TIMER); @@ -710,15 +707,6 @@ void HandleConfiguration() #endif // USE_TIMERS and USE_TIMERS_WEB page += FPSTR(HTTP_BTN_MENU_WIFI); if (Settings.flag.mqtt_enabled) { page += FPSTR(HTTP_BTN_MENU_MQTT); } -#ifdef USE_I2C -#ifdef USE_MCP230xx -#ifdef USE_MCP230xx_webconfig - if (MCP230xx_Type()) { // Configuration button will only show if MCP23008/MCP23017 was detected on I2C - page += FPSTR(HTTP_BTN_MCP230XX); - } -#endif // USE_MCP230xx_webconfig -#endif // USE_MCP230xx -#endif // USE_I2C page += FPSTR(HTTP_BTN_MENU4); page += FPSTR(HTTP_BTN_MAIN); ShowPage(page); @@ -1148,15 +1136,11 @@ void HandleSaveSettings() } AddLog(LOG_LEVEL_INFO); break; -#ifdef USE_I2C -#ifdef USE_MCP230xx -#ifdef USE_MCP230xx_webconfig - case 8: // MCP230xx_SaveSettings +#if defined(USE_I2C) && defined(USE_MCP230xx) && defined(USE_MCP230xx_webconfig) + case 8: MCP230xx_SaveSettings(); break; -#endif // USE_MCP230xx_webconfig -#endif // USE_MCP230xx -#endif // USE_I2C +#endif // USE_I2C and USE_MCP230xx and USE_MCP230xx_webconfig case 6: WebGetArg("g99", tmp, sizeof(tmp)); byte new_module = (!strlen(tmp)) ? MODULE : atoi(tmp); diff --git a/sonoff/xsns_29_mcp230xx.ino b/sonoff/xsns_29_mcp230xx.ino index 9aa0bc260..aa1a44fad 100644 --- a/sonoff/xsns_29_mcp230xx.ino +++ b/sonoff/xsns_29_mcp230xx.ino @@ -85,7 +85,7 @@ const char HTTP_FORM_I2C_MCP230XX[] PROGMEM = "" ""; -void handleMCP230xx() +void HandleMCP230xxConfiguration() { if (HttpUser()) { return; @@ -348,7 +348,7 @@ void MCP230xx_Show(boolean json) snprintf_P(mqtt_data, sizeof(mqtt_data), PSTR("%s,\"MCP23017\":{\"D0\":%i,\"D1\":%i,\"D2\":%i,\"D3\":%i,\"D4\":%i,\"D5\":%i,\"D6\":%i,\"D7\":%i,\"D8\":%i,\"D9\":%i,\"D10\":%i,\"D11\":%i,\"D12\":%i,\"D13\":%i,\"D14\":%i,\"D15\":%i}"), mqtt_data, (gpio1>>0)&1,(gpio1>>1)&1,(gpio1>>2)&1,(gpio1>>3)&1,(gpio1>>4)&1,(gpio1>>5)&1,(gpio1>>6)&1,(gpio1>>7)&1,(gpio2>>0)&1,(gpio2>>1)&1,(gpio2>>2)&1,(gpio2>>3)&1,(gpio2>>4)&1,(gpio2>>5)&1,(gpio2>>6)&1,(gpio2>>7)&1); } - + #ifdef USE_WEBSERVER #ifdef USE_MCP230xx_displaymain } else { @@ -358,13 +358,13 @@ void MCP230xx_Show(boolean json) gpio2=MCP230xx_readGPIO(1); } uint16_t gpio = (gpio2 << 8) + gpio1; - + for (uint8_t pin = 0; pin < mcp280xx_pincount; pin++) { if (Settings.mcp230xx_config[pin].enable) { snprintf_P(mqtt_data, sizeof(mqtt_data), HTTP_SNS_MCP230xx_GPIO, mqtt_data, pin, (gpio>>pin)&1); } } -#endif // USE_MCP230xx_displaymain +#endif // USE_MCP230xx_displaymain #endif // USE_WEBSERVER } } @@ -450,13 +450,13 @@ boolean Xsns29(byte function) if (XSNS_29 == XdrvMailbox.index) { result = MCP230xx_Command(); } - break; + break; #ifdef USE_WEBSERVER #ifdef USE_MCP230xx_displaymain case FUNC_WEB_APPEND: MCP230xx_Show(0); break; -#endif // USE_MCP230xx_displaymain +#endif // USE_MCP230xx_displaymain #endif // USE_WEBSERVER } }