Fix SPM energy energy values

This commit is contained in:
Theo Arends 2021-12-06 10:57:25 +01:00
parent 7a5e3cd78e
commit 1a448ae364

View File

@ -50,7 +50,7 @@
* Gui for Overload Protection entry (is handled by ARM processor). * Gui for Overload Protection entry (is handled by ARM processor).
* Gui for Scheduling entry (is handled by ARM processor). * Gui for Scheduling entry (is handled by ARM processor).
* Yellow led functionality. * Yellow led functionality.
* Interpretation of reset sequence on GPIO's 12-14. * SPI master to ARM (ARM firmware upload from ESP using EasyFlash).
* *
* Nice to have: * Nice to have:
* Support for all 32 SPM4Relay units equals 128 relays * Support for all 32 SPM4Relay units equals 128 relays
@ -61,9 +61,9 @@
* GPIO03 - Serial console RX * GPIO03 - Serial console RX
* GPIO04 - ARM processor TX (115200bps8N1) * GPIO04 - ARM processor TX (115200bps8N1)
* GPIO05 - ETH POWER * GPIO05 - ETH POWER
* GPIO12 - SPI MISO ARM pulsetrain code (input?) * GPIO12 - SPI MOSI ARM output (pin36 - PB15) - ESP input
* GPIO13 - SPI CLK * GPIO13 - SPI MISO ESP output - ARM input (pin35 - PB14)
* GPIO14 - SPI CS ARM pulsetrain eoc (input?) * GPIO14 - SPI CLK ESP input (ARM pin34 - PB13)
* GPIO15 - ARM reset (output) - 18ms low active 125ms after restart esp32 * GPIO15 - ARM reset (output) - 18ms low active 125ms after restart esp32
* GPIO16 - ARM processor RX * GPIO16 - ARM processor RX
* GPIO17 - EMAC_CLK_OUT_180 * GPIO17 - EMAC_CLK_OUT_180
@ -116,6 +116,7 @@
#define SSPM_FUNC_GET_ENERGY 24 // 0x18 #define SSPM_FUNC_GET_ENERGY 24 // 0x18
#define SSPM_FUNC_GET_LOG 26 // 0x1A #define SSPM_FUNC_GET_LOG 26 // 0x1A
#define SSPM_FUNC_ENERGY_PERIOD 27 // 0x1B #define SSPM_FUNC_ENERGY_PERIOD 27 // 0x1B
#define SSPM_FUNC_RESET 28 // 0x1C - Remove device from eWelink and factory reset
// Receive // Receive
#define SSPM_FUNC_ENERGY_RESULT 6 // 0x06 #define SSPM_FUNC_ENERGY_RESULT 6 // 0x06
@ -667,9 +668,9 @@ void SSPMHandleReceivedData(void) {
03 <- L4 03 <- L4
07 e5 0b 0d <- End date (Today) 2021 nov 13 07 e5 0b 0d <- End date (Today) 2021 nov 13
07 e5 05 11 <- Start date 2021 may 17 07 e5 05 11 <- Start date 2021 may 17
00 05 <- 5kWh (13/11 Today) 00 05 <- 0.05kWh (13/11 Today)
00 00 <- 0 (12/11 Yesterday) 00 00 <- 0 (12/11 Yesterday)
00 04 <- 4kWh (11/11 etc) 00 04 <- 0.04kWh (11/11 etc)
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
@ -679,14 +680,14 @@ void SSPMHandleReceivedData(void) {
42 67 46 42 67 46
*/ */
{ {
uint32_t energy_today = 0; float energy_today = 0;
uint32_t energy_yesterday = 0; float energy_yesterday = 0;
uint32_t energy_total = 0; float energy_total = 0;
uint32_t entries = (Sspm->expected_bytes - 22) / 2; uint32_t entries = (Sspm->expected_bytes - 22) / 2;
for (uint32_t i = 0; i < entries; i++) { for (uint32_t i = 0; i < entries; i++) {
uint32_t today_energy = (SspmBuffer[41 + (i*2)] << 8) + SspmBuffer[42 + (i*2)]; float today_energy = SspmBuffer[41 + (i*2)] + (float)SspmBuffer[42 + (i*2)] / 100; // x.xxkWh
if (28702 == today_energy) { today_energy = 0; } // Unknown why sometimes 0x701E (=28702kWh) pops up if (112.30 == today_energy) { today_energy = 0; } // Unknown why sometimes 0x701E (=112.30kWh) pops up
if (0 == i) { energy_today = today_energy; } if (0 == i) { energy_today = today_energy; }
if (1 == i) { energy_yesterday = today_energy; } if (1 == i) { energy_yesterday = today_energy; }
energy_total += today_energy; energy_total += today_energy;
@ -696,7 +697,7 @@ void SSPMHandleReceivedData(void) {
if ((SspmBuffer[20] == Sspm->module[module][0]) && (SspmBuffer[21] == Sspm->module[module][1])) { if ((SspmBuffer[20] == Sspm->module[module][0]) && (SspmBuffer[21] == Sspm->module[module][1])) {
Sspm->energy_today[module][channel] = energy_today; Sspm->energy_today[module][channel] = energy_today;
Sspm->energy_yesterday[module][channel] = energy_yesterday; Sspm->energy_yesterday[module][channel] = energy_yesterday;
Sspm->energy_total[module][channel] = energy_total; // xkWh Sspm->energy_total[module][channel] = energy_total; // x.xxkWh
break; break;
} }
} }
@ -705,7 +706,7 @@ void SSPMHandleReceivedData(void) {
break; break;
case SSPM_FUNC_GET_LOG: case SSPM_FUNC_GET_LOG:
/* 0x1A /* 0x1A
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
AA 55 01 00 00 00 00 00 00 00 00 00 00 00 00 80 1a 01 3a 00 6b 7e 32 37 39 37 34 13 4b 35 36 37 AA 55 01 00 00 00 00 00 00 00 00 00 00 00 00 80 1a 01 3a 00 6b 7e 32 37 39 37 34 13 4b 35 36 37
1e Number of log entries (1e = 30) 1e Number of log entries (1e = 30)
07 e5 0b 06 0f 25 19 02 01 00 10 byte log entry 07 e5 0b 06 0f 25 19 02 01 00 10 byte log entry
@ -730,6 +731,10 @@ void SSPMHandleReceivedData(void) {
07 e5 0b 06 0e 36 37 01 01 00 07 e5 0b 06 0e 36 37 01 01 00
... ...
07 e5 0b 06 0d 30 2d 03 00 01 09 89 fe 07 e5 0b 06 0d 30 2d 03 00 01 09 89 fe
Error:
AA 55 01 00 00 00 00 00 00 00 00 00 00 00 00 80 1A 00 01 03 E5 45 EB
| |
*/ */
break; break;
@ -920,7 +925,7 @@ void SSPMInit(void) {
Settings->flag2.voltage_resolution = 1; // SPM has 2 decimals but this keeps the gui clean Settings->flag2.voltage_resolution = 1; // SPM has 2 decimals but this keeps the gui clean
Settings->flag2.current_resolution = 2; // SPM has 2 decimals Settings->flag2.current_resolution = 2; // SPM has 2 decimals
Settings->flag2.wattage_resolution = 1; // SPM has 2 decimals but this keeps the gui clean Settings->flag2.wattage_resolution = 1; // SPM has 2 decimals but this keeps the gui clean
Settings->flag2.energy_resolution = 0; // SPM has no decimals on total energy Settings->flag2.energy_resolution = 1; // SPM has 2 decimals but this keeps the gui clean
} }
#if CONFIG_IDF_TARGET_ESP32 #if CONFIG_IDF_TARGET_ESP32
@ -1113,18 +1118,18 @@ void SSPMEnergyShow(bool json) {
if (json) { if (json) {
ResponseAppend_P(PSTR(",\"SPM\":{\"" D_JSON_ENERGY "\":[")); ResponseAppend_P(PSTR(",\"SPM\":{\"" D_JSON_ENERGY "\":["));
for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) { for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) {
ResponseAppend_P(PSTR("%s%*_f"), (i>0)?",":"", -1, &Sspm->energy_total[i >>2][i &3]); ResponseAppend_P(PSTR("%s%*_f"), (i>0)?",":"", Settings->flag2.energy_resolution, &Sspm->energy_total[i >>2][i &3]);
} }
#ifdef SSPM_JSON_ENERGY_YESTERDAY #ifdef SSPM_JSON_ENERGY_YESTERDAY
ResponseAppend_P(PSTR("],\"" D_JSON_YESTERDAY "\":[")); ResponseAppend_P(PSTR("],\"" D_JSON_YESTERDAY "\":["));
for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) { for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) {
ResponseAppend_P(PSTR("%s%*_f"), (i>0)?",":"", -1, &Sspm->energy_yesterday[i >>2][i &3]); ResponseAppend_P(PSTR("%s%*_f"), (i>0)?",":"", Settings->flag2.energy_resolution, &Sspm->energy_yesterday[i >>2][i &3]);
} }
#endif #endif
#ifdef SSPM_JSON_ENERGY_TODAY #ifdef SSPM_JSON_ENERGY_TODAY
ResponseAppend_P(PSTR("],\"" D_JSON_TODAY "\":[")); ResponseAppend_P(PSTR("],\"" D_JSON_TODAY "\":["));
for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) { for (uint32_t i = 0; i < TasmotaGlobal.devices_present; i++) {
ResponseAppend_P(PSTR("%s%*_f"), (i>0)?",":"", -1, &Sspm->energy_today[i >>2][i &3]); ResponseAppend_P(PSTR("%s%*_f"), (i>0)?",":"", Settings->flag2.energy_resolution, &Sspm->energy_today[i >>2][i &3]);
} }
#endif #endif
ResponseAppend_P(PSTR("],\"" D_JSON_ACTIVE_POWERUSAGE "\":[")); ResponseAppend_P(PSTR("],\"" D_JSON_ACTIVE_POWERUSAGE "\":["));