Compare commits

...

1 Commits

Author SHA1 Message Date
Gunnar Skjold
271ce2081f Fixed reboot loop for some meters (#1075) 2025-12-05 10:02:59 +01:00
4 changed files with 12 additions and 5 deletions

View File

@@ -36,6 +36,9 @@ public:
bool isConfigChanged(); bool isConfigChanged();
void ackConfigChanged(); void ackConfigChanged();
void getCurrentConfig(MeterConfig& meterConfig); void getCurrentConfig(MeterConfig& meterConfig);
void setTimezone(Timezone* tz) {
this->tz = tz;
};
HardwareSerial* getHwSerial(); HardwareSerial* getHwSerial();
void rxerr(int err); void rxerr(int err);

View File

@@ -27,13 +27,13 @@ IEC6205675::IEC6205675(const char* d, Timezone* tz, uint8_t useMeterType, MeterC
// Kaifa special case... // Kaifa special case...
if(useMeterType == AmsTypeKaifa && data->base.type == CosemTypeDLongUnsigned) { if(useMeterType == AmsTypeKaifa && data->base.type == CosemTypeDLongUnsigned) {
this->packageTimestamp = this->packageTimestamp > 0 ? tz->toUTC(this->packageTimestamp) : 0; this->packageTimestamp = this->packageTimestamp > 0 && tz != NULL ? tz->toUTC(this->packageTimestamp) : 0;
listType = 1; listType = 1;
meterType = AmsTypeKaifa; meterType = AmsTypeKaifa;
activeImportPower = ntohl(data->dlu.data); activeImportPower = ntohl(data->dlu.data);
lastUpdateMillis = millis64(); lastUpdateMillis = millis64();
} else if(data->base.type == CosemTypeOctetString) { } else if(data->base.type == CosemTypeOctetString) {
this->packageTimestamp = this->packageTimestamp > 0 ? tz->toUTC(this->packageTimestamp) : 0; this->packageTimestamp = this->packageTimestamp > 0 && tz != NULL ? tz->toUTC(this->packageTimestamp) : 0;
memcpy(str, data->oct.data, data->oct.length); memcpy(str, data->oct.data, data->oct.length);
str[data->oct.length] = 0x00; str[data->oct.length] = 0x00;
@@ -123,7 +123,7 @@ IEC6205675::IEC6205675(const char* d, Timezone* tz, uint8_t useMeterType, MeterC
if(data->oct.length == 0x0C) { if(data->oct.length == 0x0C) {
AmsOctetTimestamp* amst = (AmsOctetTimestamp*) data; AmsOctetTimestamp* amst = (AmsOctetTimestamp*) data;
time_t ts = decodeCosemDateTime(amst->dt); time_t ts = decodeCosemDateTime(amst->dt);
meterTimestamp = tz->toUTC(ts); meterTimestamp = tz != NULL ? tz->toUTC(ts) : ts;
} }
} }
} }
@@ -1121,7 +1121,7 @@ time_t IEC6205675::adjustForKnownIssues(CosemDateTime dt, Timezone* tz, uint8_t
// 21.09.24, the clock is now correct for Aidon // 21.09.24, the clock is now correct for Aidon
// 23.10.25, the clock is now correct for Kamstrup // 23.10.25, the clock is now correct for Kamstrup
ts -= 3600; ts -= 3600;
} else { } else if(tz != NULL) {
// Adjust from localtime to UTC // Adjust from localtime to UTC
ts = tz->toUTC(ts); ts = tz->toUTC(ts);
} }

View File

@@ -16,7 +16,8 @@
"day" : "day", "day" : "day",
"days" : "days", "days" : "days",
"month" : "month", "month" : "month",
"unknown" : "Unknown" "unknown" : "Unknown",
"now" : "Now"
}, },
"btn" : { "btn" : {
"reboot" : "Reboot", "reboot" : "Reboot",

View File

@@ -809,6 +809,9 @@ void handleNtp() {
ds.setTimezone(tz); ds.setTimezone(tz);
ea.setTimezone(tz); ea.setTimezone(tz);
ps->setTimezone(tz); ps->setTimezone(tz);
if(passiveMc != NULL) {
passiveMc->setTimezone(tz);
}
} }
config.ackNtpChange(); config.ackNtpChange();