mirror of
https://github.com/UtilitechAS/amsreader-firmware.git
synced 2026-01-17 09:02:11 +00:00
75 lines
1.6 KiB
C++
75 lines
1.6 KiB
C++
/**
|
|
* @copyright Utilitech AS 2023
|
|
* License: Fair Source
|
|
*
|
|
*/
|
|
|
|
#ifndef _PRICESERVICE_H
|
|
#define _PRICESERVICE_H
|
|
|
|
#include "TimeLib.h"
|
|
#include "Timezone.h"
|
|
#include "RemoteDebug.h"
|
|
#include "AmsConfiguration.h"
|
|
#include "EntsoeA44Parser.h"
|
|
|
|
#if defined(ESP8266)
|
|
#include <ESP8266HTTPClient.h>
|
|
#elif defined(ESP32) // ARDUINO_ARCH_ESP32
|
|
#include <HTTPClient.h>
|
|
#else
|
|
#warning "Unsupported board type"
|
|
#endif
|
|
|
|
#define SSL_BUF_SIZE 512
|
|
|
|
class PriceService {
|
|
public:
|
|
PriceService(RemoteDebug*);
|
|
void setup(PriceServiceConfig&);
|
|
bool loop();
|
|
|
|
char* getToken();
|
|
char* getCurrency();
|
|
char* getArea();
|
|
char* getSource();
|
|
float getValueForHour(int8_t);
|
|
float getValueForHour(time_t, int8_t);
|
|
|
|
int16_t getLastError();
|
|
|
|
private:
|
|
RemoteDebug* debugger;
|
|
PriceServiceConfig* config = NULL;
|
|
HTTPClient* http = NULL;
|
|
|
|
uint8_t currentDay = 0, currentHour = 0;
|
|
uint8_t tomorrowFetchMinute = 15; // How many minutes over 13:00 should it fetch prices
|
|
uint8_t nextFetchDelayMinutes = 15;
|
|
uint64_t lastTodayFetch = 0;
|
|
uint64_t lastTomorrowFetch = 0;
|
|
uint64_t lastCurrencyFetch = 0;
|
|
PricesContainer* today = NULL;
|
|
PricesContainer* tomorrow = NULL;
|
|
|
|
Timezone* tz = NULL;
|
|
|
|
static const uint16_t BufferSize = 256;
|
|
char* buf;
|
|
|
|
bool hub = false;
|
|
uint8_t* key = NULL;
|
|
uint8_t* auth = NULL;
|
|
|
|
float currencyMultiplier = 0;
|
|
|
|
int16_t lastError = 0;
|
|
|
|
PricesContainer* fetchPrices(time_t);
|
|
bool retrieve(const char* url, Stream* doc);
|
|
float getCurrencyMultiplier(const char* from, const char* to, time_t t);
|
|
|
|
void debugPrint(byte *buffer, int start, int length);
|
|
};
|
|
#endif
|