Skip to content

Commit d7664c0

Browse files
committed
Remove zero values from SspmHistory
Remove zero values from SspmHistory (arendst#13447)
1 parent d09971e commit d7664c0

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

tasmota/xdrv_86_esp32_sonoff_spm.ino

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -849,10 +849,13 @@ void SSPMHandleReceivedData(void) {
849849
42 67 46
850850
*/
851851
{
852-
float energy_today = 0;
853-
float energy_yesterday = 0;
854-
float energy_total = 0;
855852
uint32_t entries = (Sspm->expected_bytes - 22) / 2;
853+
// Find last valid (= non-zero) entry in 6 month fifo buffer
854+
uint16_t energy = 0;
855+
while (!energy && --entries) {
856+
energy = SspmBuffer[41 + (entries *2)] + SspmBuffer[42 + (entries *2)];
857+
if (0x701E == energy) { energy = 0; } // Unknown why sometimes 0x701E (=112.30kWh) pops up
858+
}
856859

857860
uint32_t channel = SspmBuffer[32];
858861
uint32_t module = SSPMGetModuleNumberFromMap(SspmBuffer[20] << 8 | SspmBuffer[21]);
@@ -861,16 +864,17 @@ void SSPMHandleReceivedData(void) {
861864
uint32_t history_module = Sspm->history_relay >> 2;
862865
uint32_t history_channel = Sspm->history_relay & 0x03; // Channel relays are NOT bit masked this time
863866
if ((history_channel == channel) && (history_module == module)) {
864-
// uint32_t now = SspmBuffer[33] << 8 | SspmBuffer[34];
865-
uint32_t start = SspmBuffer[37] << 8 | SspmBuffer[38];
866-
Response_P(PSTR("{\"SSPMHistory%d\":{\"From\":\"%d-%02d-%02d\",\"DailyEnergy\":["),
867-
Sspm->history_relay +1, start, SspmBuffer[39], SspmBuffer[40]);
867+
Response_P(PSTR("{\"SSPMHistory%d\":["), Sspm->history_relay +1);
868868
} else {
869869
Sspm->history_relay = 255;
870870
}
871871
}
872872

873-
for (uint32_t i = 0; i < entries; i++) {
873+
float energy_today = 0;
874+
float energy_yesterday = 0;
875+
float energy_total = 0;
876+
877+
for (uint32_t i = 0; i <= entries; i++) {
874878
float today_energy = SspmBuffer[41 + (i*2)] + (float)SspmBuffer[42 + (i*2)] / 100; // x.xxkWh
875879
if (112.30 == today_energy) { today_energy = 0; } // Unknown why sometimes 0x701E (=112.30kWh) pops up
876880

@@ -888,7 +892,7 @@ void SSPMHandleReceivedData(void) {
888892
Sspm->energy_total[module][channel] = energy_total; // x.xxkWh
889893

890894
if (Sspm->history_relay < 255) {
891-
ResponseAppend_P(PSTR("]}}"));
895+
ResponseAppend_P(PSTR("]}"));
892896
MqttPublishPrefixTopicRulesProcess_P(RESULT_OR_STAT, PSTR("SSPMHistory"));
893897
Sspm->history_relay = 255; // Disable display energy history
894898
}

0 commit comments

Comments
 (0)