#include "mqtt_discovery.hpp" #include #include "constants.h" static bool publish_config(PubSubClient* mqtt, const char* topic, const char* name, const char* unique_id, const char* value_template, const char* identifier, const char* device_class, const char* unit) { StaticJsonDocument<256> doc; doc["unique_id"] = unique_id; doc["name"] = name; doc["state_topic"] = TOPIC_STATE; doc["value_template"] = value_template; if (device_class != NULL) { doc["device_class"] = device_class; } if (unit != NULL) { doc["unit_of_measurement"] = unit; } auto device = doc.createNestedObject("device"); device["manufacturer"] = DEVICE_MANUFACTURER; device["name"] = DEVICE_NAME; device["model"] = DEVICE_MODEL; auto ident = device.createNestedArray("identifiers"); ident.add(identifier); String msg; serializeJson(doc, msg); auto payload = msg.c_str(); Serial.printf("Publishing configuration for %s (%zd bytes) to %s ... ", unique_id, strlen(payload), topic); auto r = mqtt->publish(topic, payload, true); Serial.println(r ? "OK" : "FAILED"); return r; } bool publish_all_config(PubSubClient* mqtt, const char* ident) { bool ret = true; publish_config(mqtt, TOPIC_CFG_MOISTURE, "Garden Sensor Moisture", "sensor.garden_sensor_moisture", "{{ value_json.moisture }}", ident, NULL, NULL); publish_config(mqtt, TOPIC_CFG_TEMPERATURE, "Garden Sensor Temperature", "sensor.garden_sensor_temperature", "{{ value_json.temperature }}", ident, "temperature", "°C"); publish_config(mqtt, TOPIC_CFG_BATTERY, "Garden Sensor Battery Level", "sensor.garden_sensor_battery_level", "{{ value_json.battery_level }}", ident, "voltage", "V"); publish_config(mqtt, TOPIC_CFG_RSSI, "Garden Sensor Signal Strength", "sensor.garden_sensor_rssi", "{{ value_json.rssi }}", ident, "signal_strength", "dBm"); return ret; }