fix: separate room and heating setpoint state

This commit is contained in:
Yurii committed 2026-10-20 05:26:31 +03:00
1 parent cd8764bb97
commit 4581ca49cb
2 files changed
+26 -8

No files matched your search

+24 -8
View File
@@ -31,6 +31,8 @@ protected:
unsigned long heatingSetTempTime = 0;
unsigned long dhwSetTempTime = 0;
unsigned long ch2SetTempTime = 0;
unsigned long roomSetTempTime = 0;
unsigned long roomSetTempCh2Time = 0;
uint8_t configuredRxLedGpio = GPIO_IS_NOT_CONFIGURED;
#if defined(ARDUINO_ARCH_ESP32)
@@ -91,6 +93,8 @@ protected:
this->instanceOutGpio = settings.opentherm.outGpio;
this->resetBusTime = millis();
this->initialized = false;
this->roomSetTempTime = 0;
this->roomSetTempCh2Time = 0;
Log.sinfoln(FPSTR(L_OT), F("Started. GPIO IN: %hhu, GPIO OUT: %hhu"), settings.opentherm.inGpio, settings.opentherm.outGpio);
@@ -1291,13 +1295,13 @@ protected:
);
// Set target indoor temp
if (this->needSetHeatingTemp(convertedTemp)) {
if (this->needSetRoomSetpoint(convertedTemp)) {
if (this->setRoomSetpoint(convertedTemp)) {
this->heatingSetTempTime = millis();
this->roomSetTempTime = millis();
Log.sinfoln(
FPSTR(L_OT_HEATING), F("Set target indoor temp: %.2f (converted: %.2f, response: %.2f)"),
targetTemp, convertedTemp, vars.slave.heating.targetTemp
targetTemp, convertedTemp, vars.slave.heating.roomTargetTemp
);
} else {
@@ -1306,13 +1310,13 @@ protected:
}
// Set target CH2 temp
if (settings.opentherm.options.heatingToCh2 && this->needSetCh2Temp(convertedTemp)) {
if (settings.opentherm.options.heatingToCh2 && this->needSetRoomSetpointCh2(convertedTemp)) {
if (this->setRoomSetpointCh2(convertedTemp)) {
this->ch2SetTempTime = millis();
this->roomSetTempCh2Time = millis();
Log.sinfoln(
FPSTR(L_OT_HEATING), F("Set target CH2 indoor temp: %.2f (converted: %.2f, response: %.2f)"),
targetTemp, convertedTemp, vars.slave.ch2.targetTemp
targetTemp, convertedTemp, vars.slave.ch2.roomTargetTemp
);
} else {
@@ -1552,6 +1556,18 @@ protected:
return millis() - this->instanceCreatedTime > this->readyTime;
}
bool needSetRoomSetpoint(const float target) {
return !this->roomSetTempTime
|| millis() - this->roomSetTempTime > this->heatingSetTempInterval
|| fabsf(target - vars.slave.heating.roomTargetTemp) > 0.05f;
}
bool needSetRoomSetpointCh2(const float target) {
return !this->roomSetTempCh2Time
|| millis() - this->roomSetTempCh2Time > this->ch2SetTempInterval
|| fabsf(target - vars.slave.ch2.roomTargetTemp) > 0.05f;
}
bool needSetDhwTemp(const float target) {
return millis() - this->dhwSetTempTime > this->dhwSetTempInterval
|| fabsf(target - vars.slave.dhw.targetTemp) > 0.05f;
@@ -1778,7 +1794,7 @@ protected:
return false;
}
vars.slave.heating.targetTemp = CustomOpenTherm::getFloat(response);
vars.slave.heating.roomTargetTemp = CustomOpenTherm::getFloat(response);
return CustomOpenTherm::getUInt(response) == request;
}
@@ -1798,7 +1814,7 @@ protected:
return false;
}
vars.slave.ch2.targetTemp = CustomOpenTherm::getFloat(response);
vars.slave.ch2.roomTargetTemp = CustomOpenTherm::getFloat(response);
return CustomOpenTherm::getUInt(response) == request;
}
+2
View File
@@ -402,6 +402,7 @@ struct Variables {
bool active = false;
bool enabled = false;
float targetTemp = 0.0f;
float roomTargetTemp = 0.0f;
float currentTemp = 0.0f;
float returnTemp = 0.0f;
float indoorTemp = 0.0f;
@@ -426,6 +427,7 @@ struct Variables {
bool active = false;
bool enabled = false;
float targetTemp = 0.0f;
float roomTargetTemp = 0.0f;
float currentTemp = 0.0f;
float indoorTemp = 0.0f;
} ch2;