add support for SensorStateClass (used for long term statistics) and use it as default for Temperature and Humidity sensors

This commit is contained in:
Nicu Hodos 2025-06-05 19:34:06 +02:00
parent 9b1ecf73ce
commit 391fa927ba

View File

@ -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<string, Sensor*> 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;