From c543b38829d88a93ef01ff53efbd92b47b625b8b Mon Sep 17 00:00:00 2001 From: Gunnar Skjold Date: Mon, 3 Jan 2022 09:00:19 +0100 Subject: [PATCH] Timezone conversion for Kaifa --- src/IEC6205675.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/IEC6205675.cpp b/src/IEC6205675.cpp index 3b4134eb..013e40b3 100644 --- a/src/IEC6205675.cpp +++ b/src/IEC6205675.cpp @@ -7,6 +7,10 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, CosemDateTime packag double val; char str[64]; + TimeChangeRule CEST = {"CEST", Last, Sun, Mar, 2, 120}; + TimeChangeRule CET = {"CET ", Last, Sun, Oct, 3, 60}; + Timezone tz(CEST, CET); + this->packageTimestamp = getTimestamp(packageTimestamp); ui = getNumber(AMS_OBIS_ACTIVE_IMPORT, sizeof(AMS_OBIS_ACTIVE_IMPORT), ((char *) (d))); @@ -96,8 +100,13 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, CosemDateTime packag switch(data->base.type) { case CosemTypeOctetString: { if(data->oct.length == 0x0C) { - AmsOctetTimestamp* ts = (AmsOctetTimestamp*) data; - meterTimestamp = getTimestamp(ts->dt); + AmsOctetTimestamp* amst = (AmsOctetTimestamp*) data; + time_t ts = getTimestamp(amst->dt); + if(meterType == AmsTypeKamstrup || meterType == AmsTypeAidon) { + this->meterTimestamp = tz.toUTC(ts); + } else { + meterTimestamp = ts; + } } } } @@ -149,10 +158,6 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, CosemDateTime packag } } - TimeChangeRule CEST = {"CEST", Last, Sun, Mar, 2, 120}; - TimeChangeRule CET = {"CET ", Last, Sun, Oct, 3, 60}; - Timezone tz(CEST, CET); - if(meterType == AmsTypeKamstrup || meterType == AmsTypeAidon) { this->packageTimestamp = this->packageTimestamp > 0 ? tz.toUTC(this->packageTimestamp) : 0; } @@ -295,11 +300,7 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, CosemDateTime packag if(meterTs != NULL) { AmsOctetTimestamp* amst = (AmsOctetTimestamp*) meterTs; time_t ts = getTimestamp(amst->dt); - if(meterType == AmsTypeKamstrup || meterType == AmsTypeAidon) { - this->meterTimestamp = tz.toUTC(ts); - } else { - meterTimestamp = ts; - } + meterTimestamp = ts; } CosemData* mid = getCosemDataAt(58, ((char *) (d))); // TODO: Get last item