@@ -72,15 +72,15 @@ bool EnergyAccounting::update(AmsData* amsData) {
7272 this ->realtimeData ->currentHour = local.Hour ;
7373 this ->realtimeData ->currentDay = local.Day ;
7474 if (!load ()) {
75- data = { 6 , local.Month ,
75+ data = { 7 , local.Month ,
7676 0 , 0 , 0 , // Cost
7777 0 , 0 , 0 , // Income
7878 0 , 0 , 0 , // Last month import, export and accuracy
79- 0 , 0 , // Peak 1
80- 0 , 0 , // Peak 2
81- 0 , 0 , // Peak 3
82- 0 , 0 , // Peak 4
83- 0 , 0 // Peak 5
79+ 0 , 0 , 0 , // Peak 1
80+ 0 , 0 , 0 , // Peak 2
81+ 0 , 0 , 0 , // Peak 3
82+ 0 , 0 , 0 , // Peak 4
83+ 0 , 0 , 0 // Peak 5
8484 };
8585 }
8686 init = true ;
@@ -97,7 +97,7 @@ bool EnergyAccounting::update(AmsData* amsData) {
9797 uint16_t val = round (ds->getHourImport (oneHrAgo.Hour ) / 10.0 );
9898
9999 breakTime (tz->toLocal (now-3600 ), oneHrAgoLocal);
100- ret |= updateMax (val, oneHrAgoLocal.Day );
100+ ret |= updateMax (val, oneHrAgoLocal.Day , oneHrAgoLocal. Hour );
101101
102102 this ->realtimeData ->currentHour = local.Hour ; // Need to be defined here so that day cost is correctly calculated
103103 if (local.Hour > 0 ) {
@@ -407,85 +407,29 @@ bool EnergyAccounting::load() {
407407 char buf[file.size ()];
408408 file.readBytes (buf, file.size ());
409409
410- if (buf[0 ] == 6 ) {
410+ if (buf[0 ] == 7 ) {
411411 EnergyAccountingData* data = (EnergyAccountingData*) buf;
412412 memcpy (&this ->data , data, sizeof (this ->data ));
413413 ret = true ;
414- } else if (buf[0 ] == 5 ) {
415- EnergyAccountingData5* data = (EnergyAccountingData5*) buf;
416- this ->data = { 6 , data->month ,
417- ((uint32_t ) data->costYesterday ) * 10 ,
418- ((uint32_t ) data->costThisMonth ) * 100 ,
419- ((uint32_t ) data->costLastMonth ) * 100 ,
420- ((uint32_t ) data->incomeYesterday ) * 10 ,
421- ((uint32_t ) data->incomeThisMonth ) * 100 ,
422- ((uint32_t ) data->incomeLastMonth ) * 100 ,
423- 0 ,0 ,0 , // Last month import, export and accuracy
424- data->peaks [0 ].day , data->peaks [0 ].value ,
425- data->peaks [1 ].day , data->peaks [1 ].value ,
426- data->peaks [2 ].day , data->peaks [2 ].value ,
427- data->peaks [3 ].day , data->peaks [3 ].value ,
428- data->peaks [4 ].day , data->peaks [4 ].value
429- };
430- ret = true ;
431- } else if (buf[0 ] == 4 ) {
432- EnergyAccountingData4* data = (EnergyAccountingData4*) buf;
433- this ->data = { 5 , data->month ,
434- ((uint32_t ) data->costYesterday ) * 10 ,
435- ((uint32_t ) data->costThisMonth ) * 100 ,
436- ((uint32_t ) data->costLastMonth ) * 100 ,
437- 0 ,0 ,0 , // Income from production
438- 0 ,0 ,0 , // Last month import, export and accuracy
439- data->peaks [0 ].day , data->peaks [0 ].value ,
440- data->peaks [1 ].day , data->peaks [1 ].value ,
441- data->peaks [2 ].day , data->peaks [2 ].value ,
442- data->peaks [3 ].day , data->peaks [3 ].value ,
443- data->peaks [4 ].day , data->peaks [4 ].value
444- };
445- ret = true ;
446- } else if (buf[0 ] == 3 ) {
447- EnergyAccountingData* data = (EnergyAccountingData*) buf;
448- this ->data = { 5 , data->month ,
449- data->costYesterday * 10 ,
414+ } else if (buf[0 ] == 6 ) {
415+ EnergyAccountingData6* data = (EnergyAccountingData6*) buf;
416+ this ->data = { 7 , data->month ,
417+ data->costYesterday ,
450418 data->costThisMonth ,
451419 data->costLastMonth ,
452- 0 ,0 ,0 , // Income from production
453- 0 ,0 ,0 , // Last month import, export and accuracy
454- data->peaks [0 ].day , data->peaks [0 ].value ,
455- data->peaks [1 ].day , data->peaks [1 ].value ,
456- data->peaks [2 ].day , data->peaks [2 ].value ,
457- data->peaks [3 ].day , data->peaks [3 ].value ,
458- data->peaks [4 ].day , data->peaks [4 ].value
420+ data->incomeYesterday ,
421+ data->incomeThisMonth ,
422+ data->incomeLastMonth ,
423+ data->lastMonthImport ,
424+ data->lastMonthExport ,
425+ data->lastMonthAccuracy ,
426+ data->peaks [0 ].day , 0 , data->peaks [0 ].value ,
427+ data->peaks [1 ].day , 0 , data->peaks [1 ].value ,
428+ data->peaks [2 ].day , 0 , data->peaks [2 ].value ,
429+ data->peaks [3 ].day , 0 , data->peaks [3 ].value ,
430+ data->peaks [4 ].day , 0 , data->peaks [4 ].value
459431 };
460432 ret = true ;
461- } else {
462- data = { 5 , 0 ,
463- 0 , 0 , 0 , // Cost
464- 0 ,0 ,0 , // Income from production
465- 0 ,0 ,0 , // Last month import, export and accuracy
466- 0 , 0 , // Peak 1
467- 0 , 0 , // Peak 2
468- 0 , 0 , // Peak 3
469- 0 , 0 , // Peak 4
470- 0 , 0 // Peak 5
471- };
472- if (buf[0 ] == 2 ) {
473- EnergyAccountingData2* data = (EnergyAccountingData2*) buf;
474- this ->data .month = data->month ;
475- this ->data .costYesterday = data->costYesterday * 10 ;
476- this ->data .costThisMonth = data->costThisMonth ;
477- this ->data .costLastMonth = data->costLastMonth ;
478- uint8_t b = 0 ;
479- for (uint8_t i = sizeof (this ->data ); i < file.size (); i+=2 ) {
480- this ->data .peaks [b].day = b;
481- memcpy (&this ->data .peaks [b].value , buf+i, 2 );
482- b++;
483- if (b >= config->hours || b >= 5 ) break ;
484- }
485- ret = true ;
486- } else {
487- ret = false ;
488- }
489433 }
490434
491435 file.close ();
@@ -518,11 +462,12 @@ void EnergyAccounting::setData(EnergyAccountingData& data) {
518462 this ->data = data;
519463}
520464
521- bool EnergyAccounting::updateMax (uint16_t val, uint8_t day) {
465+ bool EnergyAccounting::updateMax (uint16_t val, uint8_t day, uint8_t hour ) {
522466 for (uint8_t i = 0 ; i < 5 ; i++) {
523467 if (data.peaks [i].day == day || data.peaks [i].day == 0 ) {
524468 if (val > data.peaks [i].value ) {
525469 data.peaks [i].day = day;
470+ data.peaks [i].hour = hour;
526471 data.peaks [i].value = val;
527472 return true ;
528473 }
0 commit comments