mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-10 01:39:54 +03:00
refactor read_value. added read_bitvalue
This commit is contained in:
@@ -471,12 +471,12 @@ void Boiler::process_UBAMonitorFast(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(selBurnPow_, 3); // burn power max setting
|
||||
telegram->read_value(curBurnPow_, 4);
|
||||
|
||||
telegram->read_value(burnGas_, 7, 0);
|
||||
telegram->read_value(fanWork_, 7, 2);
|
||||
telegram->read_value(ignWork_, 7, 3);
|
||||
telegram->read_value(heatPmp_, 7, 5);
|
||||
telegram->read_value(wWHeat_, 7, 6);
|
||||
telegram->read_value(wWCirc_, 7, 7);
|
||||
telegram->read_bitvalue(burnGas_, 7, 0);
|
||||
telegram->read_bitvalue(fanWork_, 7, 2);
|
||||
telegram->read_bitvalue(ignWork_, 7, 3);
|
||||
telegram->read_bitvalue(heatPmp_, 7, 5);
|
||||
telegram->read_bitvalue(wWHeat_, 7, 6);
|
||||
telegram->read_bitvalue(wWCirc_, 7, 7);
|
||||
|
||||
// warm water storage sensors (if present)
|
||||
// wwStorageTemp2 is also used by some brands as the boiler temperature - see https://github.com/proddy/EMS-ESP/issues/206
|
||||
@@ -506,7 +506,7 @@ void Boiler::process_UBAMonitorFast(std::shared_ptr<const Telegram> telegram) {
|
||||
* received only after requested (not broadcasted)
|
||||
*/
|
||||
void Boiler::process_UBATotalUptime(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(UBAuptime_, 0);
|
||||
telegram->read_value(UBAuptime_, 0, 3); // force to 3 bytes
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -527,13 +527,15 @@ void Boiler::process_UBAMonitorWW(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(wWCurTmp_, 1);
|
||||
telegram->read_value(wWCurTmp2_, 3);
|
||||
telegram->read_value(wWCurFlow_, 9);
|
||||
telegram->read_value(wWWorkM_, 10);
|
||||
telegram->read_value(wWStarts_, 13);
|
||||
telegram->read_value(wWOneTime_, 5, 1);
|
||||
telegram->read_value(wWDesinfecting_, 5, 2);
|
||||
telegram->read_value(wWReadiness_, 5, 3);
|
||||
telegram->read_value(wWRecharging_, 5, 4);
|
||||
telegram->read_value(wWTemperatureOK_, 5, 5);
|
||||
|
||||
telegram->read_value(wWWorkM_, 10, 3); // force to 3 bytes
|
||||
telegram->read_value(wWStarts_, 13, 3); // force to 3 bytes
|
||||
|
||||
telegram->read_bitvalue(wWOneTime_, 5, 1);
|
||||
telegram->read_bitvalue(wWDesinfecting_, 5, 2);
|
||||
telegram->read_bitvalue(wWReadiness_, 5, 3);
|
||||
telegram->read_bitvalue(wWRecharging_, 5, 4);
|
||||
telegram->read_bitvalue(wWTemperatureOK_, 5, 5);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -542,8 +544,8 @@ void Boiler::process_UBAMonitorWW(std::shared_ptr<const Telegram> telegram) {
|
||||
*/
|
||||
void Boiler::process_UBAMonitorFastPlus(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(selFlowTemp_, 6);
|
||||
telegram->read_value(burnGas_, 11, 0);
|
||||
telegram->read_value(wWHeat_, 11, 2);
|
||||
telegram->read_bitvalue(burnGas_, 11, 0);
|
||||
telegram->read_bitvalue(wWHeat_, 11, 2);
|
||||
telegram->read_value(curBurnPow_, 10);
|
||||
telegram->read_value(selBurnPow_, 9);
|
||||
telegram->read_value(curFlowTemp_, 7);
|
||||
@@ -573,9 +575,9 @@ void Boiler::process_UBAMonitorSlow(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(exhaustTemp_, 4);
|
||||
telegram->read_value(switchTemp_, 25); // only if there is a mixing module present
|
||||
telegram->read_value(pumpMod_, 9);
|
||||
telegram->read_value(burnStarts_, 10);
|
||||
telegram->read_value(burnWorkMin_, 13);
|
||||
telegram->read_value(heatWorkMin_, 19);
|
||||
telegram->read_value(burnStarts_, 10, 3); // force to 3 bytes
|
||||
telegram->read_value(burnWorkMin_, 13, 3); // force to 3 bytes
|
||||
telegram->read_value(heatWorkMin_, 19, 3); // force to 3 bytes
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -589,13 +591,13 @@ void Boiler::process_UBAMonitorSlowPlus2(std::shared_ptr<const Telegram> telegra
|
||||
* UBAMonitorSlowPlus - type 0xE5 - central heating monitor EMS+
|
||||
*/
|
||||
void Boiler::process_UBAMonitorSlowPlus(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(fanWork_, 2, 2);
|
||||
telegram->read_value(ignWork_, 2, 3);
|
||||
telegram->read_value(heatPmp_, 2, 5);
|
||||
telegram->read_value(wWCirc_, 2, 7);
|
||||
telegram->read_value(burnStarts_, 10);
|
||||
telegram->read_value(burnWorkMin_, 13);
|
||||
telegram->read_value(heatWorkMin_, 19);
|
||||
telegram->read_bitvalue(fanWork_, 2, 2);
|
||||
telegram->read_bitvalue(ignWork_, 2, 3);
|
||||
telegram->read_bitvalue(heatPmp_, 2, 5);
|
||||
telegram->read_bitvalue(wWCirc_, 2, 7);
|
||||
telegram->read_value(burnStarts_, 10, 3); // force to 3 bytes
|
||||
telegram->read_value(burnWorkMin_, 13, 3); // force to 3 bytes
|
||||
telegram->read_value(heatWorkMin_, 19, 3); // force to 3 bytes
|
||||
telegram->read_value(pumpMod_, 25);
|
||||
}
|
||||
|
||||
@@ -605,15 +607,18 @@ void Boiler::process_UBADHWStatus(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(wWSetTmp_, 0);
|
||||
telegram->read_value(wWCurTmp_, 1);
|
||||
telegram->read_value(wWCurTmp2_, 3);
|
||||
telegram->read_value(wWWorkM_, 17);
|
||||
telegram->read_value(wWStarts_, 14);
|
||||
telegram->read_value(wWOneTime_, 12, 2);
|
||||
telegram->read_value(wWDesinfecting_, 12, 3);
|
||||
telegram->read_value(wWReadiness_, 12, 4);
|
||||
telegram->read_value(wWRecharging_, 13, 4);
|
||||
telegram->read_value(wWTemperatureOK_, 13, 5);
|
||||
|
||||
telegram->read_value(wWWorkM_, 17, 3); // force to 3 bytes
|
||||
telegram->read_value(wWStarts_, 14, 3); // force to 3 bytes
|
||||
|
||||
telegram->read_bitvalue(wWOneTime_, 12, 2);
|
||||
telegram->read_bitvalue(wWDesinfecting_, 12, 3);
|
||||
telegram->read_bitvalue(wWReadiness_, 12, 4);
|
||||
telegram->read_bitvalue(wWRecharging_, 13, 4);
|
||||
telegram->read_bitvalue(wWTemperatureOK_, 13, 5);
|
||||
telegram->read_bitvalue(wWCircPump_, 13, 2);
|
||||
|
||||
telegram->read_value(wWActivated_, 20);
|
||||
telegram->read_value(wWCircPump_, 13, 2);
|
||||
telegram->read_value(wWSelTemp_, 10);
|
||||
telegram->read_value(wWDisinfectTemp_, 9);
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ void Solar::process_SM10Monitor(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(collectorTemp_, 2); // collector temp from SM10, is *10
|
||||
telegram->read_value(bottomTemp_, 5); // bottom temp from SM10, is *10
|
||||
telegram->read_value(pumpModulation_, 4); // modulation solar pump
|
||||
telegram->read_value(pump_, 7, 1);
|
||||
telegram->read_bitvalue(pump_, 7, 1);
|
||||
telegram->read_value(pumpWorkMin_, 8);
|
||||
}
|
||||
|
||||
@@ -191,8 +191,8 @@ void Solar::process_SM100Status(std::shared_ptr<const Telegram> telegram) {
|
||||
* byte 10 = PS1 Solar circuit pump for collector array 1: test=01, on=04 and off=03
|
||||
*/
|
||||
void Solar::process_SM100Status2(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(valveStatus_, 4, 2); // on if bit 2 set
|
||||
telegram->read_value(pump_, 10, 2); // on if bit 2 set
|
||||
telegram->read_bitvalue(valveStatus_, 4, 2); // on if bit 2 set
|
||||
telegram->read_bitvalue(pump_, 10, 2); // on if bit 2 set
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -200,9 +200,9 @@ void Solar::process_SM100Status2(std::shared_ptr<const Telegram> telegram) {
|
||||
* e.g. 30 00 FF 00 02 8E 00 00 00 00 00 00 06 C5 00 00 76 35
|
||||
*/
|
||||
void Solar::process_SM100Energy(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value32(energyLastHour_, 0); // last hour / 10 in Wh
|
||||
telegram->read_value32(energyToday_, 4); // todays in Wh
|
||||
telegram->read_value32(energyTotal_, 8); // total / 10 in kWh
|
||||
telegram->read_value(energyLastHour_, 0); // last hour / 10 in Wh
|
||||
telegram->read_value(energyToday_, 4); // todays in Wh
|
||||
telegram->read_value(energyTotal_, 8); // total / 10 in kWh
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -210,11 +210,11 @@ void Solar::process_SM100Energy(std::shared_ptr<const Telegram> telegram) {
|
||||
* e.g. B0 00 FF 00 00 03 32 00 00 00 00 13 00 D6 00 00 00 FB D0 F0
|
||||
*/
|
||||
void Solar::process_ISM1StatusMessage(std::shared_ptr<const Telegram> telegram) {
|
||||
telegram->read_value(collectorTemp_, 4); // Collector Temperature
|
||||
telegram->read_value(bottomTemp_, 6); // Temperature Bottom of Solar Boiler
|
||||
telegram->read_value32(energyLastHour_, 0); // Solar Energy produced in last hour - is * 10 and handled in ems-esp.cpp
|
||||
telegram->read_value(pump_, 8, 0); // Solar pump on (1) or off (0)
|
||||
telegram->read_value(pumpWorkMin_, 10);
|
||||
telegram->read_value(collectorTemp_, 4); // Collector Temperature
|
||||
telegram->read_value(bottomTemp_, 6); // Temperature Bottom of Solar Boiler
|
||||
telegram->read_value(energyLastHour_, 0); // Solar Energy produced in last hour - is * 10 and handled in ems-esp.cpp
|
||||
telegram->read_bitvalue(pump_, 8, 0); // Solar pump on (1) or off (0)
|
||||
telegram->read_value(pumpWorkMin_, 10, 3); // force to 3 bytes
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -948,9 +948,9 @@ void Thermostat::process_RC20Set(std::shared_ptr<const Telegram> telegram) {
|
||||
void Thermostat::process_RC20Monitor_2(std::shared_ptr<const Telegram> telegram) {
|
||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
||||
|
||||
telegram->read_value(hc->mode_type, 0, 7); // day/night MSB 7th bit is day
|
||||
telegram->read_value8(hc->setpoint_roomTemp, 2); // is * 2, force as single byte
|
||||
telegram->read_value(hc->curr_roomTemp, 3); // is * 10
|
||||
telegram->read_bitvalue(hc->mode_type, 0, 7); // day/night MSB 7th bit is day
|
||||
telegram->read_value(hc->setpoint_roomTemp, 2, 1); // is * 2, force as single byte
|
||||
telegram->read_value(hc->curr_roomTemp, 3); // is * 10
|
||||
}
|
||||
|
||||
// 0xAD - for reading the mode from the RC20/ES72 thermostat (0x17)
|
||||
@@ -971,8 +971,8 @@ void Thermostat::process_RC20Remote(std::shared_ptr<const Telegram> telegram) {
|
||||
void Thermostat::process_RC10Monitor(std::shared_ptr<const Telegram> telegram) {
|
||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
||||
|
||||
telegram->read_value8(hc->setpoint_roomTemp, 1); // is * 2, force as single byte
|
||||
telegram->read_value(hc->curr_roomTemp, 2); // is * 10
|
||||
telegram->read_value(hc->setpoint_roomTemp, 1, 1); // is * 2, force as single byte
|
||||
telegram->read_value(hc->curr_roomTemp, 2); // is * 10
|
||||
}
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
@@ -1001,8 +1001,8 @@ void Thermostat::process_RCOutdoorTemp(std::shared_ptr<const Telegram> telegram)
|
||||
void Thermostat::process_RC20Monitor(std::shared_ptr<const Telegram> telegram) {
|
||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
||||
|
||||
telegram->read_value8(hc->setpoint_roomTemp, 1); // is * 2, force as single byte
|
||||
telegram->read_value(hc->curr_roomTemp, 2); // is * 10
|
||||
telegram->read_value(hc->setpoint_roomTemp, 1, 1); // is * 2, force as single byte
|
||||
telegram->read_value(hc->curr_roomTemp, 2); // is * 10
|
||||
}
|
||||
|
||||
// type 0x0A - data from the Nefit Easy/TC100 thermostat (0x18) - 31 bytes long
|
||||
@@ -1031,8 +1031,9 @@ void Thermostat::process_JunkersMonitor(std::shared_ptr<const Telegram> telegram
|
||||
|
||||
telegram->read_value(hc->curr_roomTemp, 4); // value is * 10
|
||||
telegram->read_value(hc->setpoint_roomTemp, 2); // value is * 10
|
||||
telegram->read_value(hc->mode_type, 0, 0); // first bit 1=day, 0=night
|
||||
telegram->read_value(hc->mode, 1); // 1 = manual, 2 = auto
|
||||
|
||||
telegram->read_bitvalue(hc->mode_type, 0, 0); // first bit 1=day, 0=night
|
||||
telegram->read_value(hc->mode, 1); // 1 = manual, 2 = auto
|
||||
}
|
||||
|
||||
// type 0x02A5 - data from the Nefit RC1010/3000 thermostat (0x18) and RC300/310s on 0x10
|
||||
@@ -1049,8 +1050,8 @@ void Thermostat::process_RC300Monitor(std::shared_ptr<const Telegram> telegram)
|
||||
telegram->read_value(hc->curr_roomTemp, 0); // is * 10
|
||||
}
|
||||
|
||||
telegram->read_value(hc->mode_type, 10, 1);
|
||||
telegram->read_value(hc->mode, 10, 0); // bit 1, mode (auto=1 or manual=0)
|
||||
telegram->read_bitvalue(hc->mode_type, 10, 1);
|
||||
telegram->read_bitvalue(hc->mode, 10, 0); // bit 1, mode (auto=1 or manual=0)
|
||||
|
||||
// if manual, take the current setpoint temp at pos 6
|
||||
// if auto, take the next setpoint temp at pos 7
|
||||
@@ -1065,7 +1066,7 @@ void Thermostat::process_RC300Monitor(std::shared_ptr<const Telegram> telegram)
|
||||
pos = 3;
|
||||
}
|
||||
|
||||
telegram->read_value8(hc->setpoint_roomTemp, pos); // is * 2, force as single byte
|
||||
telegram->read_value(hc->setpoint_roomTemp, pos, 1); // is * 2, force as single byte
|
||||
}
|
||||
|
||||
// type 0x02B9 EMS+ for reading from RC300/RC310 thermostat
|
||||
@@ -1077,8 +1078,8 @@ void Thermostat::process_RC300Set(std::shared_ptr<const Telegram> telegram) {
|
||||
// comfort is position 2
|
||||
// I think auto is position 8?
|
||||
// actual setpoint taken from RC300Monitor (Michael 12.06.2020)
|
||||
// telegram->read_value8(hc->setpoint_roomTemp, 8); // single byte conversion, value is * 2 - auto?
|
||||
// telegram->read_value8(hc->setpoint_roomTemp, 10); // single byte conversion, value is * 2 - manual
|
||||
// telegram->read_value(hc->setpoint_roomTemp, 8, 1); // single byte conversion, value is * 2 - auto?
|
||||
// telegram->read_value(hc->setpoint_roomTemp, 10, 1); // single byte conversion, value is * 2 - manual
|
||||
|
||||
// check why mode is both in the Monitor and Set for the RC300. It'll be read twice!
|
||||
// telegram->read_value(hc->mode, 0); // Auto = xFF, Manual = x00 eg. 10 00 FF 08 01 B9 FF
|
||||
@@ -1101,7 +1102,7 @@ void Thermostat::process_RC300WWmode(std::shared_ptr<const Telegram> telegram) {
|
||||
void Thermostat::process_RC30Monitor(std::shared_ptr<const Telegram> telegram) {
|
||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
||||
|
||||
telegram->read_value8(hc->setpoint_roomTemp, 1); // is * 2, force as single byte
|
||||
telegram->read_value(hc->setpoint_roomTemp, 1, 1); // is * 2, force as single byte
|
||||
telegram->read_value(hc->curr_roomTemp, 2);
|
||||
}
|
||||
|
||||
@@ -1123,11 +1124,13 @@ void Thermostat::process_RC35Monitor(std::shared_ptr<const Telegram> telegram) {
|
||||
|
||||
std::shared_ptr<Thermostat::HeatingCircuit> hc = heating_circuit(telegram);
|
||||
|
||||
telegram->read_value8(hc->setpoint_roomTemp, 2); // is * 2, force to single byte, is 0 in summermode
|
||||
telegram->read_value(hc->curr_roomTemp, 3); // is * 10 - or 0x7D00 if thermostat is mounted on boiler
|
||||
telegram->read_value(hc->mode_type, 1, 1);
|
||||
telegram->read_value(hc->summer_mode, 1, 0);
|
||||
telegram->read_value(hc->holiday_mode, 0, 5);
|
||||
telegram->read_value(hc->setpoint_roomTemp, 2, 1); // is * 2, force to single byte, is 0 in summermode
|
||||
telegram->read_value(hc->curr_roomTemp, 3); // is * 10 - or 0x7D00 if thermostat is mounted on boiler
|
||||
|
||||
telegram->read_bitvalue(hc->mode_type, 1, 1);
|
||||
telegram->read_bitvalue(hc->summer_mode, 1, 0);
|
||||
telegram->read_bitvalue(hc->holiday_mode, 0, 5);
|
||||
|
||||
telegram->read_value(hc->circuitcalctemp, 14);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user