69 lines
2.1 KiB
C++

#include <ArduinoJson.h>
#define JSON_SIZE 512
namespace Ha {
void buildDeviceConfig(JsonDocument& jsonDoc) {
JsonObject device = jsonDoc.createNestedObject("device");
device["name"] = "ESP Clock";
device["suggested_area"] = "Living room";
JsonArray connections = device.createNestedArray("connections");
JsonArray mac = connections.createNestedArray();
mac.add("mac");
mac.add(WiFi.macAddress());
}
void buildCommandConfig(char(&output)[JSON_SIZE], const char* name, const char* uniqueId, const char* commandTopic) {
StaticJsonDocument<JSON_SIZE> jsonDoc;
buildDeviceConfig(jsonDoc);
jsonDoc["name"] = name;
jsonDoc["unique_id"] = uniqueId;
jsonDoc["command_topic"] = commandTopic;
serializeJson(jsonDoc, output);
}
struct SensorConfig {
const char* deviceClass;
const char* unitMeasure;
const char* valueTemplate;
void buildConfig(char(&output)[JSON_SIZE], const char* name, const char* uniqueId, const char* stateTopic) {
StaticJsonDocument<JSON_SIZE> jsonDoc;
buildDeviceConfig(jsonDoc);
jsonDoc["name"] = name;
jsonDoc["unique_id"] = uniqueId;
jsonDoc["state_topic"] = stateTopic;
jsonDoc["device_class"] = deviceClass;
jsonDoc["unit_of_measurement"] = unitMeasure;
jsonDoc["value_template"] = valueTemplate;
serializeJson(jsonDoc, output);
}
};
struct TemperatureConfig : SensorConfig {
TemperatureConfig() {
deviceClass = "temperature";
unitMeasure = "°C";
valueTemplate = "{{ value_json.temperature }}";
}
};
struct PressureConfig : SensorConfig {
PressureConfig() {
deviceClass = "pressure";
unitMeasure = "hPa";
valueTemplate = "{{ value_json.pressure }}";
}
};
struct AltitudeConfig : SensorConfig {
AltitudeConfig() {
deviceClass = "distance";
unitMeasure = "m";
valueTemplate = "{{ value_json.altitude }}";
}
};
}