From c62e73d21eaa330b49a104ad63e80924c07c1dea Mon Sep 17 00:00:00 2001 From: proddy Date: Mon, 13 Sep 2021 20:45:56 +0200 Subject: [PATCH] added HA state_class https://github.com/emsesp/EMS-ESP/issues/776 --- src/mqtt.cpp | 28 +++++++++++++++++++++------- src/version.h | 2 +- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 61aeb1969..c42cc6260 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -1018,6 +1018,8 @@ void Mqtt::publish_mqtt_ha_sensor(uint8_t type, // EMSdevice // normal HA sensor, not a boolean one snprintf_P(topic, sizeof(topic), PSTR("sensor/%s/%s/config"), mqtt_base_.c_str(), uniq.c_str()); // topic + bool set_state_class = false; + // unit of measure and map the HA icon if (uom != DeviceValueUOM::NONE) { doc["unit_of_meas"] = EMSdevice::uom_to_string(uom); @@ -1025,10 +1027,12 @@ void Mqtt::publish_mqtt_ha_sensor(uint8_t type, // EMSdevice switch (uom) { case DeviceValueUOM::DEGREES: - doc["ic"] = F_(icondegrees); + doc["ic"] = F_(icondegrees); + set_state_class = true; break; case DeviceValueUOM::PERCENT: - doc["ic"] = F_(iconpercent); + doc["ic"] = F_(iconpercent); + set_state_class = true; break; case DeviceValueUOM::SECONDS: case DeviceValueUOM::MINUTES: @@ -1039,21 +1043,26 @@ void Mqtt::publish_mqtt_ha_sensor(uint8_t type, // EMSdevice doc["ic"] = F_(iconkb); break; case DeviceValueUOM::LMIN: - doc["ic"] = F_(iconlmin); + doc["ic"] = F_(iconlmin); + set_state_class = true; break; case DeviceValueUOM::WH: case DeviceValueUOM::KWH: - doc["ic"] = F_(iconkwh); + doc["ic"] = F_(iconkwh); + set_state_class = true; break; case DeviceValueUOM::UA: - doc["ic"] = F_(iconua); + doc["ic"] = F_(iconua); + set_state_class = true; break; case DeviceValueUOM::BAR: - doc["ic"] = F_(iconbar); + doc["ic"] = F_(iconbar); + set_state_class = true; break; case DeviceValueUOM::W: case DeviceValueUOM::KW: - doc["ic"] = F_(iconkw); + doc["ic"] = F_(iconkw); + set_state_class = true; break; case DeviceValueUOM::DBM: doc["ic"] = F_(icondbm); @@ -1065,6 +1074,11 @@ void Mqtt::publish_mqtt_ha_sensor(uint8_t type, // EMSdevice default: break; } + + // see if we need to set the state_class + if (set_state_class) { + doc["state_class"] = F("measurement"); + } } JsonObject dev = doc.createNestedObject("dev"); diff --git a/src/version.h b/src/version.h index 5dfc1939e..ba7ae7f8e 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.2.2b3" +#define EMSESP_APP_VERSION "3.2.2b4"