Update to use ArduinoJson 6+ (#1071)

This commit is contained in:
h2zero authored and GitHub committed 2021-09-01 19:18:19 -05:00
1 parent 149712b573
commit ed4949f769
30 files changed
+452 -430

No files matched your search

+34 -34
View File
@@ -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);