From bfddd68854c4a9c0022912d5656f955cd9a8cd00 Mon Sep 17 00:00:00 2001 From: Nicu Hodos Date: Mon, 10 Oct 2022 23:29:01 +0200 Subject: [PATCH] publish config with device --- include/mqtt.h | 77 +++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/include/mqtt.h b/include/mqtt.h index 6b341f8..258b63f 100644 --- a/include/mqtt.h +++ b/include/mqtt.h @@ -32,36 +32,56 @@ namespace Mqtt { const char* bmpTopic = "homeassistant/sensor/esp_clock/state"; - void publishConfig() { - StaticJsonDocument<255> jsonDoc; + void buildDeviceConfig(JsonDocument& jsonDoc) { JsonObject device = jsonDoc.createNestedObject("device"); device["name"] = "ESP Clock"; + JsonArray connections = device.createNestedArray("connections"); + JsonArray mac = connections.createNestedArray(); + mac.add("mac"); + mac.add("24:62:AB:09:4B:D6"); + } - JsonObject sensor = jsonDoc.createNestedObject("sensor"); - sensor["device_class"] = "temperature"; - sensor["name"] = "Livingroom Temperature"; - sensor["unique_id"] = "livingroom_temperature"; - sensor["unit_of_measurement"] = "°C"; - sensor["state_topic"] = bmpTopic; - sensor["value_template"] = "{{ value_json.temperature}}"; - sensor["device"] = device; - char message[255]; - serializeJson(jsonDoc, message); - client.publish("homeassistant/sensor/esp_clock_temperature/config", 0, false, message); + void buildTempConfig(JsonDocument& jsonDoc) { + buildDeviceConfig(jsonDoc); + jsonDoc["device_class"] = "temperature"; + jsonDoc["name"] = "Livingroom Temperature"; + jsonDoc["unique_id"] = "livingroom_temperature"; + jsonDoc["unit_of_measurement"] = "°C"; + jsonDoc["state_topic"] = bmpTopic; + jsonDoc["value_template"] = "{{ value_json.temperature}}"; + } - jsonDoc.clear(); - sensor.clear(); - sensor = jsonDoc.createNestedObject("sensor"); - sensor["device_class"] = "pressure"; - sensor["name"] = "Livingroom Pressure"; - sensor["unique_id"] = "livingroom_pressure"; - sensor["unit_of_measurement"] = "hPa"; - sensor["state_topic"] = bmpTopic; - sensor["value_template"] = "{{ value_json.pressure}}"; - sensor["device"] = device; - char message1[255]; + void buildPressureConfig(JsonDocument& jsonDoc) { + buildDeviceConfig(jsonDoc); + jsonDoc["device_class"] = "pressure"; + jsonDoc["name"] = "Livingroom Pressure"; + jsonDoc["unique_id"] = "livingroom_pressure"; + jsonDoc["unit_of_measurement"] = "hPa"; + jsonDoc["state_topic"] = bmpTopic; + jsonDoc["value_template"] = "{{ value_json.pressure}}"; + } + + void publishTempConfig() { + StaticJsonDocument<512> jsonDoc; + buildTempConfig(jsonDoc); + + char message[512]; serializeJson(jsonDoc, message); - client.publish("homeassistant/sensor/esp_clock_pressure/config", 0, false, message1); + client.publish("homeassistant/sensor/esp_clock/temperature/config", 0, true, message); + } + + void publishPressureConfig() { + StaticJsonDocument<512> jsonDoc; + buildPressureConfig(jsonDoc); + + char message[512]; + serializeJson(jsonDoc, message); + client.publish("homeassistant/sensor/esp_clock/pressure/config", 0, true, message); + } + + void publishConfig() { + publishTempConfig(); + publishPressureConfig(); } void publishCommand() { @@ -79,12 +99,11 @@ namespace Mqtt { void publishBmp280() { Bmp::data.readAll(); StaticJsonDocument<255> jsonDoc; - JsonObject sensor = jsonDoc.createNestedObject("sensor"); - sensor["temperature"] = Bmp::data.temp; - sensor["pressure"] = Bmp::data.pressure; + jsonDoc["temperature"] = Bmp::data.temp; + jsonDoc["pressure"] = Bmp::data.pressure; char message[255]; serializeJson(jsonDoc, message); - client.publish(bmpTopic, 0, false, message); + client.publish(bmpTopic, 0, true, message); } void setup() {