Timezone conversion for Kaifa

This commit is contained in:
Gunnar Skjold
2022-01-03 09:00:19 +01:00
parent 6d12d7120c
commit c543b38829

View File

@@ -7,6 +7,10 @@ IEC6205675::IEC6205675(const char* d, uint8_t useMeterType, CosemDateTime packag
double val; double val;
char str[64]; 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); this->packageTimestamp = getTimestamp(packageTimestamp);
ui = getNumber(AMS_OBIS_ACTIVE_IMPORT, sizeof(AMS_OBIS_ACTIVE_IMPORT), ((char *) (d))); 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) { switch(data->base.type) {
case CosemTypeOctetString: { case CosemTypeOctetString: {
if(data->oct.length == 0x0C) { if(data->oct.length == 0x0C) {
AmsOctetTimestamp* ts = (AmsOctetTimestamp*) data; AmsOctetTimestamp* amst = (AmsOctetTimestamp*) data;
meterTimestamp = getTimestamp(ts->dt); 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) { if(meterType == AmsTypeKamstrup || meterType == AmsTypeAidon) {
this->packageTimestamp = this->packageTimestamp > 0 ? tz.toUTC(this->packageTimestamp) : 0; 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) { if(meterTs != NULL) {
AmsOctetTimestamp* amst = (AmsOctetTimestamp*) meterTs; AmsOctetTimestamp* amst = (AmsOctetTimestamp*) meterTs;
time_t ts = getTimestamp(amst->dt); time_t ts = getTimestamp(amst->dt);
if(meterType == AmsTypeKamstrup || meterType == AmsTypeAidon) { meterTimestamp = ts;
this->meterTimestamp = tz.toUTC(ts);
} else {
meterTimestamp = ts;
}
} }
CosemData* mid = getCosemDataAt(58, ((char *) (d))); // TODO: Get last item CosemData* mid = getCosemDataAt(58, ((char *) (d))); // TODO: Get last item