diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 3beccfd44..c48e08e86 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -520,7 +520,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &totalCompStarts_, DeviceValueType::UINT24, FL_(totalCompStarts), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatingStarts_, DeviceValueType::UINT24, FL_(heatingStarts), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &coolingStarts_, DeviceValueType::UINT24, FL_(coolingStarts), DeviceValueUOM::NONE); - register_device_value(DeviceValueTAG::TAG_DHW1, &wwStarts2_, DeviceValueType::UINT24, FL_(wwStarts2), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DHW1, &wwStartsHp_, DeviceValueType::UINT24, FL_(wwStartsHp), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &poolStarts_, DeviceValueType::UINT24, FL_(poolStarts), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsTotal_, DeviceValueType::UINT24, FL_(nrgConsTotal), DeviceValueUOM::KWH); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &nrgConsCompTotal_, DeviceValueType::UINT24, FL_(nrgConsCompTotal), DeviceValueUOM::KWH); @@ -1615,7 +1615,7 @@ void Boiler::process_UBAInformation(std::shared_ptr telegram) { has_update(telegram, totalCompStarts_, 20); has_update(telegram, heatingStarts_, 28); has_update(telegram, coolingStarts_, 36); - has_update(telegram, wwStarts2_, 24); + has_update(telegram, wwStartsHp_, 24); has_update(telegram, poolStarts_, 32); has_update(telegram, nrgConsTotal_, 64); diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 2879e90d9..88b23f582 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -85,7 +85,7 @@ class Boiler : public EMSdevice { uint8_t wwMaxPower_; // DHW maximum power uint8_t wwMaxTemp_; // DHW maximum temperature uint32_t wwStarts_; // DHW starts - uint32_t wwStarts2_; // DHW control starts + uint32_t wwStartsHp_; // DHW starts Heatpump uint32_t wwWorkM_; // DHW minutes int8_t wwHystOn_; int8_t wwHystOff_; diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index 5e7d5dcf3..3592dead0 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -206,6 +206,18 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c DeviceValueNumOp::DV_NUMOP_DIV10, FL_(cyl2BottomTemp), DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &cylBottomTemp3_, + DeviceValueType::INT16, + DeviceValueNumOp::DV_NUMOP_DIV10, + FL_(cyl3BottomTemp), + DeviceValueUOM::DEGREES); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, + &cylTopTemp_, + DeviceValueType::INT16, + DeviceValueNumOp::DV_NUMOP_DIV10, + FL_(cylTopTemp), + DeviceValueUOM::DEGREES); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &heatExchangerTemp_, DeviceValueType::INT16, @@ -215,6 +227,9 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &cylPumpMod_, DeviceValueType::UINT8, FL_(cylPumpMod), DeviceValueUOM::PERCENT); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &valveStatus_, DeviceValueType::BOOL, FL_(valveStatus), DeviceValueUOM::NONE); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &vs1Status_, DeviceValueType::BOOL, FL_(vs1Status), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &vs3Status_, DeviceValueType::BOOL, FL_(vs3Status), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &transferPump_, DeviceValueType::BOOL, FL_(transferPump), DeviceValueUOM::NONE); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &transferPumpMod_, DeviceValueType::UINT8, FL_(transferPumpMod), DeviceValueUOM::PERCENT); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA, &collectorMaxTemp_, DeviceValueType::UINT8, @@ -580,20 +595,22 @@ void Solar::process_SM100Monitor(std::shared_ptr telegram) { has_update(telegram, cylBottomTemp2_, 16); // is *10 - TS5: Temperature sensor 2 cylinder, bottom, or swimming pool has_update(telegram, heatExchangerTemp_, 20); // is *10 - TS6: Heat exchanger temperature sensor - has_update(telegram, collector2Temp_, 6); // is *10 - TS7: Temperature sensor for collector array 2 - has_update(telegram, cylMiddleTemp_, 8); // is *10 - TS14: cylinder middle temperature - has_update(telegram, retHeatAssist_, 10); // is *10 - TS15: return temperature heating assistance + has_update(telegram, collector2Temp_, 6); // is *10 - TS7: Temperature sensor for collector array 2 + has_update(telegram, cylMiddleTemp_, 8); // is *10 - TS14: cylinder middle temperature + has_update(telegram, retHeatAssist_, 10); // is *10 - TS15: return temperature heating assistance + has_update(telegram, cylBottomTemp3_, 24); // is *10 - TS5: Temperature sensor cylinder 3, bottom } // SM100Monitor2 - 0x0363 Heatcounter // e.g. B0 00 FF 00 02 63 80 00 80 00 00 00 80 00 80 00 80 00 00 80 00 5A // Solar(0x30) -> All(0x00), SM100Monitor2(0x363), data: 01 E1 01 6B 00 00 01 5D 02 8E 80 00 0F 80 00 void Solar::process_SM100Monitor2(std::shared_ptr telegram) { - has_update(telegram->read_value(heatCntFlowTemp_, 0)); // is *10 - has_update(telegram->read_value(heatCntRetTemp_, 2)); // is *10 - has_update(telegram->read_value(heatCnt_, 12)); - has_update(telegram->read_value(swapRetTemp_, 6)); // is *10 - has_update(telegram->read_value(swapFlowTemp_, 8)); // is *10 + has_update(telegram, heatCntFlowTemp_, 0); // is *10 + has_update(telegram, heatCntRetTemp_, 2); // is *10 + has_update(telegram, heatCnt_, 12); + has_update(telegram, swapRetTemp_, 6); // is *10 + has_update(telegram, swapFlowTemp_, 8); // is *10 + has_update(telegram, cylTopTemp_, 10); // is *10 - TS10: cylinder top temperature } // SM100Config - 0x0366 @@ -607,7 +624,7 @@ void Solar::process_SM100Config(std::shared_ptr telegram) { // SM100Config1 - 0x035F // e.g. Solar(0x30) -> Me(0x0B), ?(0x35F), data: 00 00 41 01 1E 0A 0C 19 00 3C 19 void Solar::process_SM100Config1(std::shared_ptr telegram) { - has_update(telegram->read_value(cylPriority_, 3)); + has_update(telegram, cylPriority_, 3); } /* @@ -644,6 +661,8 @@ void Solar::process_SM100Status(std::shared_ptr telegram) { solarpumpmod = solarPumpMinMod_ * 5; // set to minimum } has_update(solarPump2Mod_, solarpumpmod); + + has_update(telegram, transferPumpMod_, 14); } /* @@ -658,6 +677,7 @@ void Solar::process_SM100Status2(std::shared_ptr telegram) { has_bitupdate(telegram, solarPump_, 10, 2); // on if bit 2 set has_bitupdate(telegram, solarPump2_, 1, 2); // on if bit 2 set has_bitupdate(telegram, m1Valve_, 7, 2); // values 8/4 seen + has_bitupdate(telegram, transferPump_, 11, 2); // #2212 } /* diff --git a/src/devices/solar.h b/src/devices/solar.h index 84311ee97..0a696f1b9 100644 --- a/src/devices/solar.h +++ b/src/devices/solar.h @@ -33,6 +33,8 @@ class Solar : public EMSdevice { int16_t collectorTemp_; // TS1: Temperature sensor for collector array 1 int16_t cylBottomTemp_; // TS2: Temperature sensor 1 cylinder, bottom cyl (solar thermal system) int16_t cylBottomTemp2_; // TS5: Temperature sensor 2 cylinder, bottom cyl, or swimming pool (solar thermal system) + int16_t cylBottomTemp3_; // TS11: Temperature sensor 3. cylinder + int16_t cylTopTemp_; // TS10: Temperature sensor 1 cylinder, Top int16_t heatExchangerTemp_; // TS6: Heat exchanger temperature sensor int16_t collector2Temp_; // TS7: Temperature sensor for collector array 2 int16_t cylMiddleTemp_; // TS14: Cylinder middle temp @@ -46,6 +48,9 @@ class Solar : public EMSdevice { uint8_t m1Valve_; // M1: heat assistance valve uint8_t m1Power_; // M1: heat assistance valve uint8_t vs1Status_; // VS1: status + uint8_t vs3Status_; // VS3: status + uint8_t transferPump_; + uint8_t transferPumpMod_; // 0x363 heat counter uint16_t heatCntFlowTemp_; diff --git a/src/locale_translations.h b/src/locale_translations.h index fc16b9611..50db65304 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -623,7 +623,7 @@ MAKE_TRANSLATION(wwActive, "active", "active", "aktiv", "Actief", "Aktiv", "akty MAKE_TRANSLATION(ww3wayValve, "3wayvalve", "3-way valve active", "3-Wege-Ventil aktiv", "3-wegklep actief", "Trevägsventil aktiv", "zawór 3-drogowy aktywny", "aktiv trevisventil", "vanne 3 voies active", "3 yollu vana", "valvola 3-vie", "3-cestný ventil aktívny", "aktivní 3-cestný ventil") MAKE_TRANSLATION(wwMixerTemp, "mixertemp", "mixer temperature", "Mischertemperatur", "Mixertemperatuur", "Blandningsventil-tempertur", "temperatura mieszacza", "temperatur blandeventil", "température mélangeur", "karıştırıcı sıcaklığı", "temperatura miscelatore", "teplota mixéra", "teplota směšovače") MAKE_TRANSLATION(wwStarts, "starts", "starts", "Anzahl Starts", "Aantal starts", "Antal starter", "liczba załączeń", "antall starter", "démarrages", "başlıyor", "avvii", "Počet štartov", "Počet startů") -MAKE_TRANSLATION(wwStarts2, "starts2", "control starts2", "Anzahl Starts Kreis 2 ", "Aantal starts circuit 2", "Antal starter Krets 2", "liczba załączeń 2", "antall starter krets 2", "démarrages contrôle 2", "devre 2 başlıyor", "avvii controllati 2", "Okruh 2 počet štartov", "Počet startů okruh 2") +MAKE_TRANSLATION(wwStartsHp, "startshp", "starts hp", "Anzahl Starts WP", "", "", "", "", "", "", "", "", "") // TODO translate MAKE_TRANSLATION(wwWorkM, "workm", "active time", "aktive Zeit", "Actieve tijd", "Aktiv Tid", "czas aktywności", "driftstid", "temps actif", "aktif zaman", "tempo attivo", "aktívny čas", "aktivní čas") MAKE_TRANSLATION(wwHystOn, "hyston", "hysteresis on temperature", "Einschalttemperaturdifferenz", "Inschakeltemperatuurverschil", "Hysteres PÅ-temperatur", "histereza załączania", "innkoblingstemperaturforskjell", "hystérésis température allumage", "çalışma sıcaklığı farkı", "differenza di temperatura di accensione", "hysterézia teploty", "hystereze zapnutí") MAKE_TRANSLATION(wwHystOff, "hystoff", "hysteresis off temperature", "Ausschalttemperaturdifferenz", "Uitschakeltemperatuurverschil", "Hysteres AV-temperatur", "histereza wyłączania", "utkoblingstemperaturforskjell", "hystérésis température extinction", "kapatma sıcaklığı farkı", "differenza di temperatura di spegnimento", "teplota hysterézie", "hystereze vypnutí") @@ -814,6 +814,10 @@ MAKE_TRANSLATION(m1WorkTime, "m1worktime", "differential control working time", MAKE_TRANSLATION(energyLastHour, "energylasthour", "energy last hour", "Energie letzte Std", "Energie laatste uur", "Energi Senaste Timmen", "energia w ciągu ostatniej godziny", "energi siste time", "énergie dernière heure", "son saat enerji", "Eenergia ultima ora", "energia za poslednú hodinu", "energie za poslední hodinu") MAKE_TRANSLATION(energyTotal, "energytotal", "total energy", "Gesamtenergie", "Totale energie", "Total Energi", "energia całkowita", "total energi", "énergie totale", "toplam enerji", "energia totale", "celková energia", "celková energie") MAKE_TRANSLATION(energyToday, "energytoday", "total energy today", "Energie heute", "Energie vandaag", "Total Energi Idag", "energia całkowita dzisiaj", "total energi i dag", "énergie totale aujourd'hui", "bugün toplam enerji", "totale energia giornaliera", "celková energia dnes", "celková energie dnes") +MAKE_TRANSLATION(cyl3BottomTemp, "cyl3bottomtemp", "third cylinder bottom temperature (TS11)") // TODO translate +MAKE_TRANSLATION(cylTopTemp, "cyltoptemp", "cylinder top temperature (TS10)", "Speichertemperatur oben (TS10)") // TODO translate +MAKE_TRANSLATION(transferPumpMod, "transferpumpmod", "transfer pump modulation", "Transferpumpenmodulation") // TODO translate +MAKE_TRANSLATION(transferPump, "transferpump", "transfer pump", "Transferpumpe") // TODO translate // solar dhw MAKE_TRANSLATION(wwColdTemp, "coldtemp", "cold water", "Kaltwasser", "", "", "zimna woda", "", "", "", "", "studená voda", "studená voda") // TODO translate diff --git a/src/modbus_entity_parameters.hpp b/src/modbus_entity_parameters.hpp index d41774a68..bc0dfa180 100644 --- a/src/modbus_entity_parameters.hpp +++ b/src/modbus_entity_parameters.hpp @@ -196,7 +196,7 @@ const std::initializer_list Modbus::modbus_register_ma REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(nrgWw), 0, 2), // nrg REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(meterWw), 2, 2), // meter REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(upTimeCompWw), 4, 2), // uptimecomp - REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(wwStarts2), 6, 2), // starts2 + REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(wwStartsHp), 6, 2), // startsHp REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(nrgConsCompWw), 8, 2), // nrgconscomp REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(auxElecHeatNrgConsWw), 10, 2), // auxelecheatnrgcons REGISTER_MAPPING(dt::BOILER, TAG_TYPE_DHW, FL_(nrgSuppWw), 12, 2), // nrgsupp