Use platformio and more updates

This commit is contained in:
Yurii
2023-09-16 22:00:07 +03:00
parent 493490895c
commit 4f305a6459
19 changed files with 1479 additions and 1267 deletions

View File

@@ -1,107 +1,133 @@
#include "lib/CustomOpenTherm.h"
#include <new>
#include <CustomOpenTherm.h>
CustomOpenTherm ot(OPENTHERM_IN_PIN, OPENTHERM_OUT_PIN);
CustomOpenTherm* ot;
class OpenThermTask : public Task {
class OpenThermTask: public Task {
public:
OpenThermTask(bool _enabled = false, unsigned long _interval = 0) : Task(_enabled, _interval) {}
OpenThermTask(bool _enabled = false, unsigned long _interval = 0): Task(_enabled, _interval) {}
protected:
void setup() {
ot.begin(handleInterrupt, responseCallback);
ot.setHandleSendRequestCallback(sendRequestCallback);
ot = new CustomOpenTherm(settings.opentherm.inPin, settings.opentherm.outPin);
ot->begin(handleInterrupt, responseCallback);
ot->setHandleSendRequestCallback(sendRequestCallback);
#ifdef LED_OT_RX_PIN
pinMode(LED_OT_RX_PIN, OUTPUT);
#endif
}
void loop() {
static byte currentHeatingTemp, currentDHWTemp = 0;
byte newHeatingTemp, newDHWTemp = 0;
unsigned long localResponse;
setMasterMemberIdCode();
DEBUG_F("Slave member id code: %u \n", vars.parameters.slaveMemberIdCode);
if ( setMasterMemberIdCode() ) {
DEBUG_F("Slave member id code: %u\r\n", vars.parameters.slaveMemberIdCode);
DEBUG_F("Master member id code: %u\r\n", settings.opentherm.memberIdCode > 0 ? settings.opentherm.memberIdCode : vars.parameters.slaveMemberIdCode);
localResponse = ot.setBoilerStatus(
settings.heating.enable && pump,
settings.dhw.enable
} else {
WARN("Slave member id failed");
}
bool heatingEnable = (vars.states.emergency || settings.heating.enable) && pump && isReady();
localResponse = ot->setBoilerStatus(
heatingEnable,
settings.dhw.enable,
false, false, true, false, false
);
if (!ot.isValidResponse(localResponse)) {
if (!ot->isValidResponse(localResponse)) {
WARN_F("Invalid response after setBoilerStatus: %s\r\n", ot->statusToString(ot->getLastResponseStatus()));
return;
}
vars.states.heating = ot.isCentralHeatingActive(localResponse);
vars.states.dhw = ot.isHotWaterActive(localResponse);
vars.states.flame = ot.isFlameOn(localResponse);
vars.states.fault = ot.isFault(localResponse);
vars.states.diagnostic = ot.isDiagnostic(localResponse);
INFO_F("Heating enabled: %d\r\n", heatingEnable);
setMaxModulationLevel(heatingEnable ? 100 : 0);
/*if (vars.dump_request.value)
{
testSupportedIDs();
vars.dump_request.value = false;
}*/
/*if ( ot.isValidResponse(localResponse) ) {
vars.SlaveMemberIDcode.value = localResponse >> 0 & 0xFF;
uint8_t flags = (localResponse & 0xFFFF) >> 8 & 0xFF;
vars.dhw_present.value = flags & 0x01;
vars.control_type.value = flags & 0x02;
vars.cooling_present.value = flags & 0x04;
vars.dhw_tank_present.value = flags & 0x08;
vars.pump_control_present.value = flags & 0x10;
vars.ch2_present.value = flags & 0x20;
}*/
vars.states.heating = ot->isCentralHeatingActive(localResponse);
vars.states.dhw = ot->isHotWaterActive(localResponse);
vars.states.flame = ot->isFlameOn(localResponse);
vars.states.fault = ot->isFault(localResponse);
vars.states.diagnostic = ot->isDiagnostic(localResponse);
yield();
// Команды чтения данных котла
if (millis() - prevUpdateNonEssentialVars > 30000) {
if (millis() - prevUpdateNonEssentialVars > 60000) {
updateSlaveParameters();
updateMasterParameters();
// crash?
DEBUG_F("Master type: %u, version: %u \n", vars.parameters.masterType, vars.parameters.masterVersion);
DEBUG_F("Slave type: %u, version: %u \n", vars.parameters.slaveType, vars.parameters.slaveVersion);
DEBUG_F("Master type: %u, version: %u\r\n", vars.parameters.masterType, vars.parameters.masterVersion);
DEBUG_F("Slave type: %u, version: %u\r\n", vars.parameters.slaveType, vars.parameters.slaveVersion);
updateMinMaxDhwTemp();
updateMinMaxHeatingTemp();
if (settings.outdoorTempSource == 0) {
updateOutsideTemp();
}
if (vars.states.fault) {
updateFaultCode();
ot->sendBoilerReset();
}
if ( vars.states.diagnostic ) {
ot->sendServiceReset();
}
updatePressure();
prevUpdateNonEssentialVars = millis();
yield();
}
updateHeatingTemp();
updateDHWTemp();
updateModulationLevel();
updatePressure();
if ( settings.dhw.enable || settings.heating.enable || heatingEnable ) {
updateModulationLevel();
}
if ( settings.dhw.enable ) {
updateDHWTemp();
} else {
vars.temperatures.dhw = 0;
}
if ( settings.heating.enable || heatingEnable ) {
updateHeatingTemp();
} else {
vars.temperatures.heating = 0;
}
yield();
//
// Температура ГВС
newDHWTemp = settings.dhw.target;
if (newDHWTemp != currentDHWTemp) {
byte newDHWTemp = settings.dhw.target;
if (settings.dhw.enable && newDHWTemp != currentDHWTemp) {
if (newDHWTemp < vars.parameters.dhwMinTemp || newDHWTemp > vars.parameters.dhwMaxTemp) {
newDHWTemp = constrain(newDHWTemp, vars.parameters.dhwMinTemp, vars.parameters.dhwMaxTemp);
}
INFO_F("Set DHW temp = %u \n", newDHWTemp);
INFO_F("Set DHW temp = %u\r\n", newDHWTemp);
// Записываем заданную температуру ГВС
if (ot.setDHWSetpoint(newDHWTemp)) {
if (ot->setDHWSetpoint(newDHWTemp)) {
currentDHWTemp = newDHWTemp;
} else {
WARN("Failed set DHW temp");
}
}
//
// Температура отопления
if (fabs(vars.parameters.heatingSetpoint - currentHeatingTemp) > 0.0001) {
INFO_F("Set heating temp = %u \n", vars.parameters.heatingSetpoint);
if (heatingEnable && fabs(vars.parameters.heatingSetpoint - currentHeatingTemp) > 0.0001) {
INFO_F("Setting heating temp = %u \n", vars.parameters.heatingSetpoint);
// Записываем заданную температуру
if (ot.setBoilerTemperature(vars.parameters.heatingSetpoint)) {
if (ot->setBoilerTemperature(vars.parameters.heatingSetpoint)) {
currentHeatingTemp = vars.parameters.heatingSetpoint;
} else {
WARN("Failed set heating temp");
}
}
@@ -111,35 +137,51 @@ protected:
float halfHyst = settings.heating.hysteresis / 2;
if (pump && vars.temperatures.indoor - settings.heating.target + 0.0001 >= halfHyst) {
pump = false;
} else if (!pump && vars.temperatures.indoor - settings.heating.target - 0.0001 <= -(halfHyst)) {
pump = true;
}
} else if (!pump) {
pump = true;
}
}
void static IRAM_ATTR handleInterrupt() {
ot.handleInterrupt();
ot->handleInterrupt();
}
void static sendRequestCallback(unsigned long request, unsigned long response, OpenThermResponseStatus status, byte attempt) {
printRequestDetail(ot.getDataID(request), status, request, response, attempt);
printRequestDetail(ot->getDataID(request), status, request, response, attempt);
}
void static responseCallback(unsigned long result, OpenThermResponseStatus status) {
static byte attempt = 0;
switch (status) {
case OpenThermResponseStatus::TIMEOUT:
if (++attempt > OPENTHERM_OFFLINE_TRESHOLD) {
if (vars.states.otStatus && ++attempt > OPENTHERM_OFFLINE_TRESHOLD) {
vars.states.otStatus = false;
attempt = OPENTHERM_OFFLINE_TRESHOLD;
}
break;
case OpenThermResponseStatus::SUCCESS:
attempt = 0;
vars.states.otStatus = true;
if (!vars.states.otStatus) {
vars.states.otStatus = true;
}
#ifdef LED_OT_RX_PIN
{
digitalWrite(LED_OT_RX_PIN, true);
unsigned long ts = millis();
while (millis() - ts < 2) {}
digitalWrite(LED_OT_RX_PIN, false);
}
#endif
break;
default:
break;
}
@@ -148,9 +190,15 @@ protected:
protected:
bool pump = true;
unsigned long prevUpdateNonEssentialVars = 0;
unsigned long startupTime = millis();
bool isReady() {
return millis() - startupTime > 60000;
}
void static printRequestDetail(OpenThermMessageID id, OpenThermResponseStatus status, unsigned long request, unsigned long response, byte attempt) {
sprintf(buffer, "OT REQUEST ID: %4d Request: %8x Response: %8x Attempt: %2d Status: %s", id, request, response, attempt, ot.statusToString(status));
sprintf(buffer, "OT REQUEST ID: %4d Request: %8lx Response: %8lx Attempt: %2d Status: %s", id, request, response, attempt, ot->statusToString(status));
if (status != OpenThermResponseStatus::SUCCESS) {
//WARN(buffer);
DEBUG(buffer);
@@ -159,267 +207,7 @@ protected:
}
}
/*
bool getBoilerTemp()
{
unsigned long response;
return sendRequest(ot.buildGetBoilerTemperatureRequest(),response);
}
bool getDHWTemp()
{
unsigned long response;
unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Tdhw, 0);
return sendRequest(request,response);
}
bool getOutsideTemp()
{
unsigned long response;
unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Toutside, 0);
return sendRequest(request,response);
}
bool setDHWTemp(float val)
{
unsigned long request = ot.buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::TdhwSet, ot.temperatureToData(val));
unsigned long response;
return sendRequest(request,response);
}
bool getFaultCode()
{
unsigned long response;
unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0);
return sendRequest(request,response);
}
bool getModulationLevel() {
unsigned long response;
unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0);
return sendRequest(request,response);
}
bool getPressure() {
unsigned long response;
unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::CHPressure, 0);
return sendRequest(request,response);
}
bool sendRequest(unsigned long request, unsigned long& response)
{
send_newts = millis();
if (send_newts - send_ts < 200) {
// Преждем чем слать что то - надо подождать 100ms согласно специфиикации протокола ОТ
delay(200 - (send_newts - send_ts));
}
bool result = ot.sendRequestAync(request);
if(!result) {
WARN("Не могу отправить запрос");
WARN("Шина " + ot.isReady() ? "готова" : "не готова");
return false;
}
while (!ot.isReady())
{
ot.process();
yield(); // This is local Task yield() call which allow us to switch to another task in scheduler
}
send_ts = millis();
response = ot_response;
//printRequestDetail(ot.getDataID(request), request, response);
return true; // Response is global variable
}
void testSupportedIDs()
{
// Basic
unsigned long request;
unsigned long response;
OpenThermMessageID id;
//Command
id = OpenThermMessageID::Command;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//ASFlags
id = OpenThermMessageID::ASFflags;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//TrOverride
id = OpenThermMessageID::TrOverride;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//TSP
id = OpenThermMessageID::TSP;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//TSPindexTSPvalue
id = OpenThermMessageID::TSPindexTSPvalue;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//FHBsize
id = OpenThermMessageID::FHBsize;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//FHBindexFHBvalue
id = OpenThermMessageID::FHBindexFHBvalue;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//MaxCapacityMinModLevel
id = OpenThermMessageID::MaxCapacityMinModLevel;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//TrSet
id = OpenThermMessageID::TrSet;
request = ot.buildRequest(OpenThermRequestType::WRITE, id, ot.temperatureToData(21));
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//RelModLevel
id = OpenThermMessageID::RelModLevel;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//CHPressure
id = OpenThermMessageID::CHPressure;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//DHWFlowRate
id = OpenThermMessageID::DHWFlowRate;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//DayTime
id = OpenThermMessageID::DayTime;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//Date
id = OpenThermMessageID::Date;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//Year
id = OpenThermMessageID::Year;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//TrSetCH2
id = OpenThermMessageID::TrSetCH2;
request = ot.buildRequest(OpenThermRequestType::WRITE, id, ot.temperatureToData(21));
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//Tr
id = OpenThermMessageID::Tr;
request = ot.buildRequest(OpenThermRequestType::WRITE, id, ot.temperatureToData(21));
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//Tret
id = OpenThermMessageID::Tret;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//Texhaust
id = OpenThermMessageID::Texhaust;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//Hcratio
id = OpenThermMessageID::Hcratio;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//RemoteOverrideFunction
id = OpenThermMessageID::RemoteOverrideFunction;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//OEMDiagnosticCode
id = OpenThermMessageID::OEMDiagnosticCode;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//BurnerStarts
id = OpenThermMessageID::BurnerStarts;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//CHPumpStarts
id = OpenThermMessageID::CHPumpStarts;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//DHWPumpValveStarts
id = OpenThermMessageID::DHWPumpValveStarts;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//DHWBurnerStarts
id = OpenThermMessageID::DHWBurnerStarts;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//BurnerOperationHours
id = OpenThermMessageID::BurnerOperationHours;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//CHPumpOperationHours
id = OpenThermMessageID::CHPumpOperationHours;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//DHWPumpValveOperationHours
id = OpenThermMessageID::DHWPumpValveOperationHours;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
//DHWBurnerOperationHours
id = OpenThermMessageID::DHWBurnerOperationHours;
request = ot.buildRequest(OpenThermRequestType::READ, id, 0);
if(sendRequest(request,response))
printRequestDetail(id, ot.getLastResponseStatus(), request, response);
}
*/
void setMasterMemberIdCode() {
bool setMasterMemberIdCode() {
//=======================================================================================
// Эта группа элементов данных определяет информацию о конфигурации как на ведомых, так
// и на главных сторонах. Каждый из них имеет группу флагов конфигурации (8 бит)
@@ -430,40 +218,88 @@ protected:
// с "кодом идентификатора участника", который идентифицирует производителя устройства.
//=======================================================================================
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SConfigSMemberIDcode, 0)); // 0xFFFF
if (!ot.isValidResponse(response)) {
return;
}
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SConfigSMemberIDcode, 0)); // 0xFFFF
/*uint8_t flags = (response & 0xFFFF) >> 8;
DEBUG_F(
"MasterMemberIdCode:\r\n DHW present: %u\r\n Control type: %u\r\n Cooling configuration: %u\r\n DHW configuration: %u\r\n Pump control: %u\r\n CH2 present: %u\r\n Remote water filling function: %u\r\n Heat/cool mode control: %u\r\n Slave MemberID Code: %u\r\n",
flags & 0x01,
flags & 0x02,
flags & 0x04,
flags & 0x08,
flags & 0x10,
flags & 0x20,
flags & 0x40,
flags & 0x80,
response & 0xFF
);*/
vars.parameters.slaveMemberIdCode = response >> 0 & 0xFF;
ot.sendRequest(ot.buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::MConfigMMemberIDcode, vars.parameters.slaveMemberIdCode));
if (ot->isValidResponse(response)) {
vars.parameters.slaveMemberIdCode = response & 0xFF;
} else if ( settings.opentherm.memberIdCode <= 0 ) {
return false;
}
response = ot->sendRequest(ot->buildRequest(
OpenThermRequestType::WRITE,
OpenThermMessageID::MConfigMMemberIDcode,
settings.opentherm.memberIdCode > 0 ? settings.opentherm.memberIdCode : vars.parameters.slaveMemberIdCode
));
return ot->isValidResponse(response);
}
void updateMasterParameters() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::MasterVersion, 0x013F));
if (!ot.isValidResponse(response)) {
return;
bool setMaxModulationLevel(byte value) {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::MaxRelModLevelSetting, (unsigned int)(value * 256)));
return ot->isValidResponse(response);
}
bool setOpenThermVersionMaster() {
unsigned long response;
response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::OpenThermVersionSlave, 0));
if (!ot->isValidResponse(response)) {
return false;
}
// INFO_F("Opentherm version slave: %f\n", ot->getFloat(response));
response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::WRITE_DATA, OpenThermMessageID::OpenThermVersionMaster, response));
if (!ot->isValidResponse(response)) {
return false;
}
// INFO_F("Opentherm version master: %f\n", ot->getFloat(response));
return true;
}
bool updateMasterParameters() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::MasterVersion, 0x013F));
if (!ot->isValidResponse(response)) {
return false;
}
vars.parameters.masterType = (response & 0xFFFF) >> 8;
vars.parameters.masterVersion = response & 0xFF;
return true;
}
void updateSlaveParameters() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SlaveVersion, 0));
if (!ot.isValidResponse(response)) {
return;
bool updateSlaveParameters() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SlaveVersion, 0));
if (!ot->isValidResponse(response)) {
return false;
}
vars.parameters.slaveType = (response & 0xFFFF) >> 8;
vars.parameters.slaveVersion = response & 0xFF;
return true;
}
void updateMinMaxDhwTemp() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::TdhwSetUBTdhwSetLB, 0));
if (!ot.isValidResponse(response)) {
return;
bool updateMinMaxDhwTemp() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::TdhwSetUBTdhwSetLB, 0));
if (!ot->isValidResponse(response)) {
return false;
}
byte minTemp = response & 0xFF;
@@ -472,14 +308,17 @@ protected:
if (minTemp >= 0 && maxTemp > 0 && maxTemp > minTemp) {
vars.parameters.dhwMinTemp = minTemp;
vars.parameters.dhwMaxTemp = maxTemp;
return true;
}
return false;
}
void updateMinMaxHeatingTemp() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::MaxTSetUBMaxTSetLB, 0));
if (!ot.isValidResponse(response)) {
return;
bool updateMinMaxHeatingTemp() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::MaxTSetUBMaxTSetLB, 0));
if (!ot->isValidResponse(response)) {
return false;
}
byte minTemp = response & 0xFF;
@@ -488,55 +327,80 @@ protected:
if (minTemp >= 0 && maxTemp > 0 && maxTemp > minTemp) {
vars.parameters.heatingMinTemp = minTemp;
vars.parameters.heatingMaxTemp = maxTemp;
return true;
}
return false;
}
void updateOutsideTemp() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Toutside, 0));
if (ot.isValidResponse(response)) {
vars.temperatures.outdoor = ot.getFloat(response);
bool updateOutsideTemp() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Toutside, 0));
if (!ot->isValidResponse(response)) {
return false;
}
vars.temperatures.outdoor = ot->getFloat(response);
return true;
}
void updateHeatingTemp() {
unsigned long response = ot.sendRequest(ot.buildGetBoilerTemperatureRequest());
if (ot.isValidResponse(response)) {
vars.temperatures.heating = ot.getFloat(response);
bool updateHeatingTemp() {
unsigned long response = ot->sendRequest(ot->buildGetBoilerTemperatureRequest());
if (!ot->isValidResponse(response)) {
return false;
}
vars.temperatures.heating = ot->getFloat(response);
return true;
}
void updateDHWTemp() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermMessageType::READ_DATA, OpenThermMessageID::Tdhw, 0));
if (ot.isValidResponse(response)) {
vars.temperatures.dhw = ot.getFloat(response);
bool updateDHWTemp() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermMessageType::READ, OpenThermMessageID::Tdhw, 0));
if (!ot->isValidResponse(response)) {
return false;
}
vars.temperatures.dhw = ot->getFloat(response);
return true;
}
void updateFaultCode() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0));
bool updateFaultCode() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0));
if (ot.isValidResponse(response)) {
vars.states.faultCode = response & 0xFF;
if (!ot->isValidResponse(response)) {
return false;
}
vars.states.faultCode = response & 0xFF;
return true;
}
void updateModulationLevel() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0));
bool updateModulationLevel() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0));
if (ot.isValidResponse(response)) {
vars.sensors.modulation = ot.getFloat(response);
if (!ot->isValidResponse(response)) {
return false;
}
float modulation = ot->f88(response);
if (!vars.states.flame) {
vars.sensors.modulation = 0;
} else {
vars.sensors.modulation = modulation;
}
return true;
}
void updatePressure() {
unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::CHPressure, 0));
bool updatePressure() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::CHPressure, 0));
if (ot.isValidResponse(response)) {
vars.sensors.pressure = ot.getFloat(response);
if (!ot->isValidResponse(response)) {
return false;
}
vars.sensors.pressure = ot->getFloat(response);
return true;
}
};