diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 4e15114bc..30bc883f0 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -820,14 +820,40 @@ void Boiler::process_UBAErrorMessage2(std::shared_ptr telegram) } char code[4]; uint16_t codeNo; - uint32_t timecode; + char start_time[17]; + char end_time[17]; + + if (!(telegram->message_data[10] & 0x80)) { // no valid start date means no error? + return; + } + code[0] = telegram->message_data[5]; code[1] = telegram->message_data[6]; code[2] = telegram->message_data[7]; code[3] = 0; telegram->read_value(codeNo, 8); - telegram->read_value(timecode, 11, 3); - snprintf(lastCode_, sizeof(lastCode_), "%s(%d) uptime:%d min", code, codeNo, timecode); + + uint16_t start_year = (telegram->message_data[10] & 0x7F) + 2000; + uint8_t start_month = telegram->message_data[11]; + uint8_t start_day = telegram->message_data[13]; + uint8_t start_hour = telegram->message_data[12]; + uint8_t start_min = telegram->message_data[14]; + snprintf(start_time, sizeof(start_time), "%d.%02d.%02d %02d:%02d", start_year, start_month, start_day, start_hour, start_min); + + uint16_t end_year = (telegram->message_data[15] & 0x7F) + 2000; + uint8_t end_month = telegram->message_data[16]; + uint8_t end_day = telegram->message_data[18]; + uint8_t end_hour = telegram->message_data[17]; + uint8_t end_min = telegram->message_data[19]; + + if (telegram->message_data[15] & 0x80) { //valid end date + snprintf(end_time, sizeof(end_time), "%d.%02d.%02d %02d:%02d", end_year, end_month, end_day, end_hour, end_min); + } + else { // no valid end date means error still persists + snprintf(end_time, sizeof(end_time), "%s", "none"); + } + + snprintf(lastCode_, sizeof(lastCode_), "%s/%d start: %s, end: %s", code, codeNo, start_time, end_time); } diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 7f5332c62..f44afec87 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -131,7 +131,7 @@ class Boiler : public EMSdevice { uint32_t burnWorkMin_; // Total burner operating time uint32_t heatWorkMin_; // Total heat operating time uint32_t UBAuptime_; // Total UBA working hours - char lastCode_[30]; // last error code + char lastCode_[60]; // last error code char serviceCode_[4]; // 3 character status/service code uint16_t serviceCodeNumber_; // error/service code