From 391fa927ba5da639940042a1e87820e4156ffcfe Mon Sep 17 00:00:00 2001 From: Nicu Hodos Date: Thu, 5 Jun 2025 19:34:06 +0200 Subject: [PATCH] add support for SensorStateClass (used for long term statistics) and use it as default for Temperature and Humidity sensors --- src/ha.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/ha.h b/src/ha.h index 56d182e..7d436f3 100644 --- a/src/ha.h +++ b/src/ha.h @@ -289,6 +289,7 @@ namespace Ha { struct Sensor : Component, State { const char* unitMeasure = nullptr; unsigned int precision = 2; + const char* sensorStateClass = nullptr; inline static unordered_map mapSensors; Sensor(const char* name, const char* id) : Component(id, name, "sensor"), State(this) { @@ -301,6 +302,7 @@ namespace Ha { State::buildConfig(jsonDoc); if (unitMeasure) jsonDoc["unit_of_measurement"] = unitMeasure; if (isNumericSensor()) jsonDoc["suggested_display_precision"] = precision; + if (sensorStateClass) jsonDoc["state_class"] = sensorStateClass; } private: @@ -313,6 +315,7 @@ namespace Ha { TemperatureSensor(const char* id, const char* name = "Temperature") : Sensor(name, id) { deviceClass = "temperature"; unitMeasure = "°C"; + sensorStateClass = "measurement"; } }; @@ -320,6 +323,7 @@ namespace Ha { HumiditySensor(const char* id, const char* name = "Humidity") : Sensor(name, id) { deviceClass = "humidity"; unitMeasure = "%"; + sensorStateClass = "measurement"; } }; @@ -407,6 +411,11 @@ namespace Ha { return *this; } + Builder& withSensorStateClass(const char* value) { + cmp->sensorStateClass = value; + return *this; + } + Builder& withMin(unsigned int value) { cmp->min = value; return *this;