mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-23 02:36:35 +00:00
fix sml calculate vars option (=m)
This commit is contained in:
parent
c3c0a06961
commit
ec330d70f8
@ -1296,6 +1296,7 @@ void sml_shift_in(uint32_t meters,uint32_t shard) {
|
|||||||
}
|
}
|
||||||
} else if (meter_desc_p[meters].type=='v') {
|
} else if (meter_desc_p[meters].type=='v') {
|
||||||
if (iob==EBUS_SYNC) {
|
if (iob==EBUS_SYNC) {
|
||||||
|
sb_counter = 0;
|
||||||
SML_Decode(meters);
|
SML_Decode(meters);
|
||||||
smltbuf[meters][0] = iob;
|
smltbuf[meters][0] = iob;
|
||||||
meter_spos[meters] = 1;
|
meter_spos[meters] = 1;
|
||||||
@ -1385,6 +1386,7 @@ void SML_Decode(uint8_t index) {
|
|||||||
uint8_t *cp;
|
uint8_t *cp;
|
||||||
uint8_t dindex = 0, vindex = 0;
|
uint8_t dindex = 0, vindex = 0;
|
||||||
delay(0);
|
delay(0);
|
||||||
|
|
||||||
while (mp != NULL) {
|
while (mp != NULL) {
|
||||||
// check list of defines
|
// check list of defines
|
||||||
if (*mp == 0) break;
|
if (*mp == 0) break;
|
||||||
@ -1418,17 +1420,17 @@ void SML_Decode(uint8_t index) {
|
|||||||
// 1. index
|
// 1. index
|
||||||
double dvar;
|
double dvar;
|
||||||
uint8_t opr;
|
uint8_t opr;
|
||||||
uint32_t ind;
|
uint8_t mind;
|
||||||
ind=atoi(mp);
|
int32_t ind;
|
||||||
while (*mp>='0' && *mp<='9') mp++;
|
mind = strtol((char*)mp, (char**)&mp, 10);
|
||||||
if (ind<1 || ind>SML_MAX_VARS) ind=1;
|
if (mind < 1 || mind > SML_MAX_VARS) mind = 1;
|
||||||
dvar=meter_vars[ind-1];
|
dvar = meter_vars[mind - 1];
|
||||||
for (uint8_t p = 0; p < 5; p++) {
|
while (*mp==' ') mp++;
|
||||||
|
for (uint8_t p = 0; p < 8; p++) {
|
||||||
if (*mp == '@') {
|
if (*mp == '@') {
|
||||||
// store result
|
// store result
|
||||||
meter_vars[vindex] = dvar;
|
meter_vars[vindex] = dvar;
|
||||||
mp++;
|
mp++;
|
||||||
SML_Immediate_MQTT((const char*)mp,vindex,mindex);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
opr = *mp;
|
opr = *mp;
|
||||||
@ -1438,25 +1440,25 @@ void SML_Decode(uint8_t index) {
|
|||||||
iflg = 1;
|
iflg = 1;
|
||||||
mp++;
|
mp++;
|
||||||
}
|
}
|
||||||
ind=atoi(mp);
|
ind = strtol((char*)mp, (char**)&mp, 10);
|
||||||
while (*mp>='0' && *mp<='9') mp++;
|
mind = ind;
|
||||||
if (ind<1 || ind>SML_MAX_VARS) ind=1;
|
if (mind < 1 || mind > SML_MAX_VARS) mind = 1;
|
||||||
switch (opr) {
|
switch (opr) {
|
||||||
case '+':
|
case '+':
|
||||||
if (iflg) dvar += ind;
|
if (iflg) dvar += ind;
|
||||||
else dvar+=meter_vars[ind-1];
|
else dvar += meter_vars[mind - 1];
|
||||||
break;
|
break;
|
||||||
case '-':
|
case '-':
|
||||||
if (iflg) dvar -= ind;
|
if (iflg) dvar -= ind;
|
||||||
else dvar-=meter_vars[ind-1];
|
else dvar -= meter_vars[mind - 1];
|
||||||
break;
|
break;
|
||||||
case '*':
|
case '*':
|
||||||
if (iflg) dvar *= ind;
|
if (iflg) dvar *= ind;
|
||||||
else dvar*=meter_vars[ind-1];
|
else dvar *= meter_vars[mind - 1];
|
||||||
break;
|
break;
|
||||||
case '/':
|
case '/':
|
||||||
if (iflg) dvar /= ind;
|
if (iflg) dvar /= ind;
|
||||||
else dvar/=meter_vars[ind-1];
|
else dvar /= meter_vars[mind - 1];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
while (*mp==' ') mp++;
|
while (*mp==' ') mp++;
|
||||||
@ -1464,10 +1466,13 @@ void SML_Decode(uint8_t index) {
|
|||||||
// store result
|
// store result
|
||||||
meter_vars[vindex] = dvar;
|
meter_vars[vindex] = dvar;
|
||||||
mp++;
|
mp++;
|
||||||
SML_Immediate_MQTT((const char*)mp,vindex,mindex);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
double fac = CharToDouble((char*)mp);
|
||||||
|
meter_vars[vindex] /= fac;
|
||||||
|
SML_Immediate_MQTT((const char*)mp, vindex, mindex);
|
||||||
|
// get sfac
|
||||||
} else if (*mp=='d') {
|
} else if (*mp=='d') {
|
||||||
// calc deltas d ind 10 (eg every 10 secs)
|
// calc deltas d ind 10 (eg every 10 secs)
|
||||||
if (dindex < MAX_DVARS) {
|
if (dindex < MAX_DVARS) {
|
||||||
@ -1489,6 +1494,8 @@ void SML_Decode(uint8_t index) {
|
|||||||
mp=strchr(mp,'@');
|
mp=strchr(mp,'@');
|
||||||
if (mp) {
|
if (mp) {
|
||||||
mp++;
|
mp++;
|
||||||
|
double fac = CharToDouble((char*)mp);
|
||||||
|
meter_vars[vindex] /= fac;
|
||||||
SML_Immediate_MQTT((const char*)mp, vindex, mindex);
|
SML_Immediate_MQTT((const char*)mp, vindex, mindex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1953,6 +1960,12 @@ void SML_Show(boolean json) {
|
|||||||
} else {
|
} else {
|
||||||
mid=0;
|
mid=0;
|
||||||
}
|
}
|
||||||
|
} else if (*cp=='b') {
|
||||||
|
// bit value
|
||||||
|
#ifdef SML_BIT_TEXT
|
||||||
|
sprintf_P(tpowstr, PSTR("\"%s\""), (uint8_t)meter_vars[index]?D_ON:D_OFF);
|
||||||
|
mid = 2;
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
mid = 0;
|
mid = 0;
|
||||||
}
|
}
|
||||||
@ -2721,7 +2734,7 @@ uint8_t sml_hexnibble(char chr) {
|
|||||||
|
|
||||||
// send sequence every N Seconds
|
// send sequence every N Seconds
|
||||||
void SML_Send_Seq(uint32_t meter,char *seq) {
|
void SML_Send_Seq(uint32_t meter,char *seq) {
|
||||||
uint8_t sbuff[32];
|
uint8_t sbuff[48];
|
||||||
uint8_t *ucp = sbuff, slen = 0;
|
uint8_t *ucp = sbuff, slen = 0;
|
||||||
char *cp = seq;
|
char *cp = seq;
|
||||||
uint8_t rflg = 0;
|
uint8_t rflg = 0;
|
||||||
@ -2736,7 +2749,7 @@ void SML_Send_Seq(uint32_t meter,char *seq) {
|
|||||||
cp += 2;
|
cp += 2;
|
||||||
*ucp++ = iob;
|
*ucp++ = iob;
|
||||||
slen++;
|
slen++;
|
||||||
if (slen>=sizeof(sbuff)) break;
|
if (slen >= sizeof(sbuff)-6) break; // leave space for checksum
|
||||||
}
|
}
|
||||||
if (script_meter_desc[meter].type == 'm' || script_meter_desc[meter].type == 'M') {
|
if (script_meter_desc[meter].type == 'm' || script_meter_desc[meter].type == 'M') {
|
||||||
if (!rflg) {
|
if (!rflg) {
|
||||||
@ -2766,10 +2779,14 @@ void SML_Send_Seq(uint32_t meter,char *seq) {
|
|||||||
}
|
}
|
||||||
meter_ss[meter]->write(sbuff, slen);
|
meter_ss[meter]->write(sbuff, slen);
|
||||||
if (dump2log) {
|
if (dump2log) {
|
||||||
|
#ifdef SML_DUMP_OUT_ALL
|
||||||
|
Hexdump(sbuff, slen);
|
||||||
|
#else
|
||||||
uint8_t type = meter_desc_p[(dump2log&7) - 1].type;
|
uint8_t type = meter_desc_p[(dump2log&7) - 1].type;
|
||||||
if (type == 'm' || type == 'M') {
|
if (type == 'm' || type == 'M') {
|
||||||
Hexdump(sbuff, slen);
|
Hexdump(sbuff, slen);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user