use type safe SensorStateClass-es
This commit is contained in:
parent
391fa927ba
commit
57160661ec
26
src/enums.h
Normal file
26
src/enums.h
Normal file
@ -0,0 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
class EnumClass {
|
||||
const char* value = nullptr;
|
||||
public:
|
||||
EnumClass() {}
|
||||
|
||||
EnumClass(const char* v) {
|
||||
value = v;
|
||||
}
|
||||
|
||||
operator const char*() {
|
||||
return value;
|
||||
}
|
||||
|
||||
operator bool() {
|
||||
return value != nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
namespace Ha {
|
||||
struct SensorStateClass : EnumClass {
|
||||
SensorStateClass() : EnumClass() {}
|
||||
SensorStateClass(const char* value) : EnumClass(value) {}
|
||||
} MEASUREMENT{ "measurement" }, MEASUREMENT_ANGLE{ "measurement_angle" }, TOTAL{ "total" }, TOTAL_INCREASING{ "total_increasing" };
|
||||
}
|
||||
11
src/ha.h
11
src/ha.h
@ -2,6 +2,7 @@
|
||||
|
||||
#include <ArduinoJson.h>
|
||||
#include "list.h"
|
||||
#include "enums.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@ -289,7 +290,7 @@ namespace Ha {
|
||||
struct Sensor : Component, State {
|
||||
const char* unitMeasure = nullptr;
|
||||
unsigned int precision = 2;
|
||||
const char* sensorStateClass = nullptr;
|
||||
SensorStateClass sensorStateClass;
|
||||
inline static unordered_map<string, Sensor*> mapSensors;
|
||||
|
||||
Sensor(const char* name, const char* id) : Component(id, name, "sensor"), State(this) {
|
||||
@ -302,7 +303,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;
|
||||
if (sensorStateClass) jsonDoc["state_class"] = static_cast<const char*>(sensorStateClass);
|
||||
}
|
||||
|
||||
private:
|
||||
@ -315,7 +316,7 @@ namespace Ha {
|
||||
TemperatureSensor(const char* id, const char* name = "Temperature") : Sensor(name, id) {
|
||||
deviceClass = "temperature";
|
||||
unitMeasure = "°C";
|
||||
sensorStateClass = "measurement";
|
||||
sensorStateClass = MEASUREMENT;
|
||||
}
|
||||
};
|
||||
|
||||
@ -323,7 +324,7 @@ namespace Ha {
|
||||
HumiditySensor(const char* id, const char* name = "Humidity") : Sensor(name, id) {
|
||||
deviceClass = "humidity";
|
||||
unitMeasure = "%";
|
||||
sensorStateClass = "measurement";
|
||||
sensorStateClass = MEASUREMENT;
|
||||
}
|
||||
};
|
||||
|
||||
@ -411,7 +412,7 @@ namespace Ha {
|
||||
return *this;
|
||||
}
|
||||
|
||||
Builder& withSensorStateClass(const char* value) {
|
||||
Builder& withSensorStateClass(SensorStateClass value) {
|
||||
cmp->sensorStateClass = value;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user