mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-14 15:54:47 +00:00
117 lines
2.7 KiB
C++
117 lines
2.7 KiB
C++
/**
|
|
* @copyright Utilitech AS 2023
|
|
* License: Fair Source
|
|
*
|
|
*/
|
|
|
|
#ifndef _AMSDATASTORAGE_H
|
|
#define _AMSDATASTORAGE_H
|
|
#include "Arduino.h"
|
|
#include "AmsData.h"
|
|
#if defined(AMS_REMOTE_DEBUG)
|
|
#include "RemoteDebug.h"
|
|
#endif
|
|
#include "Timezone.h"
|
|
|
|
struct DayDataPoints5 {
|
|
uint8_t version;
|
|
uint16_t hImport[24];
|
|
time_t lastMeterReadTime;
|
|
uint32_t activeImport;
|
|
uint32_t activeExport;
|
|
uint16_t hExport[24];
|
|
uint8_t accuracy;
|
|
};
|
|
|
|
struct MonthDataPoints6 {
|
|
uint8_t version;
|
|
uint16_t dImport[31];
|
|
time_t lastMeterReadTime;
|
|
uint32_t activeImport;
|
|
uint32_t activeExport;
|
|
uint16_t dExport[31];
|
|
uint8_t accuracy;
|
|
};
|
|
|
|
struct DayDataPoints {
|
|
uint8_t version;
|
|
uint16_t hImport[24];
|
|
time_t lastMeterReadTime;
|
|
uint64_t activeImport;
|
|
uint64_t activeExport;
|
|
uint16_t hExport[24];
|
|
uint8_t accuracy;
|
|
};
|
|
|
|
struct MonthDataPoints {
|
|
uint8_t version;
|
|
uint16_t dImport[31];
|
|
time_t lastMeterReadTime;
|
|
uint64_t activeImport;
|
|
uint64_t activeExport;
|
|
uint16_t dExport[31];
|
|
uint8_t accuracy;
|
|
};
|
|
|
|
class AmsDataStorage {
|
|
public:
|
|
#if defined(AMS_REMOTE_DEBUG)
|
|
AmsDataStorage(RemoteDebug*);
|
|
#else
|
|
AmsDataStorage(Stream*);
|
|
#endif
|
|
void setTimezone(Timezone*);
|
|
bool update(AmsData* data, time_t now);
|
|
uint32_t getHourImport(uint8_t);
|
|
uint32_t getHourExport(uint8_t);
|
|
uint32_t getDayImport(uint8_t);
|
|
uint32_t getDayExport(uint8_t);
|
|
bool load();
|
|
bool save();
|
|
|
|
DayDataPoints getDayData();
|
|
bool setDayData(DayDataPoints&);
|
|
MonthDataPoints getMonthData();
|
|
bool setMonthData(MonthDataPoints&);
|
|
|
|
uint8_t getDayAccuracy();
|
|
void setDayAccuracy(uint8_t);
|
|
uint8_t getMonthAccuracy();
|
|
void setMonthAccuracy(uint8_t);
|
|
|
|
bool isHappy(time_t now);
|
|
bool isDayHappy(time_t now);
|
|
bool isMonthHappy(time_t now);
|
|
|
|
double getEstimatedImportCounter();
|
|
|
|
void setHourImport(uint8_t, uint32_t);
|
|
void setHourExport(uint8_t, uint32_t);
|
|
void setDayImport(uint8_t, uint32_t);
|
|
void setDayExport(uint8_t, uint32_t);
|
|
|
|
private:
|
|
Timezone* tz;
|
|
DayDataPoints day = {
|
|
0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
10
|
|
};
|
|
MonthDataPoints month = {
|
|
0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
0, 0, 0,
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
10
|
|
};
|
|
#if defined(AMS_REMOTE_DEBUG)
|
|
RemoteDebug* debugger;
|
|
#else
|
|
Stream* debugger;
|
|
#endif
|
|
};
|
|
|
|
#endif
|