From 72f2e944d5070eeaffac8ecc89a373cc7c5e5353 Mon Sep 17 00:00:00 2001 From: gemu2015 Date: Wed, 25 Dec 2019 09:04:54 +0100 Subject: [PATCH 1/3] scripter pram update --- tasmota/settings.h | 2 +- tasmota/settings.ino | 5 ----- tasmota/xdrv_10_scripter.ino | 11 ++++++----- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/tasmota/settings.h b/tasmota/settings.h index eddc4f04b..dfe35be60 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -421,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 script_pram[5][10]; // 7CE + uint8_t script_pram[50]; // 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 diff --git a/tasmota/settings.ino b/tasmota/settings.ino index 6412d3fc9..8181440d7 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -1378,11 +1378,6 @@ void SettingsDelta(void) 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]); diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index 27d72c717..6b97fa68a 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -56,7 +56,8 @@ keywords if then else endif, or, and are better readable for beginners (others m #define SCRIPT_MAXSSIZE 48 #define SCRIPT_EOL '\n' #define SCRIPT_FLOAT_PRECISION 2 -#define SCRIPT_MAXPERM (5*10)-4/sizeof(float) +#define PMEM_SIZE sizeof(Settings.script_pram) +#define SCRIPT_MAXPERM (PMEM_SIZE)-4/sizeof(float) #define MAX_SCRIPT_SIZE MAX_RULE_SIZE*MAX_RULE_SETS // offsets epoch readings by 1.1.2019 00:00:00 to fit into float with second resolution @@ -1575,7 +1576,7 @@ chknext: case 'r': if (!strncmp(vname,"ram",3)) { - fvar=glob_script_mem.script_mem_size+(glob_script_mem.script_size)+(5*10); + fvar=glob_script_mem.script_mem_size+(glob_script_mem.script_size)+(PMEM_SIZE); goto exit; } break; @@ -3004,7 +3005,7 @@ void Scripter_save_pvars(void) { if (vtp[count].bits.is_permanent && !vtp[count].bits.is_string) { uint8_t index=vtp[count].index; mlen+=sizeof(float); - if (mlen>5*10) { + if (mlen>PMEM_SIZE) { vtp[count].bits.is_permanent=0; return; } @@ -3018,7 +3019,7 @@ void Scripter_save_pvars(void) { char *sp=glob_script_mem.glob_snp+(index*glob_script_mem.max_ssize); uint8_t slen=strlen(sp); mlen+=slen+1; - if (mlen>5*10) { + if (mlen>PMEM_SIZE) { vtp[count].bits.is_permanent=0; return; } @@ -4751,7 +4752,7 @@ bool Xdrv10(uint8_t function) glob_script_mem.script_size=MAX_SCRIPT_SIZE; glob_script_mem.flags=0; glob_script_mem.script_pram=(uint8_t*)Settings.script_pram[0]; - glob_script_mem.script_pram_size=5*10; + glob_script_mem.script_pram_size=PMEM_SIZE; #ifdef USE_BUTTON_EVENT for (uint32_t cnt=0;cnt Date: Wed, 25 Dec 2019 09:09:43 +0100 Subject: [PATCH 2/3] sml max vars for large meter definitions redefinable --- tasmota/xsns_53_sml.ino | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/tasmota/xsns_53_sml.ino b/tasmota/xsns_53_sml.ino index 7aa0fd22d..672f7f826 100755 --- a/tasmota/xsns_53_sml.ino +++ b/tasmota/xsns_53_sml.ino @@ -493,19 +493,19 @@ const uint8_t meter[]= //===================================================== // median filter eliminates outliers, but uses much RAM and CPU cycles -// 672 bytes extra RAM with MAX_VARS = 16 +// 672 bytes extra RAM with SML_MAX_VARS = 16 // default compile on, but must be enabled by descriptor flag 16 // may be undefined if RAM must be saved #define USE_SML_MEDIAN_FILTER // max number of vars , may be adjusted -#ifndef MAX_VARS -#define MAX_VARS 20 +#ifndef SML_MAX_VARS +#define SML_MAX_VARS 20 #endif // max number of meters , may be adjusted #define MAX_METERS 5 -double meter_vars[MAX_VARS]; +double meter_vars[SML_MAX_VARS]; // calulate deltas #define MAX_DVARS MAX_METERS*2 double dvalues[MAX_DVARS]; @@ -540,7 +540,7 @@ uint8_t sml_desc_cnt; struct SML_MEDIAN_FILTER { double buffer[MEDIAN_SIZE]; int8_t index; -} sml_mf[MAX_VARS]; +} sml_mf[SML_MAX_VARS]; #ifndef FLT_MAX #define FLT_MAX 99999999 @@ -1326,7 +1326,7 @@ void SML_Decode(uint8_t index) { uint32_t ind; ind=atoi(mp); while (*mp>='0' && *mp<='9') mp++; - if (ind<1 || ind>MAX_VARS) ind=1; + if (ind<1 || ind>SML_MAX_VARS) ind=1; dvar=meter_vars[ind-1]; for (uint8_t p=0;p<5;p++) { if (*mp=='@') { @@ -1345,7 +1345,7 @@ void SML_Decode(uint8_t index) { } ind=atoi(mp); while (*mp>='0' && *mp<='9') mp++; - if (ind<1 || ind>MAX_VARS) ind=1; + if (ind<1 || ind>SML_MAX_VARS) ind=1; switch (opr) { case '+': if (iflg) dvar+=ind; @@ -1381,7 +1381,7 @@ void SML_Decode(uint8_t index) { while (*mp==' ') mp++; uint8_t ind=atoi(mp); while (*mp>='0' && *mp<='9') mp++; - if (ind<1 || ind>MAX_VARS) ind=1; + if (ind<1 || ind>SML_MAX_VARS) ind=1; uint32_t delay=atoi(mp)*1000; uint32_t dtime=millis()-dtimes[dindex]; if (dtime>delay) { @@ -1604,7 +1604,7 @@ void SML_Decode(uint8_t index) { } nextsect: // next section - if (vindex Date: Wed, 25 Dec 2019 09:57:37 +0100 Subject: [PATCH 3/3] revert --- tasmota/settings.h | 2 +- tasmota/settings.ino | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tasmota/settings.h b/tasmota/settings.h index dfe35be60..eddc4f04b 100644 --- a/tasmota/settings.h +++ b/tasmota/settings.h @@ -421,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 - uint8_t script_pram[50]; // 7CE + 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 diff --git a/tasmota/settings.ino b/tasmota/settings.ino index 8181440d7..6412d3fc9 100644 --- a/tasmota/settings.ino +++ b/tasmota/settings.ino @@ -1378,6 +1378,11 @@ void SettingsDelta(void) 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]);