diff --git a/tasmota/settings.h b/tasmota/settings.h index c55d85b34..af774a4c2 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -229,6 +229,7 @@ typedef struct { uint8_t dpid = 0; } TuyaFnidDpidMap; +const uint32_t settings_text_size = 699; // Settings.text_pool[size] = Settings.display_model (2D2) - Settings.text_pool (017) const uint8_t MAX_TUYA_FUNCTIONS = 16; struct SYSCFG { @@ -242,21 +243,19 @@ struct SYSCFG { int16_t save_data; // 014 int8_t timezone; // 016 - // Start of single char array Settings.text + // Start of char array storing all parameter strings - char ota_url[101]; // 017 - char mqtt_prefix[3][11]; // 07C + char text_pool[101]; // 017 - was ota_url[101] - size is settings_text_size - uint8_t ex_baudrate; // 09D - Free since 6.6.0.9 + char ex_mqtt_prefix[3][11]; // 07C + uint8_t ex_baudrate; // 09D uint8_t ex_seriallog_level; // 09E uint8_t ex_sta_config; // 09F uint8_t ex_sta_active; // 0A0 - - char sta_ssid[2][33]; // 0A1 - Keep together with sta_pwd as being copied as one chunck with reset 5 - char sta_pwd[2][65]; // 0E3 - Keep together with sta_ssid as being copied as one chunck with reset 5 - char hostname[33]; // 165 - char syslog_host[33]; // 186 - + char ex_sta_ssid[2][33]; // 0A1 + char ex_sta_pwd[2][65]; // 0E3 + char ex_hostname[33]; // 165 + char ex_syslog_host[33]; // 186 uint8_t ex_rule_stop; // 1A7 uint16_t ex_syslog_port; // 1A8 uint8_t ex_syslog_level; // 1AA @@ -264,28 +263,23 @@ struct SYSCFG { uint8_t ex_weblog_level; // 1AC uint8_t ex_mqtt_fingerprint[2][20]; // 1AD uint8_t ex_adc_param_type; // 1D5 - uint8_t ex_free_1d6[10]; // 1D6 - SysBitfield4 ex_flag4; // 1E0 uint8_t ex_serial_config; // 1E4 uint8_t ex_wifi_output_power; // 1E5 uint8_t ex_shutter_accuracy; // 1E6 uint8_t ex_mqttlog_level; // 1E7 uint8_t ex_sps30_inuse_hours; // 1E8 + char ex_mqtt_host[33]; // 1E9 + uint16_t ex_mqtt_port; // 20A + char ex_mqtt_client[33]; // 20C + char ex_mqtt_user[33]; // 22D + char ex_mqtt_pwd[33]; // 24E + char ex_mqtt_topic[33]; // 26F + char ex_button_topic[33]; // 290 + char ex_mqtt_grptopic[33]; // 2B1 - char mqtt_host[33]; // 1E9 - Keep together with below as being copied as one chunck with reset 6 - - uint16_t ex_mqtt_port; // 20A - Keep together - - char mqtt_client[33]; // 20C - Keep together - char mqtt_user[33]; // 22D - Keep together - char mqtt_pwd[33]; // 24E - Keep together - char mqtt_topic[33]; // 26F - Keep together with above items as being copied as one chunck with reset 6 - char button_topic[33]; // 290 - char mqtt_grptopic[33]; // 2B1 - - // Optional end of single char array of 698 chars max (phase 5) + // End of single char array of 698 chars max uint8_t display_model; // 2D2 uint8_t display_mode; // 2D3 @@ -306,8 +300,8 @@ struct SYSCFG { uint8_t param[PARAM8_SIZE]; // 2FC SetOption32 .. SetOption49 int16_t toffset[2]; // 30E uint8_t display_font; // 312 - char state_text[4][11]; // 313 + char ex_state_text[4][11]; // 313 uint8_t ex_energy_power_delta; // 33F - Free since 6.6.0.20 uint16_t domoticz_update_timer; // 340 @@ -342,8 +336,10 @@ struct SYSCFG { uint16_t light_rotation; // 39E SysBitfield3 flag3; // 3A0 uint8_t switchmode[MAX_SWITCHES]; // 3A4 (6.0.0b - moved from 0x4CA) - char friendlyname[MAX_FRIENDLYNAMES][33]; // 3AC - char switch_topic[33]; // 430 + + char ex_friendlyname[MAX_FRIENDLYNAMES][33]; // 3AC + char ex_switch_topic[33]; // 430 + char serial_delimiter; // 451 uint8_t seriallog_level; // 452 uint8_t sleep; // 453 @@ -367,15 +363,21 @@ struct SYSCFG { uint8_t knx_GA_registered; // 4A5 Number of Group Address to read uint16_t light_wakeup; // 4A6 uint8_t knx_CB_registered; // 4A8 Number of Group Address to write - char web_password[33]; // 4A9 + + char ex_web_password[33]; // 4A9 + uint8_t interlock[MAX_INTERLOCKS]; // 4CA - char ntp_server[3][33]; // 4CE + + char ex_ntp_server[3][33]; // 4CE + uint8_t ina219_mode; // 531 uint16_t pulse_timer[MAX_PULSETIMERS]; // 532 uint16_t button_debounce; // 542 uint32_t ip_address[4]; // 544 unsigned long energy_kWhtotal; // 554 - char mqtt_fulltopic[100]; // 558 + + char ex_mqtt_fulltopic[100]; // 558 + SysBitfield2 flag2; // 5BC unsigned long pulse_counter[MAX_COUNTERS]; // 5C0 uint16_t pulse_counter_type; // 5D0 @@ -419,7 +421,7 @@ struct SYSCFG { unsigned long weight_calibration; // 7C4 unsigned long energy_frequency_calibration; // 7C8 also used by HX711 to save last weight uint16_t web_refresh; // 7CC - char mems[5][10]; // 7CE - Used by scripter as script_pram + char script_pram[5][10]; // 7CE char rules[MAX_RULE_SETS][MAX_RULE_SIZE]; // 800 uses 512 bytes in v5.12.0m, 3 x 512 bytes in v5.14.0b @@ -443,7 +445,9 @@ struct SYSCFG { int8_t temp_comp; // E9E uint8_t weight_change; // E9F uint8_t web_color2[2][3]; // EA0 - Needs to be on integer / 3 distance from web_color - char cors_domain[33]; // EA6 + + char ex_cors_domain[33]; // EA6 + uint8_t sta_config; // EC7 uint8_t sta_active; // EC8 uint8_t rule_stop; // EC9 diff --git a/tasmota/settings.ino b/tasmota/settings.ino index b0241f9fb..ce6c33ff4 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -488,15 +488,13 @@ void UpdateQuickPowerCycle(bool update) * Config Settings.text char array support \*********************************************************************************************/ -const uint32_t settings_text_size = 699; // Settings.display_model (2D2) - Settings.ota_url (017) - uint32_t GetSettingsTextLen(void) { - char* position = Settings.ota_url; + char* position = Settings.text_pool; for (uint32_t size = 0; size < SET_MAX; size++) { while (*position++ != '\0') { } } - return position - Settings.ota_url; + return position - Settings.text_pool; } bool SettingsUpdateText(uint32_t index, const char* replace_me) @@ -512,18 +510,18 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me) uint32_t start_pos = 0; uint32_t end_pos = 0; - char* position = Settings.ota_url; + char* position = Settings.text_pool; for (uint32_t size = 0; size < SET_MAX; size++) { while (*position++ != '\0') { } if (1 == index) { - start_pos = position - Settings.ota_url; + start_pos = position - Settings.text_pool; } else if (0 == index) { - end_pos = position - Settings.ota_url -1; + end_pos = position - Settings.text_pool -1; } index--; } - uint32_t char_len = position - Settings.ota_url; + uint32_t char_len = position - Settings.text_pool; uint32_t current_len = end_pos - start_pos; int diff = replace_len - current_len; @@ -539,12 +537,12 @@ bool SettingsUpdateText(uint32_t index, const char* replace_me) 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); + memmove_P(Settings.text_pool + start_pos + replace_len, Settings.text_pool + end_pos, char_len - end_pos); } // Replace text - memmove_P(Settings.ota_url + start_pos, replace, replace_len); + memmove_P(Settings.text_pool + start_pos, replace, replace_len); // Fill for future use - memset(Settings.ota_url + char_len + diff, 0x00, settings_text_size - char_len - diff); + memset(Settings.text_pool + 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); @@ -557,7 +555,7 @@ char* SettingsText(uint32_t index) return nullptr; // Setting not supported - internal error } - char* position = Settings.ota_url; + char* position = Settings.text_pool; for (;index > 0; index--) { while (*position++ != '\0') { } } @@ -1301,9 +1299,9 @@ void SettingsDelta(void) } if (Settings.version < 0x07010204) { if (Settings.flag3.ex_cors_enabled == 1) { - strlcpy(Settings.cors_domain, CORS_ENABLED_ALL, sizeof(Settings.cors_domain)); + strlcpy(Settings.ex_cors_domain, CORS_ENABLED_ALL, sizeof(Settings.ex_cors_domain)); } else { - Settings.cors_domain[0] = 0; + Settings.ex_cors_domain[0] = 0; } } if (Settings.version < 0x07010205) { @@ -1319,25 +1317,25 @@ void SettingsDelta(void) } 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)); + char temp[strlen(Settings.text_pool) +1]; strncpy(temp, Settings.text_pool, sizeof(temp)); // Was ota_url + char temp21[strlen(Settings.ex_mqtt_prefix[0]) +1]; strncpy(temp21, Settings.ex_mqtt_prefix[0], sizeof(temp21)); + char temp22[strlen(Settings.ex_mqtt_prefix[1]) +1]; strncpy(temp22, Settings.ex_mqtt_prefix[1], sizeof(temp22)); + char temp23[strlen(Settings.ex_mqtt_prefix[2]) +1]; strncpy(temp23, Settings.ex_mqtt_prefix[2], sizeof(temp23)); + char temp31[strlen(Settings.ex_sta_ssid[0]) +1]; strncpy(temp31, Settings.ex_sta_ssid[0], sizeof(temp31)); + char temp32[strlen(Settings.ex_sta_ssid[1]) +1]; strncpy(temp32, Settings.ex_sta_ssid[1], sizeof(temp32)); + char temp41[strlen(Settings.ex_sta_pwd[0]) +1]; strncpy(temp41, Settings.ex_sta_pwd[0], sizeof(temp41)); + char temp42[strlen(Settings.ex_sta_pwd[1]) +1]; strncpy(temp42, Settings.ex_sta_pwd[1], sizeof(temp42)); + char temp5[strlen(Settings.ex_hostname) +1]; strncpy(temp5, Settings.ex_hostname, sizeof(temp5)); + char temp6[strlen(Settings.ex_syslog_host) +1]; strncpy(temp6, Settings.ex_syslog_host, sizeof(temp6)); + char temp7[strlen(Settings.ex_mqtt_host) +1]; strncpy(temp7, Settings.ex_mqtt_host, sizeof(temp7)); + char temp8[strlen(Settings.ex_mqtt_client) +1]; strncpy(temp8, Settings.ex_mqtt_client, sizeof(temp8)); + char temp9[strlen(Settings.ex_mqtt_user) +1]; strncpy(temp9, Settings.ex_mqtt_user, sizeof(temp9)); + char temp10[strlen(Settings.ex_mqtt_pwd) +1]; strncpy(temp10, Settings.ex_mqtt_pwd, sizeof(temp10)); + char temp11[strlen(Settings.ex_mqtt_topic) +1]; strncpy(temp11, Settings.ex_mqtt_topic, sizeof(temp11)); + char temp12[strlen(Settings.ex_button_topic) +1]; strncpy(temp12, Settings.ex_button_topic, sizeof(temp12)); + char temp13[strlen(Settings.ex_mqtt_grptopic) +1]; strncpy(temp13, Settings.ex_mqtt_grptopic, sizeof(temp13)); - memset(Settings.ota_url, 0x00, settings_text_size); + memset(Settings.text_pool, 0x00, settings_text_size); SettingsUpdateText(SET_OTAURL, temp); SettingsUpdateText(SET_MQTTPREFIX1, temp21); SettingsUpdateText(SET_MQTTPREFIX2, temp22); @@ -1349,7 +1347,7 @@ void SettingsDelta(void) SettingsUpdateText(SET_HOSTNAME, temp5); SettingsUpdateText(SET_SYSLOG_HOST, temp6); #if defined(USE_MQTT_TLS) && defined(USE_MQTT_AWS_IOT) - if (!strlen(Settings.mqtt_user)) { + if (!strlen(Settings.ex_mqtt_user)) { SettingsUpdateText(SET_MQTT_HOST, temp7); SettingsUpdateText(SET_MQTT_USER, temp9); } else { @@ -1368,26 +1366,26 @@ void SettingsDelta(void) SettingsUpdateText(SET_MQTT_BUTTON_TOPIC, temp12); SettingsUpdateText(SET_MQTT_GRP_TOPIC, temp13); - 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]); + SettingsUpdateText(SET_WEBPWD, Settings.ex_web_password); + SettingsUpdateText(SET_CORS, Settings.ex_cors_domain); + SettingsUpdateText(SET_MQTT_FULLTOPIC, Settings.ex_mqtt_fulltopic); + SettingsUpdateText(SET_MQTT_SWITCH_TOPIC, Settings.ex_switch_topic); + SettingsUpdateText(SET_STATE_TXT1, Settings.ex_state_text[0]); + SettingsUpdateText(SET_STATE_TXT2, Settings.ex_state_text[1]); + SettingsUpdateText(SET_STATE_TXT3, Settings.ex_state_text[2]); + SettingsUpdateText(SET_STATE_TXT4, Settings.ex_state_text[3]); + SettingsUpdateText(SET_NTPSERVER1, Settings.ex_ntp_server[0]); + SettingsUpdateText(SET_NTPSERVER2, Settings.ex_ntp_server[1]); + SettingsUpdateText(SET_NTPSERVER3, Settings.ex_ntp_server[2]); + SettingsUpdateText(SET_MEM1, Settings.script_pram[0]); + SettingsUpdateText(SET_MEM2, Settings.script_pram[1]); + SettingsUpdateText(SET_MEM3, Settings.script_pram[2]); + SettingsUpdateText(SET_MEM4, Settings.script_pram[3]); + SettingsUpdateText(SET_MEM5, Settings.script_pram[4]); + SettingsUpdateText(SET_FRIENDLYNAME1, Settings.ex_friendlyname[0]); + SettingsUpdateText(SET_FRIENDLYNAME2, Settings.ex_friendlyname[1]); + SettingsUpdateText(SET_FRIENDLYNAME3, Settings.ex_friendlyname[2]); + SettingsUpdateText(SET_FRIENDLYNAME4, Settings.ex_friendlyname[3]); } Settings.version = VERSION; diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index da63dbb22..c6aedb80e 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -4754,7 +4754,7 @@ bool Xdrv10(uint8_t function) glob_script_mem.script_ram=Settings.rules[0]; glob_script_mem.script_size=MAX_SCRIPT_SIZE; glob_script_mem.flags=0; - glob_script_mem.script_pram=(uint8_t*)Settings.mems[0]; + glob_script_mem.script_pram=(uint8_t*)Settings.script_pram[0]; glob_script_mem.script_pram_size=5*10; #ifdef USE_BUTTON_EVENT diff --git a/tasmota/xdrv_20_hue.ino b/tasmota/xdrv_20_hue.ino index 1d13ee263..80e85d821 100644 --- a/tasmota/xdrv_20_hue.ino +++ b/tasmota/xdrv_20_hue.ino @@ -365,7 +365,6 @@ void HueLightStatus1(uint8_t device, String *response) // Any device whose friendly name start with "$" is considered hidden bool HueActive(uint8_t device) { if (device > MAX_FRIENDLYNAMES) { device = MAX_FRIENDLYNAMES; } -// return '$' != Settings.friendlyname[device-1][0]; return '$' != *SettingsText(SET_FRIENDLYNAME1 +device -1); }