added DHW flow rate from OT

This commit is contained in:
Yurii
2023-11-23 04:41:39 +03:00
parent e82d47e1dc
commit 92a2cb9d56
4 changed files with 38 additions and 1 deletions

View File

@@ -940,6 +940,23 @@ public:
return publish(getTopic("sensor", "pressure").c_str(), doc); return publish(getTopic("sensor", "pressure").c_str(), doc);
} }
bool publishSensorDhwFlowRate(bool enabledByDefault = true) {
StaticJsonDocument<1024> doc;
doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_TOPIC)] = devicePrefix + F("/status");
doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault;
doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw_flow_rate");
doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw_flow_rate");
doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic");
doc[FPSTR(HA_STATE_CLASS)] = F("measurement");
doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("L/min");
doc[FPSTR(HA_NAME)] = F("DHW flow rate");
doc[FPSTR(HA_ICON)] = F("mdi:water-pump");
doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state");
doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.dhwFlowRate|float(0)|round(2) }}");
return publish(getTopic("sensor", "dhw_flow_rate").c_str(), doc);
}
bool publishNumberIndoorTemp(bool enabledByDefault = true) { bool publishNumberIndoorTemp(bool enabledByDefault = true) {
StaticJsonDocument<1536> doc; StaticJsonDocument<1536> doc;
@@ -1234,6 +1251,10 @@ public:
return publish(getTopic("number", "dhw_target").c_str()); return publish(getTopic("number", "dhw_target").c_str());
} }
bool deleteSensorDhwFlowRate() {
return publish(getTopic("sensor", "dhw_flow_rate").c_str());
}
bool deleteClimateDHW() { bool deleteClimateDHW() {
return publish(getTopic("climate", "dhw", "_").c_str()); return publish(getTopic("climate", "dhw", "_").c_str());
} }

View File

@@ -467,6 +467,7 @@ protected:
haHelper.publishNumberDHWMaxTemp(false); haHelper.publishNumberDHWMaxTemp(false);
haHelper.publishBinSensorDHW(); haHelper.publishBinSensorDHW();
haHelper.publishSensorDHWTemp(); haHelper.publishSensorDHWTemp();
haHelper.publishSensorDhwFlowRate(false);
} else { } else {
haHelper.deleteSwitchDHW(); haHelper.deleteSwitchDHW();
@@ -478,6 +479,7 @@ protected:
haHelper.deleteSensorDHWTemp(); haHelper.deleteSensorDHWTemp();
haHelper.deleteNumberDHWTarget(); haHelper.deleteNumberDHWTarget();
haHelper.deleteClimateDHW(); haHelper.deleteClimateDHW();
haHelper.deleteSensorDhwFlowRate();
} }
published = true; published = true;
@@ -601,6 +603,7 @@ protected:
doc["sensors"]["modulation"] = vars.sensors.modulation; doc["sensors"]["modulation"] = vars.sensors.modulation;
doc["sensors"]["pressure"] = vars.sensors.pressure; doc["sensors"]["pressure"] = vars.sensors.pressure;
doc["sensors"]["dhwFlowRate"] = vars.sensors.dhwFlowRate;
doc["temperatures"]["indoor"] = vars.temperatures.indoor; doc["temperatures"]["indoor"] = vars.temperatures.indoor;
doc["temperatures"]["outdoor"] = vars.temperatures.outdoor; doc["temperatures"]["outdoor"] = vars.temperatures.outdoor;

View File

@@ -180,8 +180,10 @@ protected:
if (settings.opentherm.dhwPresent) { if (settings.opentherm.dhwPresent) {
updateDHWTemp(); updateDHWTemp();
updateDHWFlowRate();
} else { } else {
vars.temperatures.dhw = 0; vars.temperatures.dhw = 0;
vars.sensors.dhwFlowRate = 0.0f;
} }
updateHeatingTemp(); updateHeatingTemp();
@@ -509,6 +511,16 @@ protected:
return true; return true;
} }
bool updateDHWFlowRate() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermMessageType::READ, OpenThermMessageID::DHWFlowRate, 0));
if (!ot->isValidResponse(response)) {
return false;
}
vars.sensors.dhwFlowRate = ot->getFloat(response);
return true;
}
bool updateFaultCode() { bool updateFaultCode() {
unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0)); unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0));

View File

@@ -101,6 +101,7 @@ struct Variables {
struct { struct {
float modulation = 0.0f; float modulation = 0.0f;
float pressure = 0.0f; float pressure = 0.0f;
float dhwFlowRate = 0.0f;
} sensors; } sensors;
struct { struct {