@@ -849,10 +849,13 @@ void SSPMHandleReceivedData(void) {
849
849
42 67 46
850
850
*/
851
851
{
852
- float energy_today = 0 ;
853
- float energy_yesterday = 0 ;
854
- float energy_total = 0 ;
855
852
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
+ }
856
859
857
860
uint32_t channel = SspmBuffer[32 ];
858
861
uint32_t module = SSPMGetModuleNumberFromMap (SspmBuffer[20 ] << 8 | SspmBuffer[21 ]);
@@ -861,16 +864,17 @@ void SSPMHandleReceivedData(void) {
861
864
uint32_t history_module = Sspm->history_relay >> 2 ;
862
865
uint32_t history_channel = Sspm->history_relay & 0x03 ; // Channel relays are NOT bit masked this time
863
866
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 );
868
868
} else {
869
869
Sspm->history_relay = 255 ;
870
870
}
871
871
}
872
872
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++) {
874
878
float today_energy = SspmBuffer[41 + (i*2 )] + (float )SspmBuffer[42 + (i*2 )] / 100 ; // x.xxkWh
875
879
if (112.30 == today_energy) { today_energy = 0 ; } // Unknown why sometimes 0x701E (=112.30kWh) pops up
876
880
@@ -888,7 +892,7 @@ void SSPMHandleReceivedData(void) {
888
892
Sspm->energy_total [module ][channel] = energy_total; // x.xxkWh
889
893
890
894
if (Sspm->history_relay < 255 ) {
891
- ResponseAppend_P (PSTR (" ]}} " ));
895
+ ResponseAppend_P (PSTR (" ]}" ));
892
896
MqttPublishPrefixTopicRulesProcess_P (RESULT_OR_STAT, PSTR (" SSPMHistory" ));
893
897
Sspm->history_relay = 255 ; // Disable display energy history
894
898
}
0 commit comments