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