add oil tank sensor
This commit is contained in:
parent
6fd9bdc8ce
commit
965e158b6a
@ -17,6 +17,39 @@ struct SensorBuilder {
|
||||
}
|
||||
};
|
||||
|
||||
struct OilTankSensor : Sensor {
|
||||
OilTankSensor(const char* id) : Sensor("Depth", id) {
|
||||
deviceClass = "distance";
|
||||
unitMeasure = "cm";
|
||||
valueTemplate = "{{ value_json.sensor.value }}";
|
||||
}
|
||||
};
|
||||
|
||||
struct OilTankLevelSensor : Sensor {
|
||||
OilTankLevelSensor(const char* id) : Sensor("Level", id) {
|
||||
unitMeasure = "%";
|
||||
valueTemplate = "{{ 100 - ((value_json.sensor.value-7)|float*100/110)|round(2) }}";
|
||||
}
|
||||
|
||||
void buildUniqueId(char* uniqueId) override {
|
||||
sprintf(uniqueId, "level_%s", id);
|
||||
}
|
||||
|
||||
void buildConfigTopic() override {
|
||||
sprintf(configTopic, "homeassistant/%s/%s/level_%s/config", type, MAIN_DEVICE_ID, id);
|
||||
}
|
||||
};
|
||||
|
||||
struct OilSensorBuilder {
|
||||
static Sensor* build(const char* id) {
|
||||
Sensor* sensor = (new OilTankSensor("7"))->copyFromDevice(atTinyDevice)->withDeviceName("Oil tank")->withArea("Basement");
|
||||
(new OilTankLevelSensor(sensor->id))->asDevice(new DeviceConfig{sensor->mainDevice->id});
|
||||
(new VoltageSensor{id, "Battery voltage", "{{ value_json.sensor.diagnostic.voltage }}"})->asDevice(new DeviceConfig{sensor->mainDevice->id});
|
||||
(new BatterySensor{id, "Battery level", "{{ ((states('sensor.oil_tank_battery_voltage')|float-3.6)|round(2)*100/1.6)|int }}"})->asDevice(new DeviceConfig{sensor->mainDevice->id});
|
||||
return sensor;
|
||||
}
|
||||
};
|
||||
|
||||
struct PollinSwitch : Switch {
|
||||
const char* group;
|
||||
unsigned char channel;
|
||||
|
||||
@ -69,15 +69,20 @@ namespace Ha {
|
||||
}
|
||||
|
||||
virtual void buildUniqueId(char* uniqueId) = 0;
|
||||
|
||||
virtual void buildConfig(JsonDocument& jsonDoc) {
|
||||
if (String{"diagnostic"}.equals(entityCategory)) {
|
||||
|
||||
virtual void buildConfigTopic() {
|
||||
if (String{"diagnostic"}.equals(entityCategory) && deviceClass) {
|
||||
sprintf(configTopic, "homeassistant/%s/%s/%s_%s/config", type, MAIN_DEVICE_ID, deviceClass, id);
|
||||
} else {
|
||||
sprintf(configTopic, "homeassistant/%s/%s/%s/config", type, MAIN_DEVICE_ID, id);
|
||||
}
|
||||
}
|
||||
|
||||
virtual void buildConfig(JsonDocument& jsonDoc) {
|
||||
buildConfigTopic();
|
||||
if (mainDevice) mainDevice->buildConfig(jsonDoc);
|
||||
if (entityCategory) jsonDoc["entity_category"] = entityCategory;
|
||||
if (deviceClass) jsonDoc["device_class"] = deviceClass;
|
||||
jsonDoc["name"] = name;
|
||||
char uniqueId[50];
|
||||
buildUniqueId(uniqueId);
|
||||
@ -184,9 +189,7 @@ namespace Ha {
|
||||
|
||||
void buildConfig(JsonDocument& jsonDoc) override {
|
||||
EntityConfig::buildConfig(jsonDoc);
|
||||
if (entityCategory) jsonDoc["entity_category"] = entityCategory;
|
||||
jsonDoc["device_class"] = deviceClass;
|
||||
jsonDoc["unit_of_measurement"] = unitMeasure;
|
||||
if (unitMeasure) jsonDoc["unit_of_measurement"] = unitMeasure;
|
||||
if (valueTemplate) jsonDoc["value_template"] = valueTemplate;
|
||||
jsonDoc["state_topic"] = stateTopic;
|
||||
jsonDoc["suggested_display_precision"] = 2;
|
||||
@ -241,12 +244,4 @@ namespace Ha {
|
||||
valueTemplate = "{{ value_json.sensor.pressure }}";
|
||||
}
|
||||
};
|
||||
|
||||
// struct AltitudeSensor : Sensor {
|
||||
// AltitudeSensor(const char* name, const char* id) : Sensor(name, id) {
|
||||
// deviceClass = "distance";
|
||||
// unitMeasure = "m";
|
||||
// valueTemplate = "{{ value_json.sensor.altitude }}";
|
||||
// }
|
||||
// };
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ namespace Mqtt {
|
||||
AsyncMqttClient client;
|
||||
|
||||
void publishInit();
|
||||
void publishBme280();
|
||||
void disconnect();
|
||||
Task tReConnect(5 * TASK_MINUTE, TASK_FOREVER, []() {
|
||||
Serial.println("Connecting to MQTT...");
|
||||
@ -50,11 +49,8 @@ namespace Mqtt {
|
||||
};
|
||||
|
||||
Ha::Sensor* sensors[] = {
|
||||
SensorBuilder::withVoltage((new Ha::TemperatureSensor{"4"})->copyFromDevice(atTinyDevice)->withDeviceName("Oil tank room")->withArea("Basement"))
|
||||
// new Ha::TemperatureSensor{"Temperature", "temperature"},
|
||||
// new Ha::HumiditySensor{"Humidity", "humidity"},
|
||||
// new Ha::PressureSensor{"Pressure", "pressure"},
|
||||
// new Ha::AltitudeSensor{"Altitude", "altitude"}
|
||||
SensorBuilder::withVoltage((new Ha::TemperatureSensor{"4"})->copyFromDevice(atTinyDevice)->withDeviceName("Oil tank room")->withArea("Basement")),
|
||||
OilSensorBuilder::build("7")
|
||||
};
|
||||
|
||||
void publishComponentConfig(Ha::Component& component) {
|
||||
@ -81,17 +77,6 @@ namespace Mqtt {
|
||||
}
|
||||
}
|
||||
|
||||
void publishBme280() {
|
||||
// StaticJsonDocument<255> jsonDoc;
|
||||
// jsonDoc["temperature"] = Bme::data.temp;
|
||||
// jsonDoc["humidity"] = Bme::data.humidity;
|
||||
// jsonDoc["pressure"] = Bme::data.pressure;
|
||||
// jsonDoc["altitude"] = Bme::data.altitude;
|
||||
// char message[255];
|
||||
// serializeJson(jsonDoc, message);
|
||||
// publish(Ha::Sensor::stateTopic, message);
|
||||
}
|
||||
|
||||
void onMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
|
||||
char msg[len + 1];
|
||||
memcpy(msg, payload, len);
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
],
|
||||
"settings": {
|
||||
"files.associations": {
|
||||
"*.yaml": "esphome",
|
||||
"functional": "cpp",
|
||||
"queue": "cpp",
|
||||
"array": "cpp",
|
||||
@ -49,7 +50,8 @@
|
||||
"algorithm": "cpp",
|
||||
"iterator": "cpp",
|
||||
"memory": "cpp",
|
||||
"variant": "cpp"
|
||||
"variant": "cpp",
|
||||
"string_view": "cpp"
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user