Update to use ArduinoJson 6+ (#1071)
This commit is contained in:
1 parent
149712b573
commit
ed4949f769
30 files changed
+452
-430
No files matched your search
+34
-34
@@ -72,8 +72,8 @@ void createDiscovery(const char* sensor_type,
|
||||
const char* payload_available, const char* payload_not_avalaible, bool gateway_entity, const char* cmd_topic,
|
||||
const char* device_name, const char* device_manufacturer, const char* device_model, const char* device_mac, bool retainCmd) {
|
||||
const int JSON_MSG_CALC_BUFFER = JSON_OBJECT_SIZE(14) + JSON_OBJECT_SIZE(5) + JSON_ARRAY_SIZE(1);
|
||||
StaticJsonBuffer<JSON_MSG_CALC_BUFFER> jsonBuffer;
|
||||
JsonObject& sensor = jsonBuffer.createObject();
|
||||
StaticJsonDocument<JSON_MSG_CALC_BUFFER> jsonBuffer;
|
||||
JsonObject sensor = jsonBuffer.to<JsonObject>();
|
||||
|
||||
// If a component cannot render it's state (f.i. KAKU relays) no state topic
|
||||
// should be added. Without a state topic HA will use optimistic mode for the
|
||||
@@ -92,76 +92,76 @@ void createDiscovery(const char* sensor_type,
|
||||
strcpy(state_topic, "+/+");
|
||||
}
|
||||
strcat(state_topic, st_topic);
|
||||
sensor.set("stat_t", state_topic);
|
||||
sensor["stat_t"] = state_topic;
|
||||
}
|
||||
|
||||
sensor.set("name", s_name); //name
|
||||
sensor.set("uniq_id", unique_id); //unique_id
|
||||
sensor["name"] = s_name; //name
|
||||
sensor["uniq_id"] = unique_id; //unique_id
|
||||
if (retainCmd)
|
||||
sensor.set("retain", retainCmd); // Retain command
|
||||
sensor["retain"] = retainCmd; // Retain command
|
||||
if (device_class[0])
|
||||
sensor.set("dev_cla", device_class); //device_class
|
||||
sensor["dev_cla"] = device_class; //device_class
|
||||
if (value_template[0])
|
||||
sensor.set("val_tpl", value_template); //value_template
|
||||
sensor["val_tpl"] = value_template; //value_template
|
||||
if (payload_on[0])
|
||||
sensor.set("pl_on", payload_on); // payload_on
|
||||
sensor["pl_on"] = payload_on; // payload_on
|
||||
if (payload_off[0])
|
||||
sensor.set("pl_off", payload_off); //payload_off
|
||||
sensor["pl_off"] = payload_off; //payload_off
|
||||
if (unit_of_meas[0])
|
||||
sensor.set("unit_of_meas", unit_of_meas); //unit_of_measurement*/
|
||||
sensor["unit_of_meas"] = unit_of_meas; //unit_of_measurement*/
|
||||
if (off_delay != 0)
|
||||
sensor.set("off_delay", off_delay); //off_delay
|
||||
sensor["off_delay"] = off_delay; //off_delay
|
||||
if (payload_available[0])
|
||||
sensor.set("pl_avail", payload_available); // payload_on
|
||||
sensor["pl_avail"] = payload_available; // payload_on
|
||||
if (payload_not_avalaible[0])
|
||||
sensor.set("pl_not_avail", payload_not_avalaible); //payload_off
|
||||
sensor["pl_not_avail"] = payload_not_avalaible; //payload_off
|
||||
|
||||
if (cmd_topic[0]) {
|
||||
char command_topic[mqtt_topic_max_size];
|
||||
strcpy(command_topic, mqtt_topic);
|
||||
strcat(command_topic, gateway_name);
|
||||
strcat(command_topic, cmd_topic);
|
||||
sensor.set("cmd_t", command_topic); //command_topic
|
||||
sensor["cmd_t"] = command_topic; //command_topic
|
||||
}
|
||||
|
||||
if (gateway_entity) {
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonDeviceBuffer;
|
||||
JsonObject& device = jsonDeviceBuffer.createObject();
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> jsonDeviceBuffer;
|
||||
JsonObject device = jsonDeviceBuffer.to<JsonObject>();
|
||||
char JSONmessageBuffer[JSON_MSG_BUFFER];
|
||||
modules.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));
|
||||
serializeJson(modules, JSONmessageBuffer, sizeof(JSONmessageBuffer));
|
||||
Log.notice(F("Received json : %s" CR), JSONmessageBuffer);
|
||||
device.set("name", gateway_name);
|
||||
device.set("model", JSONmessageBuffer);
|
||||
device.set("manufacturer", DEVICEMANUFACTURER);
|
||||
device.set("sw_version", OMG_VERSION);
|
||||
JsonArray& identifiers = device.createNestedArray("identifiers");
|
||||
device["name"] = gateway_name;
|
||||
device["model"] = JSONmessageBuffer;
|
||||
device["manufacturer"] = DEVICEMANUFACTURER;
|
||||
device["sw_version"] = OMG_VERSION;
|
||||
JsonArray identifiers = device.createNestedArray("identifiers");
|
||||
identifiers.add(getMacAddress());
|
||||
sensor.set("device", device); //device representing the board
|
||||
sensor["device"] = device; //device representing the board
|
||||
} else {
|
||||
char deviceid[13];
|
||||
memcpy(deviceid, &unique_id[0], 12);
|
||||
deviceid[12] = '\0';
|
||||
StaticJsonBuffer<JSON_MSG_BUFFER> jsonDeviceBuffer;
|
||||
JsonObject& device = jsonDeviceBuffer.createObject();
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> jsonDeviceBuffer;
|
||||
JsonObject device = jsonDeviceBuffer.to<JsonObject>();
|
||||
if (device_mac[0] != 0) {
|
||||
JsonArray& connections = device.createNestedArray("connections");
|
||||
JsonArray& connection_mac = connections.createNestedArray();
|
||||
JsonArray connections = device.createNestedArray("connections");
|
||||
JsonArray connection_mac = connections.createNestedArray();
|
||||
connection_mac.add("mac");
|
||||
connection_mac.add(device_mac);
|
||||
}
|
||||
JsonArray& identifiers = device.createNestedArray("identifiers");
|
||||
JsonArray identifiers = device.createNestedArray("identifiers");
|
||||
identifiers.add(deviceid);
|
||||
if (device_manufacturer[0]) {
|
||||
device.set("manufacturer", device_manufacturer);
|
||||
device["manufacturer"] = device_manufacturer;
|
||||
}
|
||||
if (device_model[0]) {
|
||||
device.set("model", device_model);
|
||||
device["model"] = device_model;
|
||||
}
|
||||
if (device_name[0]) {
|
||||
device.set("name", device_name);
|
||||
device["name"] = device_name;
|
||||
}
|
||||
device.set("via_device", gateway_name); //device name of the board
|
||||
sensor.set("device", device); //device representing the actual sensor/switch device
|
||||
device["via_device"] = gateway_name; //device name of the board
|
||||
sensor["device"] = device; //device representing the actual sensor/switch device
|
||||
}
|
||||
String topic = String(discovery_Topic) + "/" + String(sensor_type) + "/" + String(unique_id) + "/config";
|
||||
pub_custom_topic((char*)topic.c_str(), sensor, true);
|
||||
|
||||
Reference in new issue
Block a user