From a5581f377813e0af6d9b65c9b9b046cb18679a48 Mon Sep 17 00:00:00 2001 From: Menno de Graaf Date: Fri, 15 Dec 2023 12:42:22 +0100 Subject: [PATCH] Add master/slave set/get to `initBoiler()` --- src/OpenThermTask.h | 103 ++++++++++++++++++++------------------------ 1 file changed, 46 insertions(+), 57 deletions(-) diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index f074ce4..33b7476 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -23,10 +23,7 @@ protected: unsigned short heatingSetTempInterval = 60000; bool pump = true; - bool tryGetSlaveVersion = true; - bool trySetMasterVersion = true; - bool tryGetSlaveConfig = true; - bool trySetMasterConfig = true; + bool prevOtStatus = false; unsigned long prevUpdateNonEssentialVars = 0; unsigned long startupTime = millis(); unsigned long dhwSetTempTime = 0; @@ -61,6 +58,39 @@ protected: #endif } + void initBoiler() { + // Not all boilers support these, only try once when the boiler becomes connected + if (updateSlaveVersion()) { + Log.straceln(FPSTR(S_OT), F("Slave version: %u, type: %u"), vars.parameters.slaveVersion, vars.parameters.slaveType); + + } else { + Log.swarningln(FPSTR(S_OT), F("Get slave version failed")); + } + + // 0x013F + if (setMasterVersion(0x3F, 0x01)) { + Log.straceln(FPSTR(S_OT), F("Master version: %u, type: %u"), vars.parameters.masterVersion, vars.parameters.masterType); + + } else { + Log.swarningln(FPSTR(S_OT), F("Set master version failed")); + } + + if (updateSlaveConfig()) { + Log.straceln(FPSTR(S_OT), F("Slave member id: %u, flags: %u"), vars.parameters.slaveMemberId, vars.parameters.slaveFlags); + + } else { + Log.swarningln(FPSTR(S_OT), F("Get slave config failed")); + } + + if (setMasterConfig(settings.opentherm.memberIdCode & 0xFF, (settings.opentherm.memberIdCode & 0xFFFF) >> 8)) { + Log.straceln(FPSTR(S_OT), F("Master member id: %u, flags: %u"), vars.parameters.masterMemberId, vars.parameters.masterFlags); + + } else { + Log.swarningln(FPSTR(S_OT), F("Set master config failed")); + } + + } + void loop() { static byte currentHeatingTemp, currentDhwTemp = 0; unsigned long localResponse; @@ -86,14 +116,20 @@ protected: if (!ot->isValidResponse(localResponse)) { Log.swarningln(FPSTR(S_OT), F("Invalid response after setBoilerStatus: %s"), ot->statusToString(ot->getLastResponseStatus())); - // Boiler is disconnected, try to get these variables when it becomes connected again - bool tryGetSlaveVersion = true; - bool trySetMasterVersion = true; - bool tryGetSlaveConfig = true; - bool trySetMasterConfig = true; - return; } + if (this->prevOtStatus != vars.states.otStatus) { + if (vars.states.otStatus) { + this->initBoiler(); + } + this->prevOtStatus = vars.states.otStatus; + } + + if (!vars.states.otStatus) { + // Boiler is disconnected, no need try setting other OT stuff + return; + } + if (vars.parameters.heatingEnabled != heatingEnabled) { prevUpdateNonEssentialVars = 0; vars.parameters.heatingEnabled = heatingEnabled; @@ -106,53 +142,6 @@ protected: vars.states.fault = ot->isFault(localResponse); vars.states.diagnostic = ot->isDiagnostic(localResponse); - // These parameters will be updated every minute - // Not all boilers support these, so only try once if not supported - if (millis() - prevUpdateNonEssentialVars > 60000) { - if (tryGetSlaveVersion) { - if (updateSlaveVersion()) { - Log.straceln(FPSTR(S_OT), F("Slave version: %u, type: %u"), vars.parameters.slaveVersion, vars.parameters.slaveType); - - } else { - Log.swarningln(FPSTR(S_OT), F("Get slave version failed")); - tryGetSlaveVersion = false; - } - } - - // 0x013F - if (trySetMasterVersion) { - if (setMasterVersion(0x3F, 0x01)) { - Log.straceln(FPSTR(S_OT), F("Master version: %u, type: %u"), vars.parameters.masterVersion, vars.parameters.masterType); - - } else { - Log.swarningln(FPSTR(S_OT), F("Set master version failed")); - trySetMasterVersion = false; - } - } - - if (tryGetSlaveConfig) { - if (updateSlaveConfig()) { - Log.straceln(FPSTR(S_OT), F("Slave member id: %u, flags: %u"), vars.parameters.slaveMemberId, vars.parameters.slaveFlags); - - } else { - Log.swarningln(FPSTR(S_OT), F("Get slave config failed")); - tryGetSlaveConfig = false; - } - } - - if (trySetMasterConfig) { - if (setMasterConfig(settings.opentherm.memberIdCode & 0xFF, (settings.opentherm.memberIdCode & 0xFFFF) >> 8)) { - Log.straceln(FPSTR(S_OT), F("Master member id: %u, flags: %u"), vars.parameters.masterMemberId, vars.parameters.masterFlags); - - } else { - Log.swarningln(FPSTR(S_OT), F("Set master config failed")); - trySetMasterConfig = false; - } - } - - //yield(); - } - // These parameters will be updated every minute if (millis() - prevUpdateNonEssentialVars > 60000) { if (!heatingEnabled && settings.opentherm.modulationSyncWithHeating) {