diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index c20c40a6e..8a7a287de 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -281,6 +281,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burnWorkMin_, DeviceValueType::TIME, FL_(burnWorkMin), DeviceValueUOM::MINUTES); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &burn2WorkMin_, DeviceValueType::TIME, FL_(burn2WorkMin), DeviceValueUOM::MINUTES); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatWorkMin_, DeviceValueType::TIME, FL_(heatWorkMin), DeviceValueUOM::MINUTES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatStarts_, DeviceValueType::ULONG, FL_(heatStarts), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &UBAuptime_, DeviceValueType::TIME, FL_(UBAuptime), DeviceValueUOM::MINUTES); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &lastCode_, DeviceValueType::STRING, FL_(lastCode), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &serviceCode_, DeviceValueType::STRING, FL_(serviceCode), DeviceValueUOM::NONE); @@ -950,6 +951,7 @@ void Boiler::process_UBAMonitorSlow(std::shared_ptr telegram) { has_update(telegram, burnWorkMin_, 13, 3); // force to 3 bytes has_update(telegram, burn2WorkMin_, 16, 3); // force to 3 bytes has_update(telegram, heatWorkMin_, 19, 3); // force to 3 bytes + has_update(telegram, heatStarts_, 22, 3); // force to 3 bytes } /* @@ -975,6 +977,7 @@ void Boiler::process_UBAMonitorSlowPlus(std::shared_ptr telegram has_update(telegram, burnWorkMin_, 13, 3); // force to 3 bytes has_update(telegram, burn2WorkMin_, 16, 3); // force to 3 bytes has_update(telegram, heatWorkMin_, 19, 3); // force to 3 bytes + has_update(telegram, heatStarts_, 22, 3); // force to 3 bytes has_update(telegram, heatingPumpMod_, 25); // temperature measurements at 4, see #620 } diff --git a/src/devices/boiler.h b/src/devices/boiler.h index a360fcf73..baf1ad383 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -128,6 +128,7 @@ class Boiler : public EMSdevice { uint8_t curBurnPow_; // Burner current power % uint8_t setBurnPow_; // max output power in % uint32_t burnStarts_; // burner restarts + uint32_t heatStarts_; // burner starts for heating uint32_t burnWorkMin_; // Total burner operating time uint32_t burn2WorkMin_; // burner stage 2 operating time uint32_t heatWorkMin_; // Total heat operating time diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 8d217c43f..fc9431971 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -3624,6 +3624,19 @@ void Thermostat::register_device_values() { FL_(ibaMinExtTemperature), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_minexttemp)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &tempsensor1_, + DeviceValueType::SHORT, + DeviceValueNumOp::DV_NUMOP_DIV10, + FL_(tempsensor1), + DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &tempsensor2_, + DeviceValueType::SHORT, + DeviceValueNumOp::DV_NUMOP_DIV10, + FL_(tempsensor2), + DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaDamping_, DeviceValueType::BOOL, FL_(damping), DeviceValueUOM::NONE, MAKE_CF_CB(set_damping)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &dampedoutdoortemp_, DeviceValueType::INT, FL_(dampedoutdoortemp), DeviceValueUOM::DEGREES); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &ibaBuildingType_, diff --git a/src/helpers.cpp b/src/helpers.cpp index 72b66a418..030eccda6 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -297,7 +297,7 @@ char * Helpers::render_value(char * result, const int32_t value, const int8_t fo } else if (format > 0) { strlcat(result, itoa(new_value / format, s, 10), sizeof(s)); strlcat(result, ".", sizeof(s)); - strlcat(result, itoa(new_value % format, s, 10), sizeof(s)); + strlcat(result, itoa((new_value % format + format / 2) * 10 / format, s, 10), sizeof(s)); } else { strlcat(result, itoa(new_value * format * -1, s, 10), sizeof(s)); } @@ -347,7 +347,7 @@ char * Helpers::render_value(char * result, const uint32_t value, const int8_t f } else if (format > 0) { strlcpy(result, ltoa(new_value / format, s, 10), sizeof(s)); strlcat(result, ".", sizeof(s)); - strlcat(result, ltoa(new_value % format, s, 10), sizeof(s)); + strlcat(result, itoa((new_value % format + format / 2) * 10 / format, s, 10), sizeof(s)); } else { strlcpy(result, ltoa(new_value * format * -1, s, 10), sizeof(s)); } diff --git a/src/locale_translations.h b/src/locale_translations.h index ea28059cb..6ae397b2b 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -284,6 +284,7 @@ MAKE_PSTR_LIST(burnStarts, "burnstarts", "burner starts", "Brenner Starts", "Aan MAKE_PSTR_LIST(burnWorkMin, "burnworkmin", "total burner operating time", "Brenner Laufzeit", "Totale branderlooptijd", "Värmepanna aktiva timmar", "całkowity czas pracy palnika") MAKE_PSTR_LIST(burn2WorkMin, "burn2workmin", "burner stage 2 operating time", "Brenner Stufe 2 Laufzeit", "Totale looptijd brander fase 2", "Värmepanna steg 2 aktiva timmar", "całkowity czas pracy palnika 2 stopnia") MAKE_PSTR_LIST(heatWorkMin, "heatworkmin", "total heat operating time", "Heizung Laufzeit", "Totale looptijd verwarming", "Uppvärmning aktiva timmar", "całkowity czas grzania") +MAKE_PSTR_LIST(heatStarts, "heatstarts", "burner starts heating", "Brenner Starts Heizung", "Aantal brander starts verwarming", "Uppvärmning antal starter", "") MAKE_PSTR_LIST(UBAuptime, "ubauptime", "total UBA operating time", "Anlagen-Gesamtlaufzeit", "totale looptijd branderautomaat (UBA)", "Total Tid", "całkowity czas pracy (UBA)") MAKE_PSTR_LIST(lastCode, "lastcode", "last error code", "Letzter Fehler", "Laatste foutcode", "Senaste Felkod", "ostatni błąd") MAKE_PSTR_LIST(serviceCode, "servicecode", "service code", "Statusmeldung", "Statuscode", "Servicekod", "kod serwisowy")