54 lines
2.1 KiB
C++
54 lines
2.1 KiB
C++
#include "mqtt_discovery.hpp"
|
|
|
|
#include <ArduinoJson.h>
|
|
|
|
#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;
|
|
} |