From 32c3a66ead3d87fc9c1235eca78a33888c66095a Mon Sep 17 00:00:00 2001 From: arendst Date: Wed, 10 May 2017 14:19:36 +0200 Subject: [PATCH] v5.0.6 5.0.6 20170510 * Remove hyphen in case of a single DHT sensor connecetd (#427) * Add command MqttRetry to change default MQTT reconnect retry timer from minimal 10 seconds (#429) --- README.md | 2 +- api/arduino/sonoff.ino.bin | Bin 482288 -> 483056 bytes sonoff/_releasenotes.ino | 6 +- sonoff/settings.h | 4 +- sonoff/settings.ino | 12 +-- sonoff/sonoff.ino | 164 ++++++++++++++++++++----------------- sonoff/support.ino | 4 +- sonoff/webserver.ino | 149 +++++++++++++++++---------------- sonoff/xdrv_snfled.ino | 2 +- sonoff/xdrv_wemohue.ino | 3 +- sonoff/xsns_dht.ino | 9 +- sonoff/xsns_hlw8012.ino | 14 ++-- 12 files changed, 195 insertions(+), 174 deletions(-) diff --git a/README.md b/README.md index ad865c067..00eb424bd 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## Sonoff-Tasmota Provide ESP8266 based Sonoff by [iTead Studio](https://www.itead.cc/) and ElectroDragon IoT Relay with Serial, Web and MQTT control allowing 'Over the Air' or OTA firmware updates using Arduino IDE. -Current version is **5.0.5** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/master/sonoff/_releasenotes.ino) for change information. +Current version is **5.0.6** - See [sonoff/_releasenotes.ino](https://github.com/arendst/Sonoff-Tasmota/blob/master/sonoff/_releasenotes.ino) for change information. ### **** ATTENTION Version 5.0.x specific information **** diff --git a/api/arduino/sonoff.ino.bin b/api/arduino/sonoff.ino.bin index 610f18bd4b379d3a76fd9d9777dd9d96759fc49c..a8f879992a8799c442d71802aa7845c78953fe67 100644 GIT binary patch delta 81924 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 delta 81002 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 diff --git a/sonoff/_releasenotes.ino b/sonoff/_releasenotes.ino index 540f3fb09..c63487736 100644 --- a/sonoff/_releasenotes.ino +++ b/sonoff/_releasenotes.ino @@ -1,4 +1,8 @@ -/* 5.0.5 20170508 +/* 5.0.6 20170510 + * Remove hyphen in case of a single DHT sensor connecetd (#427) + * Add command MqttRetry to change default MQTT reconnect retry timer from minimal 10 seconds (#429) + * + * 5.0.5 20170508 * Add command FullTopic with tokens %topic% (replaced by command Topic value) and * %prefix% (replaced by command Prefix values) for more flexible topic definitions (#244) * See wiki > MQTT Features https://github.com/arendst/Sonoff-Tasmota/wiki/MQTT-Features for more information diff --git a/sonoff/settings.h b/sonoff/settings.h index 1f7e21c08..21d98205f 100644 --- a/sonoff/settings.h +++ b/sonoff/settings.h @@ -105,7 +105,7 @@ struct SYSCFG { uint16_t hlw_mkwhs; // MaxEnergyStart // 3.0.6 - uint16_t ex_pulsetime; // Not used since 4.0.4 + uint16_t mqtt_retry; // was ex_pulsetime until 4.0.4 // 3.1.1 uint8_t poweronstate; @@ -176,7 +176,7 @@ struct SYSCFG { unsigned long hlw_kWhtotal; // 5.0.4a - char mqtt_fulltopic[101]; + char mqtt_fulltopic[101]; } sysCfg; diff --git a/sonoff/settings.ino b/sonoff/settings.ino index 877ff6e85..299df8744 100644 --- a/sonoff/settings.ino +++ b/sonoff/settings.ino @@ -453,9 +453,11 @@ void CFG_DefaultSet2() // sysCfg.hlw_kWhtotal = 0; rtcMem.hlw_kWhtotal = 0; - // 5.0.4a + // 5.0.5 strlcpy(sysCfg.mqtt_fulltopic, MQTT_FULLTOPIC, sizeof(sysCfg.mqtt_fulltopic)); + // 5.0.6 + sysCfg.mqtt_retry = MQTT_RETRY_SECS; } /********************************************************************************************/ @@ -516,7 +518,7 @@ void CFG_DefaultSet_4_0_4() } } } - sysCfg.pulsetime[0] = sysCfg.ex_pulsetime; + sysCfg.pulsetime[0] = APP_PULSETIME; for (byte i = 1; i < MAX_PULSETIMERS; i++) { sysCfg.pulsetime[i] = 0; } @@ -554,9 +556,6 @@ void CFG_DefaultSet_5_0_2() void CFG_Delta() { if (sysCfg.version != VERSION) { // Fix version dependent changes - if (sysCfg.version < 0x03000600) { // 3.0.6 - Add parameter - sysCfg.ex_pulsetime = APP_PULSETIME; - } if (sysCfg.version < 0x03010200) { // 3.1.2 - Add parameter sysCfg.poweronstate = APP_POWERON_STATE; } @@ -637,6 +636,9 @@ void CFG_Delta() if (sysCfg.version < 0x05000500) { strlcpy(sysCfg.mqtt_fulltopic, MQTT_FULLTOPIC, sizeof(sysCfg.mqtt_fulltopic)); } + if (sysCfg.version < 0x05000600) { + sysCfg.mqtt_retry = MQTT_RETRY_SECS; + } sysCfg.version = VERSION; } } diff --git a/sonoff/sonoff.ino b/sonoff/sonoff.ino index 8704b1965..f982c1b89 100644 --- a/sonoff/sonoff.ino +++ b/sonoff/sonoff.ino @@ -10,7 +10,7 @@ * ==================================================== */ -#define VERSION 0x05000500 // 5.0.5 +#define VERSION 0x05000600 // 5.0.6 enum log_t {LOG_LEVEL_NONE, LOG_LEVEL_ERROR, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_DEBUG_MORE, LOG_LEVEL_ALL}; enum week_t {Last, First, Second, Third, Fourth}; @@ -89,6 +89,9 @@ enum emul_t {EMUL_NONE, EMUL_WEMO, EMUL_HUE, EMUL_MAX}; #define WS2812_LEDS 30 // [Pixels] Number of LEDs #endif +#define MQTT_TOKEN_PREFIX "%prefix%" // To be substituted by mqtt_prefix[x] +#define MQTT_TOKEN_TOPIC "%topic%" // To be substituted by mqtt_topic, mqtt_grptopic, mqtt_buttontopic, mqtt_switchtopic + #define WIFI_HOSTNAME "%s-%04d" // Expands to - #define CONFIG_FILE_SIGN 0xA5 // Configuration file signature #define CONFIG_FILE_XOR 0x5A // Configuration file xor (0 = No Xor) @@ -97,7 +100,7 @@ enum emul_t {EMUL_NONE, EMUL_WEMO, EMUL_HUE, EMUL_MAX}; #define HLW_UREF_PULSE 1950 // was 1666us = 600Hz = 220V #define HLW_IREF_PULSE 3500 // was 1666us = 600Hz = 4.545A -#define MQTT_RETRY_SECS 10 // Seconds to retry MQTT connection +#define MQTT_RETRY_SECS 10 // Minimum seconds to retry MQTT connection #define APP_POWER 0 // Default saved power state Off #define MAX_DEVICE 1 // Max number of devices #define MAX_PULSETIMERS 4 // Max number of supported pulse timers @@ -139,7 +142,7 @@ enum butt_t {PRESSED, NOT_PRESSED}; #define MESSZ 360 // Max number of characters in JSON message string (4 x DS18x20 sensors) #if (MQTT_MAX_PACKET_SIZE -TOPSZ -7) < MESSZ // If the max message size is too small, throw an error at compile time // See pubsubclient.c line 359 - #error "MQTT_MAX_PACKET_SIZE is too small in libraries/PubSubClient/src/PubSubClient.h, increase it to at least 427" + #error "MQTT_MAX_PACKET_SIZE is too small in libraries/PubSubClient/src/PubSubClient.h, increase it to at least 467" #endif #include // RTC, HLW8012, OSWatch @@ -158,12 +161,10 @@ enum butt_t {PRESSED, NOT_PRESSED}; #include // I2C support library #endif // USE_I2C #ifdef USI_SPI - #include // SPI, TFT + #include // SPI support, TFT #endif // USE_SPI #include "settings.h" -typedef void (*rtcCallback)(); - #define MAX_BUTTON_COMMANDS 5 // Max number of button commands supported const char commands[MAX_BUTTON_COMMANDS][14] PROGMEM = { {"wificonfig 1"}, // Press button three times @@ -173,7 +174,6 @@ const char commands[MAX_BUTTON_COMMANDS][14] PROGMEM = { {"upgrade 1"}}; // Press button seven times const char wificfg[5][12] PROGMEM = { "Restart", "Smartconfig", "Wifimanager", "WPSconfig", "Retry" }; - const char PREFIXES[3][5] PROGMEM = { "cmnd", "stat", "tele" }; struct TIME_T { @@ -305,6 +305,45 @@ void getClient(char* output, const char* input, byte size) } } +void getTopic_P(char *stopic, byte prefix, char *topic, const char* subtopic) +{ + char romram[CMDSZ]; + + snprintf_P(romram, sizeof(romram), subtopic); + String fulltopic = sysCfg.mqtt_fulltopic; + if ((0 == prefix) && (-1 == fulltopic.indexOf(F(MQTT_TOKEN_PREFIX)))) { + fulltopic += F("/" MQTT_TOKEN_PREFIX); // Need prefix for commands to handle mqtt topic loops + } + for (byte i = 0; i < 3; i++) { + if ('\0' == sysCfg.mqtt_prefix[i][0]) { + snprintf_P(sysCfg.mqtt_prefix[i], sizeof(sysCfg.mqtt_prefix[i]), PREFIXES[i]); + } + } + fulltopic.replace(F(MQTT_TOKEN_PREFIX), sysCfg.mqtt_prefix[prefix]); + fulltopic.replace(F(MQTT_TOKEN_TOPIC), topic); + fulltopic.replace(F("#"), ""); + fulltopic.replace(F("//"), "/"); + if (!fulltopic.endsWith("/")) { + fulltopic += "/"; + } + snprintf_P(stopic, TOPSZ, PSTR("%s%s"), fulltopic.c_str(), romram); +/* + char log[LOGSZ]; + snprintf_P(log, sizeof(log), PSTR("MTPC: %s"), stopic); + addLog(LOG_LEVEL_DEBUG, log); +*/ +} + +char* getStateText(byte state) +{ + if (state > 2) { + state = 1; + } + return sysCfg.state_text[state]; +} + +/********************************************************************************************/ + void setLatchingRelay(uint8_t power, uint8_t state) { power &= 1; @@ -366,46 +405,6 @@ void setLed(uint8_t state) /********************************************************************************************/ -void getTopic_P(char *stopic, byte idx, char *topic, const char* subtopic) -{ - char romram[CMDSZ]; - - snprintf_P(romram, sizeof(romram), subtopic); - String fulltopic = sysCfg.mqtt_fulltopic; - if ((0 == idx) && (-1 == fulltopic.indexOf(F("%prefix%")))) { - fulltopic += F("/%prefix%"); // Need prefix for commands to handle mqtt topic loops - } - for (byte i = 0; i < 3; i++) { - if ('\0' == sysCfg.mqtt_prefix[i][0]) { - snprintf_P(sysCfg.mqtt_prefix[i], sizeof(sysCfg.mqtt_prefix[i]), PREFIXES[i]); - } - } - fulltopic.replace(F("%prefix%"), sysCfg.mqtt_prefix[idx]); - fulltopic.replace(F("%topic%"), topic); - fulltopic.replace(F("#"), ""); - fulltopic.replace(F("//"), "/"); - if (!fulltopic.endsWith("/")) { - fulltopic += "/"; - } - snprintf_P(stopic, TOPSZ, PSTR("%s%s"), fulltopic.c_str(), romram); -/* - char log[LOGSZ]; - snprintf_P(log, sizeof(log), PSTR("MTPC: %s"), stopic); - addLog(LOG_LEVEL_DEBUG, log); -*/ -} - - -char* getStateText(byte state) -{ - if (state > 2) { - state = 1; - } - return sysCfg.state_text[state]; -} - -/********************************************************************************************/ - void mqtt_publish_sec(const char* topic, const char* data, boolean retained) { char log[TOPSZ + MESSZ]; @@ -447,12 +446,19 @@ void mqtt_publish(const char* topic, const char* data) void mqtt_publish_topic_P(uint8_t prefix, const char* subtopic, const char* data, boolean retained) { +/* prefix 0 = cmnd using subtopic + * prefix 1 = stat using subtopic + * prefix 2 = tele using subtopic + * prefix 4 = cmnd using subtopic or RESULT + * prefix 5 = stat using subtopic or RESULT + * prefix 6 = tele using subtopic or RESULT + */ char romram[16]; char stopic[TOPSZ]; snprintf_P(romram, sizeof(romram), ((prefix > 3) && !sysCfg.flag.mqtt_response) ? PSTR("RESULT") : subtopic); - prefix &= 1; - getTopic_P(stopic, prefix +1, sysCfg.mqtt_topic, romram); + prefix &= 3; + getTopic_P(stopic, prefix, sysCfg.mqtt_topic, romram); mqtt_publish(stopic, data, retained); } @@ -494,7 +500,7 @@ void mqtt_publishPowerBlinkState(byte device) snprintf_P(sdevice, sizeof(sdevice), PSTR("%d"), device); snprintf_P(svalue, sizeof(svalue), PSTR("{\"POWER%s\":\"BLINK %s\"}"), (Maxdevice > 1) ? sdevice : "", getStateText(bitRead(blink_mask, device -1))); - mqtt_publish_topic_P(4, PSTR("POWER"), svalue); + mqtt_publish_topic_P(5, PSTR("POWER"), svalue); } void mqtt_connected() @@ -505,21 +511,20 @@ void mqtt_connected() if (sysCfg.flag.mqtt_enabled) { // Satisfy iobroker (#299) - getTopic_P(stopic, 0, sysCfg.mqtt_topic, PSTR("POWER")); - svalue[0] ='\0'; - mqtt_publish(stopic, svalue); + svalue[0] = '\0'; + mqtt_publish_topic_P(0, PSTR("POWER"), svalue); getTopic_P(stopic, 0, sysCfg.mqtt_topic, PSTR("#")); mqttClient.subscribe(stopic); mqttClient.loop(); // Solve LmacRxBlk:1 messages - - getTopic_P(stopic, 0, sysCfg.mqtt_grptopic, PSTR("#")); - mqttClient.subscribe(stopic); - mqttClient.loop(); // Solve LmacRxBlk:1 messages - - getTopic_P(stopic, 0, MQTTClient, PSTR("#")); - mqttClient.subscribe(stopic); - mqttClient.loop(); // Solve LmacRxBlk:1 messages + if (strstr(sysCfg.mqtt_fulltopic, MQTT_TOKEN_TOPIC) != NULL) { + getTopic_P(stopic, 0, sysCfg.mqtt_grptopic, PSTR("#")); + mqttClient.subscribe(stopic); + mqttClient.loop(); // Solve LmacRxBlk:1 messages + getTopic_P(stopic, 0, MQTTClient, PSTR("#")); + mqttClient.subscribe(stopic); + mqttClient.loop(); // Solve LmacRxBlk:1 messages + } #ifdef USE_DOMOTICZ domoticz_mqttSubscribe(); #endif // USE_DOMOTICZ @@ -528,17 +533,17 @@ void mqtt_connected() if (mqttflag) { snprintf_P(svalue, sizeof(svalue), PSTR("{\"Module\":\"%s\", \"Version\":\"%s\", \"FallbackTopic\":\"%s\", \"GroupTopic\":\"%s\"}"), my_module.name, Version, MQTTClient, sysCfg.mqtt_grptopic); - mqtt_publish_topic_P(1, PSTR("INFO1"), svalue); + mqtt_publish_topic_P(2, PSTR("INFO1"), svalue); #ifdef USE_WEBSERVER if (sysCfg.webserver) { snprintf_P(svalue, sizeof(svalue), PSTR("{\"WebserverMode\":\"%s\", \"Hostname\":\"%s\", \"IPaddress\":\"%s\"}"), (2 == sysCfg.webserver) ? "Admin" : "User", Hostname, WiFi.localIP().toString().c_str()); - mqtt_publish_topic_P(1, PSTR("INFO2"), svalue); + mqtt_publish_topic_P(2, PSTR("INFO2"), svalue); } #endif // USE_WEBSERVER snprintf_P(svalue, sizeof(svalue), PSTR("{\"Started\":\"%s\"}"), (getResetReason() == "Exception") ? ESP.getResetInfo().c_str() : getResetReason().c_str()); - mqtt_publish_topic_P(1, PSTR("INFO3"), svalue); + mqtt_publish_topic_P(2, PSTR("INFO3"), svalue); if (sysCfg.tele_period) { tele_period = sysCfg.tele_period -9; } @@ -556,7 +561,7 @@ void mqtt_reconnect() char svalue[TOPSZ]; char log[LOGSZ]; - mqttcounter = MQTT_RETRY_SECS; + mqttcounter = sysCfg.mqtt_retry; if (!sysCfg.flag.mqtt_enabled) { mqtt_connected(); @@ -635,6 +640,13 @@ boolean mqtt_command(boolean grpflg, char *type, uint16_t index, char *dataBuf, } snprintf_P(svalue, ssvalue, PSTR("{\"MqttPort\":%d}"), sysCfg.mqtt_port); } + else if (!strcmp_P(type,PSTR("MQTTRETRY"))) { + if ((data_len > 0) && (payload >= MQTT_RETRY_SECS) && (payload < 32001)) { + sysCfg.mqtt_retry = payload; + mqttcounter = sysCfg.mqtt_retry; + } + snprintf_P(svalue, ssvalue, PSTR("{\"MqttRetry\":%d}"), sysCfg.mqtt_retry); + } else if (!strcmp_P(type,PSTR("MQTTRESPONSE"))) { if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { sysCfg.flag.mqtt_response = payload; @@ -816,7 +828,7 @@ boolean mqtt_command(boolean grpflg, char *type, uint16_t index, char *dataBuf, if ((data_len > 0) && (payload >= 0) && (payload <= 1)) { if (!payload) { svalue[0] = '\0'; - mqtt_publish_topic_P(1, PSTR("SENSOR"), svalue, sysCfg.flag.mqtt_sensor_retain); + mqtt_publish_topic_P(2, PSTR("SENSOR"), svalue, sysCfg.flag.mqtt_sensor_retain); } sysCfg.flag.mqtt_sensor_retain = payload; } @@ -1084,7 +1096,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) snprintf_P(svalue, sizeof(svalue), PSTR("%s%d (%s)"), svalue, i +1, stemp1); } snprintf_P(svalue, sizeof(svalue), PSTR("%s\"}"), svalue); - mqtt_publish_topic_P(4, type, svalue); + mqtt_publish_topic_P(5, type, svalue); snprintf_P(svalue, sizeof(svalue), PSTR("{\"Modules2\":\""), svalue); jsflg = 0; for (byte i = MAXMODULE /2; i < MAXMODULE; i++) { @@ -1139,7 +1151,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) snprintf_P(svalue, sizeof(svalue), PSTR("%s%d (%s)"), svalue, i, stemp1); } snprintf_P(svalue, sizeof(svalue), PSTR("%s\"}"), svalue); - mqtt_publish_topic_P(4, type, svalue); + mqtt_publish_topic_P(5, type, svalue); snprintf_P(svalue, sizeof(svalue), PSTR("{\"GPIOs2\":\""), svalue); jsflg = 0; for (byte i = GPIO_SENSOR_END /2; i < GPIO_SENSOR_END; i++) { @@ -1481,7 +1493,7 @@ void mqttDataCb(char* topic, byte* data, unsigned int data_len) snprintf_P(svalue, sizeof(svalue), PSTR("{\"Command\":\"Unknown\"}")); type = (char*)topicBuf; } - mqtt_publish_topic_P(4, type, svalue); + mqtt_publish_topic_P(5, type, svalue); } /********************************************************************************************/ @@ -1616,10 +1628,12 @@ void do_cmnd(char *cmnd) void publish_status(uint8_t payload) { char svalue[MESSZ]; - uint8_t option = 0; + uint8_t option = 1; // Workaround MQTT - TCP/IP stack queueing when SUB_PREFIX = PUB_PREFIX - option = (!strcmp(sysCfg.mqtt_prefix[0],sysCfg.mqtt_prefix[1]) && (!payload)); + if (!strcmp(sysCfg.mqtt_prefix[0],sysCfg.mqtt_prefix[1]) && (!payload)) { + option++; + } if ((!sysCfg.flag.mqtt_enabled) && (6 == payload)) { payload = 99; @@ -1870,13 +1884,13 @@ void every_second() svalue[0] = '\0'; state_mqttPresent(svalue, sizeof(svalue)); - mqtt_publish_topic_P(1, PSTR("STATE"), svalue); + mqtt_publish_topic_P(2, PSTR("STATE"), svalue); uint8_t djson = 0; svalue[0] = '\0'; sensors_mqttPresent(svalue, sizeof(svalue), &djson); if (djson) { - mqtt_publish_topic_P(1, PSTR("SENSOR"), svalue, sysCfg.flag.mqtt_sensor_retain); + mqtt_publish_topic_P(2, PSTR("SENSOR"), svalue, sysCfg.flag.mqtt_sensor_retain); } if (hlw_flg) { @@ -1893,7 +1907,7 @@ void every_second() uptime_flg = false; uptime++; snprintf_P(svalue, sizeof(svalue), PSTR("{\"Time\":\"%s\", \"Uptime\":%d}"), getDateTime().c_str(), uptime); - mqtt_publish_topic_P(1, PSTR("UPTIME"), svalue); + mqtt_publish_topic_P(2, PSTR("UPTIME"), svalue); } if ((3 == rtcTime.Minute) && !uptime_flg) { uptime_flg = true; @@ -2134,7 +2148,7 @@ void stateloop() snprintf_P(svalue, sizeof(svalue), PSTR("Failed %s"), ESPhttpUpdate.getLastErrorString().c_str()); } restartflag = 2; // Restart anyway to keep memory clean webserver - mqtt_publish_topic_P(0, PSTR("UPGRADE"), svalue); + mqtt_publish_topic_P(1, PSTR("UPGRADE"), svalue); } } break; diff --git a/sonoff/support.ino b/sonoff/support.ino index ef192664e..974259be2 100644 --- a/sonoff/support.ino +++ b/sonoff/support.ino @@ -309,8 +309,8 @@ void WIFI_begin(uint8_t flag) #ifdef USE_EMULATION UDP_Disconnect(); #endif // USE_EMULATION - if (!strncmp(ESP.getSdkVersion(),"1.5.3",5)) { - addLog_P(LOG_LEVEL_DEBUG, "Wifi: Patch issue 2186"); + if (!strncmp_P(ESP.getSdkVersion(),PSTR("1.5.3"),5)) { + addLog_P(LOG_LEVEL_DEBUG, PSTR("Wifi: Patch issue 2186")); WiFi.mode(WIFI_OFF); // See https://github.com/esp8266/Arduino/issues/2186 } WiFi.disconnect(); diff --git a/sonoff/webserver.ino b/sonoff/webserver.ino index 4a213d62a..f26301eff 100644 --- a/sonoff/webserver.ino +++ b/sonoff/webserver.ino @@ -395,11 +395,11 @@ void showPage(String &page) if((HTTP_ADMIN == _httpflag) && (sysCfg.web_password[0] != 0) && !webServer->authenticate(WEB_USERNAME, sysCfg.web_password)) { return webServer->requestAuthentication(); } - page.replace("{ha}", my_module.name); - page.replace("{h}", sysCfg.friendlyname[0]); + page.replace(F("{ha}"), my_module.name); + page.replace(F("{h}"), sysCfg.friendlyname[0]); if (HTTP_MANAGER == _httpflag) { if (WIFI_configCounter()) { - page.replace("", ""); + page.replace(F(""), F("")); page += FPSTR(HTTP_COUNTER); } } @@ -424,8 +424,8 @@ void handleRoot() } else { char stemp[10], line[100]; String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Main menu"); - page.replace("", ""); + page.replace(F("{v}"), F("Main menu")); + page.replace(F(""), F("")); page += F("
"); if (Maxdevice) { @@ -552,7 +552,7 @@ void handleConfig() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Handle config")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Configuration"); + page.replace(F("{v}"), F("Configuration")); page += FPSTR(HTTP_BTN_MENU2); if (sysCfg.flag.mqtt_enabled) { page += FPSTR(HTTP_BTN_MENU3); @@ -614,11 +614,11 @@ void handleModule() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Handle Module config")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Config module"); + page.replace(F("{v}"), F("Config module")); page += FPSTR(HTTP_FORM_MODULE); snprintf_P(stemp, sizeof(stemp), modules[MODULE].name); - page.replace("{mt}", stemp); + page.replace(F("{mt}"), stemp); for (byte i = 0; i < MAXMODULE; i++) { snprintf_P(stemp, sizeof(stemp), modules[i].name); @@ -650,8 +650,8 @@ void handleModule() } } func += F("}"); - page.replace("", func); - page.replace("", ""); + page.replace(F(""), func); + page.replace(F(""), F("")); page += FPSTR(HTTP_FORM_END); page += FPSTR(HTTP_BTN_CONF); @@ -678,8 +678,8 @@ void handleWifi(boolean scan) addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Handle Wifi config")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Configure Wifi"); - page.replace("", FPSTR(HTTP_LNK_STYLE)); + page.replace(F("{v}"), F("Configure Wifi")); + page.replace(F(""), FPSTR(HTTP_LNK_STYLE)); if (scan) { #ifdef USE_EMULATION @@ -738,12 +738,12 @@ void handleWifi(boolean scan) String item = FPSTR(HTTP_LNK_ITEM); String rssiQ; rssiQ += quality; - item.replace("{v}", WiFi.SSID(indices[i])); - item.replace("{r}", rssiQ); + item.replace(F("{v}"), WiFi.SSID(indices[i])); + item.replace(F("{r}"), rssiQ); if (WiFi.encryptionType(indices[i]) != ENC_TYPE_NONE) { - item.replace("{i}", "l"); + item.replace(F("{i}"), F("l")); } else { - item.replace("{i}", ""); + item.replace(F("{i}"), ""); } page += item; delay(0); @@ -759,11 +759,11 @@ void handleWifi(boolean scan) } page += FPSTR(HTTP_FORM_WIFI); - page.replace("{h1}", sysCfg.hostname); - page.replace("{s1}", sysCfg.sta_ssid[0]); - page.replace("{p1}", sysCfg.sta_pwd[0]); - page.replace("{s2}", sysCfg.sta_ssid[1]); - page.replace("{p2}", sysCfg.sta_pwd[1]); + page.replace(F("{h1}"), sysCfg.hostname); + page.replace(F("{s1}"), sysCfg.sta_ssid[0]); + page.replace(F("{p1}"), sysCfg.sta_pwd[0]); + page.replace(F("{s2}"), sysCfg.sta_ssid[1]); + page.replace(F("{p2}"), sysCfg.sta_pwd[1]); page += FPSTR(HTTP_FORM_END); if (HTTP_MANAGER == _httpflag) { page += FPSTR(HTTP_BTN_RSTRT); @@ -781,17 +781,17 @@ void handleMqtt() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Handle MQTT config")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Configure MQTT"); + page.replace(F("{v}"), F("Configure MQTT")); page += FPSTR(HTTP_FORM_MQTT); char str[sizeof(sysCfg.mqtt_client)]; getClient(str, MQTT_CLIENT_ID, sizeof(sysCfg.mqtt_client)); - page.replace("{m0}", str); - page.replace("{m1}", sysCfg.mqtt_host); - page.replace("{m2}", String(sysCfg.mqtt_port)); - page.replace("{m3}", sysCfg.mqtt_client); - page.replace("{m4}", (sysCfg.mqtt_user[0] == '\0')?"0":sysCfg.mqtt_user); - page.replace("{m5}", (sysCfg.mqtt_pwd[0] == '\0')?"0":sysCfg.mqtt_pwd); - page.replace("{m6}", sysCfg.mqtt_topic); + page.replace(F("{m0}"), str); + page.replace(F("{m1}"), sysCfg.mqtt_host); + page.replace(F("{m2}"), String(sysCfg.mqtt_port)); + page.replace(F("{m3}"), sysCfg.mqtt_client); + page.replace(F("{m4}"), (sysCfg.mqtt_user[0] == '\0')?"0":sysCfg.mqtt_user); + page.replace(F("{m5}"), (sysCfg.mqtt_pwd[0] == '\0')?"0":sysCfg.mqtt_pwd); + page.replace(F("{m6}"), sysCfg.mqtt_topic); page += FPSTR(HTTP_FORM_END); page += FPSTR(HTTP_BTN_CONF); showPage(page); @@ -805,41 +805,41 @@ void handleLog() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Handle Log config")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Config logging"); + page.replace(F("{v}"), F("Config logging")); page += FPSTR(HTTP_FORM_LOG1); for (byte idx = 0; idx < 3; idx++) { page += FPSTR(HTTP_FORM_LOG2); switch (idx) { case 0: - page.replace("{b0}", F("Serial ")); - page.replace("{b1}", STR(SERIAL_LOG_LEVEL)); - page.replace("{b2}", "ls"); + page.replace(F("{b0}"), F("Serial ")); + page.replace(F("{b1}"), STR(SERIAL_LOG_LEVEL)); + page.replace(F("{b2}"), F("ls")); for (byte i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) { - page.replace("{a" + String(i), (i == sysCfg.seriallog_level) ? " selected " : " "); + page.replace("{a" + String(i), (i == sysCfg.seriallog_level) ? F(" selected ") : F(" ")); } break; case 1: - page.replace("{b0}", F("Web ")); - page.replace("{b1}", STR(WEB_LOG_LEVEL)); - page.replace("{b2}", "lw"); + page.replace(F("{b0}"), F("Web ")); + page.replace(F("{b1}"), STR(WEB_LOG_LEVEL)); + page.replace(F("{b2}"), F("lw")); for (byte i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) { - page.replace("{a" + String(i), (i == sysCfg.weblog_level) ? " selected " : " "); + page.replace("{a" + String(i), (i == sysCfg.weblog_level) ? F(" selected ") : F(" ")); } break; case 2: - page.replace("{b0}", F("Sys")); - page.replace("{b1}", STR(SYS_LOG_LEVEL)); - page.replace("{b2}", "ll"); + page.replace(F("{b0}"), F("Sys")); + page.replace(F("{b1}"), STR(SYS_LOG_LEVEL)); + page.replace(F("{b2}"), F("ll")); for (byte i = LOG_LEVEL_NONE; i < LOG_LEVEL_ALL; i++) { - page.replace("{a" + String(i), (i == sysCfg.syslog_level) ? " selected " : " "); + page.replace("{a" + String(i), (i == sysCfg.syslog_level) ? F(" selected ") : F(" ")); } break; } } page += FPSTR(HTTP_FORM_LOG3); - page.replace("{l2}", sysCfg.syslog_host); - page.replace("{l3}", String(sysCfg.syslog_port)); - page.replace("{l4}", String(sysCfg.tele_period)); + page.replace(F("{l2}"), sysCfg.syslog_host); + page.replace(F("{l3}"), String(sysCfg.syslog_port)); + page.replace(F("{l4}"), String(sysCfg.tele_period)); page += FPSTR(HTTP_FORM_END); page += FPSTR(HTTP_BTN_CONF); showPage(page); @@ -854,25 +854,25 @@ void handleOther() char stemp[40]; String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Configure Other"); + page.replace(F("{v}"), F("Configure Other")); page += FPSTR(HTTP_FORM_OTHER); - page.replace("{p1}", sysCfg.web_password); - page.replace("{r1}", (sysCfg.flag.mqtt_enabled) ? " checked" : ""); + page.replace(F("{p1}"), sysCfg.web_password); + page.replace(F("{r1}"), (sysCfg.flag.mqtt_enabled) ? F(" checked") : F("")); page += FPSTR(HTTP_FORM_OTHER2); - page.replace("{1", "1"); - page.replace("{2", FRIENDLY_NAME); - page.replace("{3", sysCfg.friendlyname[0]); + page.replace(F("{1"), F("1")); + page.replace(F("{2"), FRIENDLY_NAME); + page.replace(F("{3"), sysCfg.friendlyname[0]); #ifdef USE_EMULATION page += FPSTR(HTTP_FORM_OTHER3); - page.replace("{r2}", (EMUL_NONE == sysCfg.flag.emulation) ? " checked" : ""); - page.replace("{r3}", (EMUL_WEMO == sysCfg.flag.emulation) ? " checked" : ""); - page.replace("{r4}", (EMUL_HUE == sysCfg.flag.emulation) ? " checked" : ""); + page.replace(F("{r2}"), (EMUL_NONE == sysCfg.flag.emulation) ? F(" checked") : F("")); + page.replace(F("{r3}"), (EMUL_WEMO == sysCfg.flag.emulation) ? F(" checked") : F("")); + page.replace(F("{r4}"), (EMUL_HUE == sysCfg.flag.emulation) ? F(" checked") : F("")); for (int i = 1; i < Maxdevice; i++) { page += FPSTR(HTTP_FORM_OTHER2); - page.replace("{1", String(i +1)); + page.replace(F("{1"), String(i +1)); snprintf_P(stemp, sizeof(stemp), PSTR(FRIENDLY_NAME"%d"), i +1); - page.replace("{2", stemp); - page.replace("{3", sysCfg.friendlyname[i]); + page.replace(F("{2"), stemp); + page.replace(F("{3"), sysCfg.friendlyname[i]); } page += F("
"); #endif // USE_EMULATION @@ -1011,7 +1011,7 @@ void handleSave() restart = (!strlen(webServer->arg("r").c_str())) ? 1 : atoi(webServer->arg("r").c_str()); if (restart) { String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Save parameters"); + page.replace(F("{v}"), F("Save parameters")); page += F("
Parameters saved
"); page += result; page += F("
"); @@ -1040,7 +1040,7 @@ void handleReset() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Reset parameters")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Default parameters"); + page.replace(F("{v}"), F("Default parameters")); page += F("
Parameters reset to default
"); page += FPSTR(HTTP_MSG_RSTRT); page += FPSTR(HTTP_BTN_MAIN); @@ -1058,7 +1058,7 @@ void handleRestore() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Handle restore")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Restore Configuration"); + page.replace(F("{v}"), F("Restore Configuration")); page += FPSTR(HTTP_FORM_RST); page += FPSTR(HTTP_BTN_CONF); showPage(page); @@ -1075,9 +1075,9 @@ void handleUpgrade() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Handle upgrade")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Firmware upgrade"); + page.replace(F("{v}"), F("Firmware upgrade")); page += FPSTR(HTTP_FORM_UPG); - page.replace("{o1}", sysCfg.otaUrl); + page.replace(F("{o1}"), sysCfg.otaUrl); page += FPSTR(HTTP_BTN_MAIN); showPage(page); @@ -1101,7 +1101,7 @@ void handleUpgradeStart() } String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Info"); + page.replace(F("{v}"), F("Info")); page += F("
Upgrade started ...
"); page += FPSTR(HTTP_MSG_RSTRT); page += FPSTR(HTTP_BTN_MAIN); @@ -1126,7 +1126,7 @@ void handleUploadDone() mqttcounter = 0; String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Info"); + page.replace(F("{v}"), F("Info")); page += F("
Upload "); if (_uploaderror) { page += F("failed

"); @@ -1356,9 +1356,9 @@ void handleConsole() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Handle console")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Console"); - page.replace("", FPSTR(HTTP_SCRIPT_CONSOL)); - page.replace("", ""); + page.replace(F("{v}"), F("Console")); + page.replace(F(""), FPSTR(HTTP_SCRIPT_CONSOL)); + page.replace(F(""), F("")); page += FPSTR(HTTP_FORM_CMND); page += FPSTR(HTTP_BTN_MAIN); showPage(page); @@ -1435,7 +1435,7 @@ void handleInfo() int freeMem = ESP.getFreeHeap(); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Information"); + page.replace(F("{v}"), F("Information")); // page += F("
 Information "); page += F(""); page += F(""); @@ -1534,7 +1534,7 @@ void handleRestart() addLog_P(LOG_LEVEL_DEBUG, PSTR("HTTP: Restarting")); String page = FPSTR(HTTP_HEAD); - page.replace("{v}", "Info"); + page.replace(F("{v}"), F("Info")); page += FPSTR(HTTP_MSG_RSTRT); if (HTTP_MANAGER == _httpflag) { _httpflag = HTTP_ADMIN; @@ -1561,14 +1561,13 @@ void handleNotFound() } else #endif // USE_EMULATION { - String message = "File Not Found\n\n"; - message += "URI: "; + String message = F("File Not Found\n\nURI: "); message += webServer->uri(); - message += "\nMethod: "; - message += ( webServer->method() == HTTP_GET ) ? "GET" : "POST"; - message += "\nArguments: "; + message += F("\nMethod: "); + message += ( webServer->method() == HTTP_GET ) ? F("GET") : F("POST"); + message += F("\nArguments: "); message += webServer->args(); - message += "\n"; + message += F("\n"); for ( uint8_t i = 0; i < webServer->args(); i++ ) { message += " " + webServer->argName ( i ) + ": " + webServer->arg ( i ) + "\n"; } diff --git a/sonoff/xdrv_snfled.ino b/sonoff/xdrv_snfled.ino index a4143751e..7e7291717 100644 --- a/sonoff/xdrv_snfled.ino +++ b/sonoff/xdrv_snfled.ino @@ -156,7 +156,7 @@ void sl_animate() sl_tcolor[1] = sl_dcolor[1]; } else { snprintf_P(svalue, sizeof(svalue), PSTR("{\"Wakeup\":\"Done\"}")); - mqtt_publish_topic_P(1, PSTR("WAKEUP"), svalue); + mqtt_publish_topic_P(2, PSTR("WAKEUP"), svalue); sl_wakeupActive = 0; } } diff --git a/sonoff/xdrv_wemohue.ino b/sonoff/xdrv_wemohue.ino index b7e1b9e2c..20c564d30 100644 --- a/sonoff/xdrv_wemohue.ino +++ b/sonoff/xdrv_wemohue.ino @@ -578,12 +578,11 @@ void hue_lights(String *path) } #endif // USE_WS2812 response += "]"; - webServer->send(200, "application/json", response); } else { response=FPSTR(HUE_ERROR_JSON); - webServer->send(200, "application/json", response); } + webServer->send(200, "application/json", response); } else if(path->indexOf("/lights/") >= 0) { // Got /lights/ID path->remove(0,8); // Remove /lights/ diff --git a/sonoff/xsns_dht.ino b/sonoff/xsns_dht.ino index 3b130b91a..b44e73616 100644 --- a/sonoff/xsns_dht.ino +++ b/sonoff/xsns_dht.ino @@ -202,13 +202,16 @@ void dht_init() dht[i].lastreadtime = -MIN_INTERVAL; switch (dht[i].type) { case GPIO_DHT11: - snprintf_P(dht[i].stype, sizeof(dht[i].stype), PSTR("DHT11-%02d"), dht[i].pin); + strcpy_P(dht[i].stype, PSTR("DHT11")); break; case GPIO_DHT21: - snprintf_P(dht[i].stype, sizeof(dht[i].stype), PSTR("AM2301-%02d"), dht[i].pin); + strcpy_P(dht[i].stype, PSTR("AM2301")); break; case GPIO_DHT22: - snprintf_P(dht[i].stype, sizeof(dht[i].stype), PSTR("DHT22-%02d"), dht[i].pin); + strcpy_P(dht[i].stype, PSTR("DHT22")); + } + if (dht_sensors > 1) { + snprintf_P(dht[i].stype, sizeof(dht[i].stype), PSTR("%s-%02d"), dht[i].stype, dht[i].pin); } } diff --git a/sonoff/xsns_hlw8012.ino b/sonoff/xsns_hlw8012.ino index 47d20d796..8a296b865 100644 --- a/sonoff/xsns_hlw8012.ino +++ b/sonoff/xsns_hlw8012.ino @@ -372,7 +372,7 @@ void hlw_margin_chk() } if (jsonflg) { snprintf_P(svalue, sizeof(svalue), PSTR("%s}"), svalue); - mqtt_publish_topic_P(1, PSTR("MARGINS"), svalue); + mqtt_publish_topic_P(2, PSTR("MARGINS"), svalue); } } @@ -386,7 +386,7 @@ void hlw_margin_chk() hlw_mplh_counter--; if (!hlw_mplh_counter) { snprintf_P(svalue, sizeof(svalue), PSTR("{\"MaxPowerReached\":\"%d%s\"}"), pw, (sysCfg.flag.value_units) ? " W" : ""); - mqtt_publish_topic_P(0, PSTR("WARNING"), svalue); + mqtt_publish_topic_P(1, PSTR("WARNING"), svalue); do_cmnd_power(1, 0); if (!hlw_mplr_counter) { hlw_mplr_counter = MAX_POWER_RETRY +1; @@ -408,11 +408,11 @@ void hlw_margin_chk() hlw_mplr_counter--; if (hlw_mplr_counter) { snprintf_P(svalue, sizeof(svalue), PSTR("{\"PowerMonitor\":\"%s\"}"), getStateText(1)); - mqtt_publish_topic_P(4, PSTR("POWERMONITOR"), svalue); + mqtt_publish_topic_P(5, PSTR("POWERMONITOR"), svalue); do_cmnd_power(1, 1); } else { snprintf_P(svalue, sizeof(svalue), PSTR("{\"MaxPowerReachedRetry\":\"%s\"}"), getStateText(0)); - mqtt_publish_topic_P(0, PSTR("WARNING"), svalue); + mqtt_publish_topic_P(1, PSTR("WARNING"), svalue); } } } @@ -425,14 +425,14 @@ void hlw_margin_chk() if (!hlw_mkwh_state && (rtcTime.Hour == sysCfg.hlw_mkwhs)) { hlw_mkwh_state = 1; snprintf_P(svalue, sizeof(svalue), PSTR("{\"EnergyMonitor\":\"%s\"}"), getStateText(1)); - mqtt_publish_topic_P(4, PSTR("ENERGYMONITOR"), svalue); + mqtt_publish_topic_P(5, PSTR("ENERGYMONITOR"), svalue); do_cmnd_power(1, 1); } else if ((1 == hlw_mkwh_state) && (uped >= sysCfg.hlw_mkwh)) { hlw_mkwh_state = 2; dtostrf(ped, 1, 3, svalue); snprintf_P(svalue, sizeof(svalue), PSTR("{\"MaxEnergyReached\":\"%s%s\"}"), svalue, (sysCfg.flag.value_units) ? " kWh" : ""); - mqtt_publish_topic_P(0, PSTR("WARNING"), svalue); + mqtt_publish_topic_P(1, PSTR("WARNING"), svalue); do_cmnd_power(1, 0); } } @@ -625,7 +625,7 @@ void hlw_mqttPresent() snprintf_P(svalue, sizeof(svalue), PSTR("{\"Time\":\"%s\", "), getDateTime().c_str()); hlw_mqttStat(1, svalue, sizeof(svalue)); - mqtt_publish_topic_P(1, PSTR("ENERGY"), svalue); + mqtt_publish_topic_P(2, PSTR("ENERGY"), svalue); } void hlw_mqttStatus(char* svalue, uint16_t ssvalue)