From d2ebefbb16405c53dd07b5a82ea27b81c8146ec2 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 21 Dec 2019 13:45:26 +0100 Subject: [PATCH 1/2] Bump version to 7.2.0.1 --- README.md | 2 +- RELEASENOTES.md | 2 +- tasmota/CHANGELOG.md | 10 ++++++++-- tasmota/tasmota_version.h | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index acb6430d5..9a9ff0e1c 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ In addition to the [release webpage](https://github.com/arendst/Tasmota/releases ## Development -[![Dev Version](https://img.shields.io/badge/development%20version-v7.1.2.x-blue.svg)](https://github.com/arendst/Tasmota) +[![Dev Version](https://img.shields.io/badge/development%20version-v7.2.x.x-blue.svg)](https://github.com/arendst/Tasmota) [![Download Dev](https://img.shields.io/badge/download-development-yellow.svg)](http://thehackbox.org/tasmota/) [![Build Status](https://img.shields.io/travis/arendst/Tasmota.svg)](https://travis-ci.org/arendst/Tasmota) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 56c4e2c07..f3fff8860 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -49,7 +49,7 @@ The following binary downloads have been compiled with ESP8266/Arduino library c ## Changelog -### Version 7.1.2.6 +### Version 7.2.0 Constance - Change Exception reporting removing exception details from ``Status 1`` and consolidated in ``Status 12`` if available - Change HTTP CORS from command ``SetOption73 0/1`` to ``Cors `` allowing user control of specific CORS domain by Shantur Rathore (#7066) diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md index d847aef5b..e290e1909 100644 --- a/tasmota/CHANGELOG.md +++ b/tasmota/CHANGELOG.md @@ -1,5 +1,13 @@ ## Unreleased (development) +### 7.2.0.1 20191221 + +## Released + +### 7.2.0 20191221 + +- Release + ### 7.1.2.6 20191214 - Change some more Settings locations freeing up space for future single char allowing variable length text @@ -51,8 +59,6 @@ - Add experimental support for stepper motor shutter control by Stefan Bode - Add optional USE_MQTT_TLS to tasmota-minimal.bin by Bohdan Kmit (#7115) -## Released - ### 7.1.2 20191206 - Maintenance Release diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index 84ff6d905..27480159d 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,7 +20,7 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x07010206; +const uint32_t VERSION = 0x07020001; // Lowest compatible version const uint32_t VERSION_COMPATIBLE = 0x06000000; From f55e02e80041e58159c6480dde62bfe0d5a77ace Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 21 Dec 2019 15:37:36 +0100 Subject: [PATCH 2/2] Bump version to 8.0.0.1 Change Settings text handling allowing variable length text within a total text pool of 699 characters --- RELEASENOTES.md | 36 +---- tasmota/CHANGELOG.md | 4 +- tasmota/settings.h | 9 -- tasmota/settings.ino | 258 ++++++++++++--------------------- tasmota/support_statistics.ino | 37 +---- tasmota/tasmota_version.h | 4 +- 6 files changed, 100 insertions(+), 248 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index f3fff8860..bf21cf32b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -2,8 +2,6 @@ # RELEASE NOTES -### Sonoff-Tasmota is now Tasmota - ## Migration Information See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-path) for instructions how to migrate to a major version. Pay attention to the following version breaks due to dynamic settings updates: @@ -13,8 +11,7 @@ See [migration path](https://tasmota.github.io/docs/#/Upgrading?id=migration-pat 3. Migrate to **Sonoff-Tasmota 5.14** 4. Migrate to **Sonoff-Tasmota 6.x** 5. Migrate to **Tasmota 7.x** - -Only this version will support fallback from version 8.x. +6. Migrate to **Tasmota 8.x** ## Supported Core versions @@ -49,33 +46,6 @@ The following binary downloads have been compiled with ESP8266/Arduino library c ## Changelog -### Version 7.2.0 Constance +### Version 8.0.0.1 -- Change Exception reporting removing exception details from ``Status 1`` and consolidated in ``Status 12`` if available -- Change HTTP CORS from command ``SetOption73 0/1`` to ``Cors `` allowing user control of specific CORS domain by Shantur Rathore (#7066) -- Change GUI Shutter button text to Up and Down Arrows based on PR by Xavier Muller (#7166) -- Change amount of supported DHT sensors from 3 to 4 by Xavier Muller (#7167) -- Change some Settings locations freeing up space for future single char allowing variable length text -- Change tasmota-basic.bin and FIRMWARE_BASIC to tasmota-lite.bin and FIRMWARE_LITE -- Fix flashing H801 led at boot by Stefan Hadinger (#7165, #649) -- Fix duplicated ``Backlog`` when using Event inside a Backlog by Adrian Scillato (#7178, #7147) -- Fix Gui Timer when using a negative zero offset of -00:00 by Peter Ooms (#7174) -- Fix DeepSleep in case there is no wifi by Stefan Bode (#7213) -- Fix Fade would ignore ``savedata 0`` and store to flash anyways (#7262) -- Add command ``SerialConfig 0..23`` or ``SerialConfig 8N1`` to select Serial Config based in PR by Luis Teixeira (#7108) -- Add command ``Sensor34 9 `` to set minimum delta to trigger JSON message by @tobox (#7188) -- Add rule var ``%topic%`` by Adrian Scillato (#5522) -- Add rule triggers ``tele-wifi1#xxx`` by Adrian Scillato (#7093) -- Add SML bus decoder syntax support for byte order by Gerhard Mutz (#7112) -- Add experimental support for stepper motor shutter control by Stefan Bode -- Add optional USE_MQTT_TLS to tasmota-minimal.bin by Bohdan Kmit (#7115) -- Add save call stack in RTC memory in case of crash, command ``Status 12`` to dump the stack by Stefan Hadinger -- Add Home Assistant force update by Frederico Leoni (#7140, #7074) -- Add Wifi Signal Strength in dBm in addition to RSSI Wifi Experience by Andreas Schultz (#7145) -- Add Yaw, Pitch and Roll support for MPU6050 by Philip Barclay (#7058) -- Add reporting of raw weight to JSON from HX711 to overcome auto-tare functionality by @tobox (#7171) -- Add Zigbee support for Xiaomi Aqara Vibration Sensor and Presence Sensor by Stefan Hadinger -- Add Shutter functions ramp up/down and MQTT reporting by Stefan Bode -- Add fallback support from version 8.x -- Add restriction if fallback firmware is incompatible with settings resulting in unreachable device -- Add support for DHT12 Temperature and Humidity sensor by Stefan Oskamp +- Change Settings text handling allowing variable length text within a total text pool of 699 characters diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md index e290e1909..e8b70c0cd 100644 --- a/tasmota/CHANGELOG.md +++ b/tasmota/CHANGELOG.md @@ -1,6 +1,8 @@ ## Unreleased (development) -### 7.2.0.1 20191221 +### 8.0.0.1 20191221 + +- Change Settings text handling allowing variable length text within a total text pool of 699 characters ## Released diff --git a/tasmota/settings.h b/tasmota/settings.h index 8b7fe2822..0b3990578 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -231,13 +231,6 @@ typedef struct { const uint8_t MAX_TUYA_FUNCTIONS = 16; -/* -struct SYSCFG { - unsigned long cfg_holder; // 000 Pre v6 header - unsigned long save_flag; // 004 - unsigned long version; // 008 - unsigned long bootcount; // 00C -*/ struct SYSCFG { uint16_t cfg_holder; // 000 v6 header uint16_t cfg_size; // 002 @@ -274,8 +267,6 @@ struct SYSCFG { uint8_t ex_free_1d6[10]; // 1D6 - // End of single char array of 456 chars max (phase 3) - SysBitfield4 ex_flag4; // 1E0 uint8_t ex_serial_config; // 1E4 uint8_t ex_wifi_output_power; // 1E5 diff --git a/tasmota/settings.ino b/tasmota/settings.ino index afbd7b223..9a0ea44f1 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -488,10 +488,7 @@ void UpdateQuickPowerCycle(bool update) * Config Settings.text char array support \*********************************************************************************************/ -char aws_mqtt_host[66]; -char aws_mqtt_user[1] { 0 }; - -const uint32_t settings_text_size = 457; // Settings.flag4 (1E0) - Settings.ota_url (017) +const uint32_t settings_text_size = 699; // Settings.flag4 (2D2) - Settings.ota_url (017) uint32_t GetSettingsTextLen(void) { @@ -513,60 +510,43 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me) char replace[replace_len +1]; memcpy(replace, replace_me, sizeof(replace)); - uint32_t idx = 0; - switch (index) { - case SET_OTAURL: strlcpy(Settings.ota_url, replace, sizeof(Settings.ota_url)); break; - case SET_MQTTPREFIX3: idx++; - case SET_MQTTPREFIX2: idx++; - case SET_MQTTPREFIX1: strlcpy(Settings.mqtt_prefix[idx], replace, sizeof(Settings.mqtt_prefix[idx])); break; - case SET_STASSID2: idx++; - case SET_STASSID1: strlcpy(Settings.sta_ssid[idx], replace, sizeof(Settings.sta_ssid[idx])); break; - case SET_STAPWD2: idx++; - case SET_STAPWD1: strlcpy(Settings.sta_pwd[idx], replace, sizeof(Settings.sta_pwd[idx])); break; - case SET_HOSTNAME: strlcpy(Settings.hostname, replace, sizeof(Settings.hostname)); break; - case SET_SYSLOG_HOST: strlcpy(Settings.syslog_host, replace, sizeof(Settings.syslog_host)); break; - case SET_WEBPWD: strlcpy(Settings.web_password, replace, sizeof(Settings.web_password)); break; -#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT) - case SET_MQTT_HOST: - if (strlen(replace) <= sizeof(Settings.mqtt_host)) { - strlcpy(Settings.mqtt_host, replace, sizeof(Settings.mqtt_host)); - Settings.mqtt_user[0] = 0; - } else { - // need to split in mqtt_user first then mqtt_host - strlcpy(Settings.mqtt_user, replace, sizeof(Settings.mqtt_user)); - strlcpy(Settings.mqtt_host, &replace[sizeof(Settings.mqtt_user)-1], sizeof(Settings.mqtt_host)); - } - break; - case SET_MQTT_USER: break; -#else - case SET_MQTT_HOST: strlcpy(Settings.mqtt_host, replace, sizeof(Settings.mqtt_host)); break; - case SET_MQTT_USER: strlcpy(Settings.mqtt_user, replace, sizeof(Settings.mqtt_user)); break; -#endif - case SET_MQTT_CLIENT: strlcpy(Settings.mqtt_client, replace, sizeof(Settings.mqtt_client)); break; - case SET_MQTT_PWD: strlcpy(Settings.mqtt_pwd, replace, sizeof(Settings.mqtt_pwd)); break; - case SET_MQTT_FULLTOPIC: strlcpy(Settings.mqtt_fulltopic, replace, sizeof(Settings.mqtt_fulltopic)); break; - case SET_MQTT_TOPIC: strlcpy(Settings.mqtt_topic, replace, sizeof(Settings.mqtt_topic)); break; - case SET_MQTT_BUTTON_TOPIC: strlcpy(Settings.button_topic, replace, sizeof(Settings.button_topic)); break; - case SET_MQTT_SWITCH_TOPIC: strlcpy(Settings.switch_topic, replace, sizeof(Settings.switch_topic)); break; - case SET_MQTT_GRP_TOPIC: strlcpy(Settings.mqtt_grptopic, replace, sizeof(Settings.mqtt_grptopic)); break; - case SET_STATE_TXT4: idx++; - case SET_STATE_TXT3: idx++; - case SET_STATE_TXT2: idx++; - case SET_STATE_TXT1: strlcpy(Settings.state_text[idx], replace, sizeof(Settings.state_text[idx])); break; - case SET_NTPSERVER3: idx++; - case SET_NTPSERVER2: idx++; - case SET_NTPSERVER1: strlcpy(Settings.ntp_server[idx], replace, sizeof(Settings.ntp_server[idx])); break; - case SET_MEM5: idx++; - case SET_MEM4: idx++; - case SET_MEM3: idx++; - case SET_MEM2: idx++; - case SET_MEM1: strlcpy(Settings.mems[idx], replace, sizeof(Settings.mems[idx])); break; - case SET_CORS: strlcpy(Settings.cors_domain, replace, sizeof(Settings.cors_domain)); break; - case SET_FRIENDLYNAME4: idx++; - case SET_FRIENDLYNAME3: idx++; - case SET_FRIENDLYNAME2: idx++; - case SET_FRIENDLYNAME1: strlcpy(Settings.friendlyname[idx], replace, sizeof(Settings.friendlyname[idx])); break; + uint32_t start_pos = 0; + uint32_t end_pos = 0; + char* position = Settings.ota_url; + for (uint32_t size = 0; size < SET_MAX; size++) { + while (*position++ != '\0') { } + if (1 == index) { + start_pos = position - Settings.ota_url; + } + else if (0 == index) { + end_pos = position - Settings.ota_url -1; + } + index--; } + uint32_t char_len = position - Settings.ota_url; + + uint32_t current_len = end_pos - start_pos; + int diff = replace_len - current_len; + +// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("TST: start %d, end %d, len %d, current %d, replace %d, diff %d"), +// start_pos, end_pos, char_len, current_len, replace_len, diff); + + int too_long = (char_len + diff) - settings_text_size; + if (too_long > 0) { +// AddLog_P2(LOG_LEVEL_INFO, PSTR(D_LOG_CONFIG "Text too long by %d char(s)"), too_long); + return false; // Replace text too long + } + + if (diff != 0) { + // Shift Settings.text up or down + memmove_P(Settings.ota_url + start_pos + replace_len, Settings.ota_url + end_pos, char_len - end_pos); + } + // Replace text + memmove_P(Settings.ota_url + start_pos, replace, replace_len); + // Fill for future use + memset(Settings.ota_url + char_len + diff, 0x00, settings_text_size - char_len - diff); + + AddLog_P2(LOG_LEVEL_DEBUG, PSTR(D_LOG_CONFIG "CR %d/%d"), GetSettingsTextLen(), settings_text_size); return true; } @@ -578,61 +558,9 @@ char* SettingsText(uint32_t index) } char* position = Settings.ota_url; - - if (Settings.version < 0x08000000) { - uint32_t idx = 0; - switch (index) { - case SET_MQTTPREFIX3: idx++; - case SET_MQTTPREFIX2: idx++; - case SET_MQTTPREFIX1: position = Settings.mqtt_prefix[idx]; break; - case SET_STASSID2: idx++; - case SET_STASSID1: position = Settings.sta_ssid[idx]; break; - case SET_STAPWD2: idx++; - case SET_STAPWD1: position = Settings.sta_pwd[idx]; break; - case SET_HOSTNAME: position = Settings.hostname; break; - case SET_SYSLOG_HOST: position = Settings.syslog_host; break; - case SET_WEBPWD: position = Settings.web_password; break; -#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT) - case SET_MQTT_HOST: - snprintf_P(aws_mqtt_host, sizeof(aws_mqtt_host), PSTR("%s%s"), Settings.mqtt_user, Settings.mqtt_host); - position = aws_mqtt_host; break; - case SET_MQTT_USER: position = aws_mqtt_user; break; -#else - case SET_MQTT_HOST: position = Settings.mqtt_host; break; - case SET_MQTT_USER: position = Settings.mqtt_user; break; -#endif - case SET_MQTT_CLIENT: position = Settings.mqtt_client; break; - case SET_MQTT_PWD: position = Settings.mqtt_pwd; break; - case SET_MQTT_FULLTOPIC: position = Settings.mqtt_fulltopic; break; - case SET_MQTT_TOPIC: position = Settings.mqtt_topic; break; - case SET_MQTT_BUTTON_TOPIC: position = Settings.button_topic; break; - case SET_MQTT_SWITCH_TOPIC: position = Settings.switch_topic; break; - case SET_MQTT_GRP_TOPIC: position = Settings.mqtt_grptopic; break; - case SET_STATE_TXT4: idx++; - case SET_STATE_TXT3: idx++; - case SET_STATE_TXT2: idx++; - case SET_STATE_TXT1: position = Settings.state_text[idx]; break; - case SET_NTPSERVER3: idx++; - case SET_NTPSERVER2: idx++; - case SET_NTPSERVER1: position = Settings.ntp_server[idx]; break; - case SET_MEM5: idx++; - case SET_MEM4: idx++; - case SET_MEM3: idx++; - case SET_MEM2: idx++; - case SET_MEM1: position = Settings.mems[idx]; break; - case SET_CORS: position = Settings.cors_domain; break; - case SET_FRIENDLYNAME4: idx++; - case SET_FRIENDLYNAME3: idx++; - case SET_FRIENDLYNAME2: idx++; - case SET_FRIENDLYNAME1: position = Settings.friendlyname[idx]; break; - } - - } else { - for (;index > 0; index--) { - while (*position++ != '\0') { } - } + for (;index > 0; index--) { + while (*position++ != '\0') { } } - return position; } @@ -1132,10 +1060,6 @@ void SettingsDefaultSet2(void) memset(&Settings.monitors, 0xFF, 20); // Enable all possible monitors, displays and sensors SettingsEnableAllI2cDrivers(); - - if (VERSION < 0x08000000) { - SettingsBackwardCompat(); - } } /********************************************************************************************/ @@ -1175,17 +1099,6 @@ void SettingsEnableAllI2cDrivers(void) Settings.i2c_drivers[2] = 0xFFFFFFFF; } -void SettingsBackwardCompat(void) -{ - Settings.ex_seriallog_level = Settings.seriallog_level; // 09E <- 452 - Settings.ex_sta_config = Settings.sta_config; // 09F <- EC7 - Settings.ex_sta_active = Settings.sta_active; // 0A0 <- EC8 - memcpy((char*)&Settings.ex_rule_stop, (char*)&Settings.rule_stop, 47); // 1A7 <- EC9 - Settings.ex_flag4 = Settings.flag4; // 1E0 <- EF8 - Settings.ex_mqtt_port = Settings.mqtt_port; // 20A <- EFC - memcpy((char*)&Settings.ex_serial_config, (char*)&Settings.serial_config, 5); // 1E4 <- EFE -} - /********************************************************************************************/ void SettingsDelta(void) @@ -1405,46 +1318,26 @@ void SettingsDelta(void) memcpy((char*)&Settings.serial_config, (char*)&Settings.ex_serial_config, 5); // 1E4 -> EFE } - if ((VERSION < 0x08000000) && (Settings.version >= 0x08000000)) { - SettingsUpdateText(SET_WEBPWD, SettingsText(SET_WEBPWD)); - SettingsUpdateText(SET_CORS, SettingsText(SET_CORS)); - SettingsUpdateText(SET_MQTT_FULLTOPIC, SettingsText(SET_MQTT_FULLTOPIC)); - SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, SettingsText(SET_MQTT_SWITCH_TOPIC)); - SettingsUpdateText(SET_STATE_TXT1, SettingsText(SET_STATE_TXT1)); - SettingsUpdateText(SET_STATE_TXT2, SettingsText(SET_STATE_TXT2)); - SettingsUpdateText(SET_STATE_TXT3, SettingsText(SET_STATE_TXT3)); - SettingsUpdateText(SET_STATE_TXT4, SettingsText(SET_STATE_TXT4)); - SettingsUpdateText(SET_NTPSERVER1, SettingsText(SET_NTPSERVER1)); - SettingsUpdateText(SET_NTPSERVER2, SettingsText(SET_NTPSERVER2)); - SettingsUpdateText(SET_NTPSERVER3, SettingsText(SET_NTPSERVER3)); - SettingsUpdateText(SET_MEM1, SettingsText(SET_MEM1)); - SettingsUpdateText(SET_MEM2, SettingsText(SET_MEM2)); - SettingsUpdateText(SET_MEM3, SettingsText(SET_MEM3)); - SettingsUpdateText(SET_MEM4, SettingsText(SET_MEM4)); - SettingsUpdateText(SET_MEM5, SettingsText(SET_MEM5)); - SettingsUpdateText(SET_FRIENDLYNAME1, SettingsText(SET_FRIENDLYNAME1)); - SettingsUpdateText(SET_FRIENDLYNAME2, SettingsText(SET_FRIENDLYNAME2)); - SettingsUpdateText(SET_FRIENDLYNAME3, SettingsText(SET_FRIENDLYNAME3)); - SettingsUpdateText(SET_FRIENDLYNAME4, SettingsText(SET_FRIENDLYNAME4)); - - char temp[strlen(SettingsText(SET_OTAURL)) +1]; strncpy(temp, SettingsText(SET_OTAURL), sizeof(temp)); - char temp21[strlen(SettingsText(SET_MQTTPREFIX1)) +1]; strncpy(temp21, SettingsText(SET_MQTTPREFIX1), sizeof(temp21)); - char temp22[strlen(SettingsText(SET_MQTTPREFIX2)) +1]; strncpy(temp22, SettingsText(SET_MQTTPREFIX2), sizeof(temp22)); - char temp23[strlen(SettingsText(SET_MQTTPREFIX3)) +1]; strncpy(temp23, SettingsText(SET_MQTTPREFIX3), sizeof(temp23)); - char temp31[strlen(SettingsText(SET_STASSID1)) +1]; strncpy(temp31, SettingsText(SET_STASSID1), sizeof(temp31)); - char temp32[strlen(SettingsText(SET_STASSID2)) +1]; strncpy(temp32, SettingsText(SET_STASSID2), sizeof(temp32)); - char temp41[strlen(SettingsText(SET_STAPWD1)) +1]; strncpy(temp41, SettingsText(SET_STAPWD1), sizeof(temp41)); - char temp42[strlen(SettingsText(SET_STAPWD2)) +1]; strncpy(temp42, SettingsText(SET_STAPWD2), sizeof(temp42)); - char temp5[strlen(SettingsText(SET_HOSTNAME)) +1]; strncpy(temp5, SettingsText(SET_HOSTNAME), sizeof(temp5)); - char temp6[strlen(SettingsText(SET_SYSLOG_HOST)) +1]; strncpy(temp6, SettingsText(SET_SYSLOG_HOST), sizeof(temp6)); - char temp7[strlen(SettingsText(SET_MQTT_HOST)) +1]; strncpy(temp7, SettingsText(SET_MQTT_HOST), sizeof(temp7)); - char temp8[strlen(SettingsText(SET_MQTT_CLIENT)) +1]; strncpy(temp8, SettingsText(SET_MQTT_CLIENT), sizeof(temp8)); - char temp9[strlen(SettingsText(SET_MQTT_USER)) +1]; strncpy(temp9, SettingsText(SET_MQTT_USER), sizeof(temp9)); - char temp10[strlen(SettingsText(SET_MQTT_PWD)) +1]; strncpy(temp10, SettingsText(SET_MQTT_PWD), sizeof(temp10)); - char temp11[strlen(SettingsText(SET_MQTT_TOPIC)) +1]; strncpy(temp11, SettingsText(SET_MQTT_TOPIC), sizeof(temp11)); - char temp12[strlen(SettingsText(SET_MQTT_BUTTON_TOPIC)) +1]; strncpy(temp12, SettingsText(SET_MQTT_BUTTON_TOPIC), sizeof(temp12)); - char temp13[strlen(SettingsText(SET_MQTT_GRP_TOPIC)) +1]; strncpy(temp13, SettingsText(SET_MQTT_GRP_TOPIC), sizeof(temp13)); + if (Settings.version < 0x08000000) { + char temp[strlen(Settings.ota_url) +1]; strncpy(temp, Settings.ota_url, sizeof(temp)); + char temp21[strlen(Settings.mqtt_prefix[0]) +1]; strncpy(temp21, Settings.mqtt_prefix[0], sizeof(temp21)); + char temp22[strlen(Settings.mqtt_prefix[1]) +1]; strncpy(temp22, Settings.mqtt_prefix[1], sizeof(temp22)); + char temp23[strlen(Settings.mqtt_prefix[2]) +1]; strncpy(temp23, Settings.mqtt_prefix[2], sizeof(temp23)); + char temp31[strlen(Settings.sta_ssid[0]) +1]; strncpy(temp31, Settings.sta_ssid[0], sizeof(temp31)); + char temp32[strlen(Settings.sta_ssid[1]) +1]; strncpy(temp32, Settings.sta_ssid[1], sizeof(temp32)); + char temp41[strlen(Settings.sta_pwd[0]) +1]; strncpy(temp41, Settings.sta_pwd[0], sizeof(temp41)); + char temp42[strlen(Settings.sta_pwd[1]) +1]; strncpy(temp42, Settings.sta_pwd[1], sizeof(temp42)); + char temp5[strlen(Settings.hostname) +1]; strncpy(temp5, Settings.hostname, sizeof(temp5)); + char temp6[strlen(Settings.syslog_host) +1]; strncpy(temp6, Settings.syslog_host, sizeof(temp6)); + char temp7[strlen(Settings.mqtt_host) +1]; strncpy(temp7, Settings.mqtt_host, sizeof(temp7)); + char temp8[strlen(Settings.mqtt_client) +1]; strncpy(temp8, Settings.mqtt_client, sizeof(temp8)); + char temp9[strlen(Settings.mqtt_user) +1]; strncpy(temp9, Settings.mqtt_user, sizeof(temp9)); + char temp10[strlen(Settings.mqtt_pwd) +1]; strncpy(temp10, Settings.mqtt_pwd, sizeof(temp10)); + char temp11[strlen(Settings.mqtt_topic) +1]; strncpy(temp11, Settings.mqtt_topic, sizeof(temp11)); + char temp12[strlen(Settings.button_topic) +1]; strncpy(temp12, Settings.button_topic, sizeof(temp12)); + char temp13[strlen(Settings.mqtt_grptopic) +1]; strncpy(temp13, Settings.mqtt_grptopic, sizeof(temp13)); + memset(Settings.ota_url, 0x00, settings_text_size); SettingsUpdateText(SET_OTAURL, temp); SettingsUpdateText(SET_MQTTPREFIX1, temp21); SettingsUpdateText(SET_MQTTPREFIX2, temp22); @@ -1455,15 +1348,46 @@ void SettingsDelta(void) SettingsUpdateText(SET_STAPWD2, temp42); SettingsUpdateText(SET_HOSTNAME, temp5); SettingsUpdateText(SET_SYSLOG_HOST, temp6); +#if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT) + if (!strlen(Settings.mqtt_user)) { + SettingsUpdateText(SET_MQTT_HOST, temp7); + SettingsUpdateText(SET_MQTT_USER, temp9); + } else { + char aws_mqtt_host[66]; + snprintf_P(aws_mqtt_host, sizeof(aws_mqtt_host), PSTR("%s%s"), temp9, temp7); + SettingsUpdateText(SET_MQTT_HOST, mqtt_host); + SettingsUpdateText(SET_MQTT_USER, ""); + } +#else SettingsUpdateText(SET_MQTT_HOST, temp7); - SettingsUpdateText(SET_MQTT_CLIENT, temp8); SettingsUpdateText(SET_MQTT_USER, temp9); +#endif + SettingsUpdateText(SET_MQTT_CLIENT, temp8); SettingsUpdateText(SET_MQTT_PWD, temp10); SettingsUpdateText(SET_MQTT_TOPIC, temp11); SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, temp12); SettingsUpdateText(SET_MQTT_GRP_TOPIC, temp13); - SettingsBackwardCompat(); + SettingsUpdateText(SET_WEBPWD, Settings.web_password); + SettingsUpdateText(SET_CORS, Settings.cors_domain); + SettingsUpdateText(SET_MQTT_FULLTOPIC, Settings.mqtt_fulltopic); + SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, Settings.switch_topic); + SettingsUpdateText(SET_STATE_TXT1, Settings.state_text[0]); + SettingsUpdateText(SET_STATE_TXT2, Settings.state_text[1]); + SettingsUpdateText(SET_STATE_TXT3, Settings.state_text[2]); + SettingsUpdateText(SET_STATE_TXT4, Settings.state_text[3]); + SettingsUpdateText(SET_NTPSERVER1, Settings.ntp_server[0]); + SettingsUpdateText(SET_NTPSERVER2, Settings.ntp_server[1]); + SettingsUpdateText(SET_NTPSERVER3, Settings.ntp_server[2]); + SettingsUpdateText(SET_MEM1, Settings.mems[0]); + SettingsUpdateText(SET_MEM2, Settings.mems[1]); + SettingsUpdateText(SET_MEM3, Settings.mems[2]); + SettingsUpdateText(SET_MEM4, Settings.mems[3]); + SettingsUpdateText(SET_MEM5, Settings.mems[4]); + SettingsUpdateText(SET_FRIENDLYNAME1, Settings.friendlyname[0]); + SettingsUpdateText(SET_FRIENDLYNAME2, Settings.friendlyname[1]); + SettingsUpdateText(SET_FRIENDLYNAME3, Settings.friendlyname[2]); + SettingsUpdateText(SET_FRIENDLYNAME4, Settings.friendlyname[3]); } Settings.version = VERSION; diff --git a/tasmota/support_statistics.ino b/tasmota/support_statistics.ino index b8f65bd20..1907b1edc 100644 --- a/tasmota/support_statistics.ino +++ b/tasmota/support_statistics.ino @@ -27,42 +27,7 @@ String GetStatistics(void) { char data[40]; - - if (Settings.version < 0x08000000) { - uint32_t str_len = 0; - for (uint32_t i = 0; i < 2; i++) { - str_len += strlen(Settings.sta_ssid[i]); - str_len += strlen(Settings.sta_pwd[i]); - } - for (uint32_t i = 0; i < 3; i++) { - str_len += strlen(Settings.mqtt_prefix[i]); - str_len += strlen(Settings.ntp_server[i]); - } - for (uint32_t i = 0; i < 4; i++) { - str_len += strlen(Settings.state_text[i]); - str_len += strlen(Settings.friendlyname[i]); - } - for (uint32_t i = 0; i < MAX_RULE_MEMS; i++) { - str_len += strlen(Settings.mems[i]); - } - str_len += strlen(Settings.ota_url); - str_len += strlen(Settings.hostname); - str_len += strlen(Settings.syslog_host); - str_len += strlen(Settings.mqtt_host); - str_len += strlen(Settings.mqtt_client); - str_len += strlen(Settings.mqtt_user); - str_len += strlen(Settings.mqtt_pwd); - str_len += strlen(Settings.mqtt_topic); - str_len += strlen(Settings.button_topic); - str_len += strlen(Settings.switch_topic); - str_len += strlen(Settings.mqtt_grptopic); - str_len += strlen(Settings.web_password); - str_len += strlen(Settings.mqtt_fulltopic); - str_len += strlen(Settings.cors_domain); - snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/1151\""), 37 + str_len); // Char Usage Ratio - } else { - snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/%d\""), GetSettingsTextLen(), settings_text_size); // Char Usage Ratio - } + snprintf_P(data, sizeof(data), PSTR(",\"CR\":\"%d/%d\""), GetSettingsTextLen(), settings_text_size); // Char Usage Ratio return String(data); } diff --git a/tasmota/tasmota_version.h b/tasmota/tasmota_version.h index 27480159d..be2cfafe2 100644 --- a/tasmota/tasmota_version.h +++ b/tasmota/tasmota_version.h @@ -20,9 +20,9 @@ #ifndef _TASMOTA_VERSION_H_ #define _TASMOTA_VERSION_H_ -const uint32_t VERSION = 0x07020001; +const uint32_t VERSION = 0x08000001; // Lowest compatible version -const uint32_t VERSION_COMPATIBLE = 0x06000000; +const uint32_t VERSION_COMPATIBLE = 0x07010006; #endif // _TASMOTA_VERSION_H_