Fixed cheapest price calculation

This commit is contained in:
Gunnar Skjold
2021-03-17 20:17:36 +01:00
parent 90d03ca77f
commit 9946827431
3 changed files with 23 additions and 12 deletions

View File

@@ -410,7 +410,7 @@ void loop() {
mqtt.disconnect();
}
if(eapi != NULL) {
if(eapi != NULL && ntpEnabled) {
if(eapi->loop() && mqttHandler != NULL && mqtt.connected()) {
mqttHandler->publishPrices(eapi);
}

View File

@@ -78,9 +78,13 @@ bool EntsoeApi::loop() {
bool ret = false;
uint64_t now = millis64();
if(now < 10000) return false; // Grace period
if(midnightMillis == 0) {
time_t epoch = tz->toLocal(time(nullptr));
time_t t = time(nullptr);
if(t <= 0) return false; // NTP not ready
time_t epoch = tz->toLocal(t);
tmElements_t tm;
breakTime(epoch, tm);

View File

@@ -85,13 +85,14 @@ bool RawMqttHandler::publishPrices(EntsoeApi* eapi) {
time_t now = time(nullptr);
float min1hr, min3hr, min6hr;
uint8_t min1hrIdx = -1, min3hrIdx = -1, min6hrIdx = -1;
int8_t min1hrIdx = -1, min3hrIdx = -1, min6hrIdx = -1;
float min = INT16_MAX, max = INT16_MIN;
float values[24] = {0};
for(uint8_t i = 0; i < 24; i++) {
float values[34] = {0};
for(uint8_t i = 0; i < 34; i++) {
float val = eapi->getValueForHour(now, i);
values[i] = val;
if(i > 23) continue;
if(val == ENTSOE_NO_VALUE) break;
if(val < min) min = val;
@@ -134,25 +135,31 @@ bool RawMqttHandler::publishPrices(EntsoeApi* eapi) {
}
char ts1hr[21];
if(min1hrIdx != -1) {
if(min1hrIdx > -1) {
time_t ts = now + (SECS_PER_HOUR * min1hrIdx);
//Serial.printf("1hr: %d %lu\n", min1hrIdx, ts);
tmElements_t tm;
breakTime(now + (SECS_PER_HOUR * min1hrIdx), tm);
breakTime(ts, tm);
sprintf(ts1hr, "%04d-%02d-%02dT%02d:00:00Z", tm.Year+1970, tm.Month, tm.Day, tm.Hour);
}
char ts3hr[21];
if(min3hrIdx != -1) {
if(min3hrIdx > -1) {
time_t ts = now + (SECS_PER_HOUR * min3hrIdx);
//Serial.printf("3hr: %d %lu\n", min3hrIdx, ts);
tmElements_t tm;
breakTime(now + (SECS_PER_HOUR * min3hrIdx), tm);
breakTime(ts, tm);
sprintf(ts3hr, "%04d-%02d-%02dT%02d:00:00Z", tm.Year+1970, tm.Month, tm.Day, tm.Hour);
}
char ts6hr[21];
if(min6hrIdx != -1) {
if(min6hrIdx > -1) {
time_t ts = now + (SECS_PER_HOUR * min6hrIdx);
//Serial.printf("6hr: %d %lu\n", min6hrIdx, ts);
tmElements_t tm;
breakTime(now + (SECS_PER_HOUR * min6hrIdx), tm);
breakTime(ts, tm);
sprintf(ts6hr, "%04d-%02d-%02dT%02d:00:00Z", tm.Year+1970, tm.Month, tm.Day, tm.Hour);
}
for(int i = 0; i < 24; i++) {
for(int i = 0; i < 34; i++) {
float val = values[i];
if(val == ENTSOE_NO_VALUE) {
mqtt->publish(topic + "/price/" + String(i), "", true, 0);