mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-24 11:16:34 +00:00
Fix SPM energy energy values
This commit is contained in:
parent
7a5e3cd78e
commit
1a448ae364
@ -50,7 +50,7 @@
|
||||
* Gui for Overload Protection entry (is handled by ARM processor).
|
||||
* Gui for Scheduling entry (is handled by ARM processor).
|
||||
* 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:
|
||||
* Support for all 32 SPM4Relay units equals 128 relays
|
||||
@ -61,9 +61,9 @@
|
||||
* GPIO03 - Serial console RX
|
||||
* GPIO04 - ARM processor TX (115200bps8N1)
|
||||
* GPIO05 - ETH POWER
|
||||
* GPIO12 - SPI MISO ARM pulsetrain code (input?)
|
||||
* GPIO13 - SPI CLK
|
||||
* GPIO14 - SPI CS ARM pulsetrain eoc (input?)
|
||||
* GPIO12 - SPI MOSI ARM output (pin36 - PB15) - ESP input
|
||||
* GPIO13 - SPI MISO ESP output - ARM input (pin35 - PB14)
|
||||
* GPIO14 - SPI CLK ESP input (ARM pin34 - PB13)
|
||||
* GPIO15 - ARM reset (output) - 18ms low active 125ms after restart esp32
|
||||
* GPIO16 - ARM processor RX
|
||||
* GPIO17 - EMAC_CLK_OUT_180
|
||||
@ -116,6 +116,7 @@
|
||||
#define SSPM_FUNC_GET_ENERGY 24 // 0x18
|
||||
#define SSPM_FUNC_GET_LOG 26 // 0x1A
|
||||
#define SSPM_FUNC_ENERGY_PERIOD 27 // 0x1B
|
||||
#define SSPM_FUNC_RESET 28 // 0x1C - Remove device from eWelink and factory reset
|
||||
|
||||
// Receive
|
||||
#define SSPM_FUNC_ENERGY_RESULT 6 // 0x06
|
||||
@ -667,9 +668,9 @@ void SSPMHandleReceivedData(void) {
|
||||
03 <- L4
|
||||
07 e5 0b 0d <- End date (Today) 2021 nov 13
|
||||
07 e5 05 11 <- Start date 2021 may 17
|
||||
00 05 <- 5kWh (13/11 Today)
|
||||
00 00 <- 0 (12/11 Yesterday)
|
||||
00 04 <- 4kWh (11/11 etc)
|
||||
00 05 <- 0.05kWh (13/11 Today)
|
||||
00 00 <- 0 (12/11 Yesterday)
|
||||
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
|
||||
@ -679,14 +680,14 @@ void SSPMHandleReceivedData(void) {
|
||||
42 67 46
|
||||
*/
|
||||
{
|
||||
uint32_t energy_today = 0;
|
||||
uint32_t energy_yesterday = 0;
|
||||
uint32_t energy_total = 0;
|
||||
float energy_today = 0;
|
||||
float energy_yesterday = 0;
|
||||
float energy_total = 0;
|
||||
uint32_t entries = (Sspm->expected_bytes - 22) / 2;
|
||||
|
||||
for (uint32_t i = 0; i < entries; i++) {
|
||||
uint32_t today_energy = (SspmBuffer[41 + (i*2)] << 8) + SspmBuffer[42 + (i*2)];
|
||||
if (28702 == today_energy) { today_energy = 0; } // Unknown why sometimes 0x701E (=28702kWh) pops up
|
||||
float today_energy = SspmBuffer[41 + (i*2)] + (float)SspmBuffer[42 + (i*2)] / 100; // x.xxkWh
|
||||
if (112.30 == today_energy) { today_energy = 0; } // Unknown why sometimes 0x701E (=112.30kWh) pops up
|
||||
if (0 == i) { energy_today = today_energy; }
|
||||
if (1 == i) { energy_yesterday = 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])) {
|
||||
Sspm->energy_today[module][channel] = energy_today;
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -705,7 +706,7 @@ void SSPMHandleReceivedData(void) {
|
||||
break;
|
||||
case SSPM_FUNC_GET_LOG:
|
||||
/* 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
|
||||
1e Number of log entries (1e = 30)
|
||||
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 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;
|
||||
@ -920,7 +925,7 @@ void SSPMInit(void) {
|
||||
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.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
|
||||
@ -1113,18 +1118,18 @@ void SSPMEnergyShow(bool json) {
|
||||
if (json) {
|
||||
ResponseAppend_P(PSTR(",\"SPM\":{\"" D_JSON_ENERGY "\":["));
|
||||
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
|
||||
ResponseAppend_P(PSTR("],\"" D_JSON_YESTERDAY "\":["));
|
||||
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
|
||||
#ifdef SSPM_JSON_ENERGY_TODAY
|
||||
ResponseAppend_P(PSTR("],\"" D_JSON_TODAY "\":["));
|
||||
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
|
||||
ResponseAppend_P(PSTR("],\"" D_JSON_ACTIVE_POWERUSAGE "\":["));
|
||||
|
Loading…
x
Reference in New Issue
Block a user