Compacting code

This commit is contained in:
fvanroie 2021-02-07 23:48:07 +01:00
parent 99ef38d40c
commit 869bdf4dd9

View File

@ -34,28 +34,41 @@ void mqtt_ha_send_json(char * topic, JsonDocument & doc)
mqttClient.endPublish(); mqttClient.endPublish();
} }
void mqtt_ha_add_device(JsonDocument & doc) // adds the device identifiers to the HA MQTT auto-discovery message
void mqtt_ha_add_device_ids(JsonDocument & doc)
{ {
JsonObject device = doc.createNestedObject(F("device")); JsonObject device = doc.createNestedObject(F("device"));
JsonArray ids = device.createNestedArray(F("ids")); JsonArray ids = device.createNestedArray(F("ids"));
ids.add(mqttNodeName); ids.add(mqttNodeName);
ids.add(HASP_MAC_ADDRESS_STR); ids.add(HASP_MAC_ADDRESS_STR);
char version[32]; char buffer[32];
haspGetVersion(version, sizeof(version)); haspGetVersion(buffer, sizeof(buffer));
device[F("sw")] = version; device[F("sw")] = buffer;
device[F("name")] = mqttNodeName; device[F("name")] = mqttNodeName;
device[F("mdl")] = F(PIOENV); device[F("mdl")] = F(PIOENV);
device[F("mf")] = F("hasp-lvgl"); device[F("mf")] = F(D_MANUFACTURER);
doc[F("~")] = mqttNodeTopic; doc[F("~")] = mqttNodeTopic;
} }
// adds the name and unique_id to the HA MQTT auto-discovery message
void mqtt_ha_add_unique_id(JsonDocument & doc, char * item)
{
char buffer[64];
snprintf_P(buffer, sizeof(buffer), PSTR("HASP %s %s"), mqttNodeName, item);
doc[F("name")] = buffer;
snprintf_P(buffer, sizeof(buffer), PSTR("hasp_%s-%s"), HASP_MAC_ADDRESS, item);
doc[F("uniq_id")] = buffer;
}
void mqtt_ha_register_button(uint8_t page, uint8_t id) void mqtt_ha_register_button(uint8_t page, uint8_t id)
{ {
StaticJsonDocument<640> doc; StaticJsonDocument<640> doc;
mqtt_ha_add_device(doc); mqtt_ha_add_device_ids(doc);
char buffer[128]; char buffer[128];
snprintf_P(buffer, sizeof(buffer), PSTR(HASP_OBJECT_NOTATION), page, id); snprintf_P(buffer, sizeof(buffer), PSTR(HASP_OBJECT_NOTATION), page, id);
@ -97,7 +110,7 @@ void mqtt_ha_register_button(uint8_t page, uint8_t id)
void mqtt_ha_register_switch(uint8_t page, uint8_t id) void mqtt_ha_register_switch(uint8_t page, uint8_t id)
{ {
StaticJsonDocument<640> doc; StaticJsonDocument<640> doc;
mqtt_ha_add_device(doc); mqtt_ha_add_device_ids(doc);
char buffer[128]; char buffer[128];
snprintf_P(buffer, sizeof(buffer), PSTR(HASP_OBJECT_NOTATION), page, id); snprintf_P(buffer, sizeof(buffer), PSTR(HASP_OBJECT_NOTATION), page, id);
@ -105,9 +118,9 @@ void mqtt_ha_register_switch(uint8_t page, uint8_t id)
snprintf_P(buffer, sizeof(buffer), PSTR("~state/" HASP_OBJECT_NOTATION), page, id); snprintf_P(buffer, sizeof(buffer), PSTR("~state/" HASP_OBJECT_NOTATION), page, id);
doc[F("t")] = buffer; // topic doc[F("t")] = buffer; // topic
doc[F("atype")] = "binary_sensor"; // automation_type doc[F("atype")] = F("binary_sensor"); // automation_type
doc[F("pl")] = "SHORT"; // payload doc[F("pl")] = F("SHORT"); // payload
doc[F("type")] = "button_short_release"; doc[F("type")] = F("button_short_release");
snprintf_P(buffer, sizeof(buffer), PSTR("%s/device_automation/%s/" HASP_OBJECT_NOTATION "_%s/config"), snprintf_P(buffer, sizeof(buffer), PSTR("%s/device_automation/%s/" HASP_OBJECT_NOTATION "_%s/config"),
discovery_prefix, mqttNodeName, page, id, "short"); discovery_prefix, mqttNodeName, page, id, "short");
@ -118,26 +131,16 @@ void mqtt_ha_register_switch(uint8_t page, uint8_t id)
void mqtt_ha_register_connectivity() void mqtt_ha_register_connectivity()
{ {
StaticJsonDocument<640> doc; StaticJsonDocument<640> doc;
mqtt_ha_add_device(doc);
char buffer[128];
char item[16]; char item[16];
snprintf_P(item, sizeof(item), PSTR("connectivity")); snprintf_P(item, sizeof(item), PSTR("connectivity"));
doc[F("device_class")] = item; // start from static keys and values that do not change
deserializeJson(doc, F("{\"device_class\":\"connectivity\",\"stat_t\":\"~LWT\",\"pl_on\":\"online\",\"pl_off\":"
snprintf_P(buffer, sizeof(buffer), PSTR("HASP %s %s"), mqttNodeName, item); "\"offline\",\"json_attr_t\":\"~state/statusupdate\"}"));
doc[F("name")] = buffer; mqtt_ha_add_device_ids(doc);
mqtt_ha_add_unique_id(doc, item);
doc[F("stat_t")] = F("~LWT");
doc[F("pl_on")] = F("online");
doc[F("pl_off")] = F("offline");
doc[F("json_attr_t")] = F("~state/statusupdate");
snprintf_P(buffer, sizeof(buffer), PSTR("hasp_%s-%s"), HASP_MAC_ADDRESS, item);
doc[F("uniq_id")] = buffer;
char buffer[128];
snprintf_P(buffer, sizeof(buffer), PSTR("%s/binary_sensor/%s/%s/config"), discovery_prefix, mqttNodeName, item); snprintf_P(buffer, sizeof(buffer), PSTR("%s/binary_sensor/%s/%s/config"), discovery_prefix, mqttNodeName, item);
mqtt_ha_send_json(buffer, doc); mqtt_ha_send_json(buffer, doc);
} }
@ -145,28 +148,24 @@ void mqtt_ha_register_connectivity()
void mqtt_ha_register_backlight() void mqtt_ha_register_backlight()
{ {
StaticJsonDocument<640> doc; StaticJsonDocument<640> doc;
mqtt_ha_add_device(doc);
char buffer[128];
char item[16]; char item[16];
snprintf_P(item, sizeof(item), PSTR("backlight")); snprintf_P(item, sizeof(item), PSTR("backlight"));
snprintf_P(buffer, sizeof(buffer), PSTR("HASP %s %s"), mqttNodeName, item); // start from static keys and values that do not change
doc[F("name")] = buffer; deserializeJson(doc, F("{"
"\"cmd_t\":\"~command/light\","
"\"stat_t\":\"~state/light\","
"\"avty_t\":\"~LWT\","
"\"bri_stat_t\":\"~state/dim\","
"\"bri_cmd_t\":\"~command/dim\","
"\"bri_scl\":100}"));
mqtt_ha_add_device_ids(doc);
mqtt_ha_add_unique_id(doc, item);
doc[F("cmd_t")] = F("~command/light"); // doc[F("pl_on")] = F("ON");
doc[F("stat_t")] = F("~state/light"); // doc[F("pl_off")] = F("OFF");
doc[F("pl_on")] = F("ON");
doc[F("pl_off")] = F("OFF");
doc[F("avty_t")] = F("~LWT");
doc[F("bri_stat_t")] = F("~state/dim");
doc[F("bri_cmd_t")] = F("~command/dim");
doc[F("bri_scl")] = 100;
snprintf_P(buffer, sizeof(buffer), PSTR("hasp_%s-%s"), HASP_MAC_ADDRESS, item);
doc[F("uniq_id")] = buffer;
char buffer[128];
snprintf_P(buffer, sizeof(buffer), PSTR("%s/light/%s/%s/config"), discovery_prefix, mqttNodeName, item); snprintf_P(buffer, sizeof(buffer), PSTR("%s/light/%s/%s/config"), discovery_prefix, mqttNodeName, item);
mqtt_ha_send_json(buffer, doc); mqtt_ha_send_json(buffer, doc);
} }
@ -174,34 +173,30 @@ void mqtt_ha_register_backlight()
void mqtt_ha_register_moodlight() void mqtt_ha_register_moodlight()
{ {
DynamicJsonDocument doc(1024); DynamicJsonDocument doc(1024);
mqtt_ha_add_device(doc);
char buffer[128];
char item[16]; char item[16];
snprintf_P(item, sizeof(item), PSTR("moodlight")); snprintf_P(item, sizeof(item), PSTR("moodlight"));
snprintf_P(buffer, sizeof(buffer), PSTR("HASP %s %s"), mqttNodeName, item); // start from static keys and values that do not change
doc[F("name")] = buffer; deserializeJson(doc, F("{"
"\"cmd_t\":\"~command/moodlight\","
"\"stat_t\":\"~state/moodlight\","
"\"avty_t\":\"~LWT\","
"\"bri_stat_t\":\"~state/moodlight/dim\","
"\"bri_cmd_t\":\"~command/moodlight/dim\","
"\"bri_scl\":100,"
"\"rgb_stat_t\":\"~state/moodlight/rgb\","
"\"rgb_cmd_t\":\"~command/moodlight/rgb\"}"));
mqtt_ha_add_device_ids(doc);
mqtt_ha_add_unique_id(doc, item);
doc[F("cmd_t")] = F("~command/moodlight"); // doc[F("pl_on")] = F("ON");
doc[F("stat_t")] = F("~state/moodlight"); // doc[F("pl_off")] = F("OFF");
doc[F("pl_on")] = F("ON");
doc[F("pl_off")] = F("OFF");
doc[F("avty_t")] = F("~LWT");
doc[F("bri_stat_t")] = F("~state/moodlight/dim");
doc[F("bri_cmd_t")] = F("~command/moodlight/dim");
doc[F("bri_scl")] = 100;
doc[F("rgb_stat_t")] = F("~state/moodlight/rgb");
doc[F("rgb_cmd_t")] = F("~command/moodlight/rgb");
// doc[F("state_value_template")] = F("~command/moodlight/light"); // doc[F("state_value_template")] = F("~command/moodlight/light");
// doc[F("brightness_value_template")] = F("{{ value_json.brightness }}"); // doc[F("brightness_value_template")] = F("{{ value_json.brightness }}");
// doc[F("rgb_command_template")] = F("{{ '%02x%02x%02x0000'| format(red, green, blue) }}"); // doc[F("rgb_command_template")] = F("{{ '%02x%02x%02x0000'| format(red, green, blue) }}");
snprintf_P(buffer, sizeof(buffer), PSTR("hasp_%s-%s"), HASP_MAC_ADDRESS, item); char buffer[128];
doc[F("uniq_id")] = buffer;
snprintf_P(buffer, sizeof(buffer), PSTR("%s/light/%s/%s/config"), discovery_prefix, mqttNodeName, item); snprintf_P(buffer, sizeof(buffer), PSTR("%s/light/%s/%s/config"), discovery_prefix, mqttNodeName, item);
mqtt_ha_send_json(buffer, doc); mqtt_ha_send_json(buffer, doc);
} }
@ -209,26 +204,15 @@ void mqtt_ha_register_moodlight()
void mqtt_ha_register_idle() void mqtt_ha_register_idle()
{ {
StaticJsonDocument<640> doc; StaticJsonDocument<640> doc;
mqtt_ha_add_device(doc);
char buffer[128];
char item[16]; char item[16];
snprintf_P(item, sizeof(item), PSTR("idle")); snprintf_P(item, sizeof(item), PSTR("idle"));
snprintf_P(buffer, sizeof(buffer), PSTR("HASP %s idle state"), mqttNodeName); // start from static keys and values that do not change
doc[F("name")] = buffer; deserializeJson(doc, F("{\"stat_t\":\"~state/idle\",\"avty_t\":\"~LWT\",\"json_attr_t\":\"~state/statusupdate\"}"));
mqtt_ha_add_device_ids(doc);
// doc[F("cmd_t")] = F("~command/wakeup"); mqtt_ha_add_unique_id(doc, item);
doc[F("stat_t")] = F("~state/idle");
doc[F("avty_t")] = F("~LWT");
doc[F("json_attr_t")] = F("~state/statusupdate");
snprintf_P(buffer, sizeof(buffer), PSTR("hasp_%s-%s"), HASP_MAC_ADDRESS, item);
doc[F("uniq_id")] = buffer;
// "value_template" : "{{ value | capitalize }}",
// "icon" : "hass:card",
char buffer[128];
snprintf_P(buffer, sizeof(buffer), PSTR("%s/sensor/%s/%s/config"), discovery_prefix, mqttNodeName, item); snprintf_P(buffer, sizeof(buffer), PSTR("%s/sensor/%s/%s/config"), discovery_prefix, mqttNodeName, item);
mqtt_ha_send_json(buffer, doc); mqtt_ha_send_json(buffer, doc);
} }
@ -236,23 +220,15 @@ void mqtt_ha_register_idle()
void mqtt_ha_register_activepage() void mqtt_ha_register_activepage()
{ {
StaticJsonDocument<640> doc; StaticJsonDocument<640> doc;
mqtt_ha_add_device(doc);
char buffer[128];
char item[16]; char item[16];
snprintf_P(item, sizeof(item), PSTR("page")); snprintf_P(item, sizeof(item), PSTR("page"));
snprintf_P(buffer, sizeof(buffer), PSTR("%s HASP active page"), mqttNodeName); // start from static keys and values that do not change
doc[F("name")] = buffer; deserializeJson(doc, F("{\"cmd_t\":\"~command/page\",\"stat_t\":\"~state/page\",\"avty_t\":\"~LWT\"}"));
mqtt_ha_add_device_ids(doc);
doc[F("cmd_t")] = F("~command/page"); mqtt_ha_add_unique_id(doc, item);
doc[F("stat_t")] = F("~state/page");
doc[F("avty_t")] = F("~LWT");
doc[F("json_attr_t")] = F("~state/statusupdate");
snprintf_P(buffer, sizeof(buffer), PSTR("hasp_%s-%s"), HASP_MAC_ADDRESS, item);
doc[F("uniq_id")] = buffer;
char buffer[128];
snprintf_P(buffer, sizeof(buffer), PSTR("%s/number/%s/%s/config"), discovery_prefix, mqttNodeName, item); snprintf_P(buffer, sizeof(buffer), PSTR("%s/number/%s/%s/config"), discovery_prefix, mqttNodeName, item);
mqtt_ha_send_json(buffer, doc); mqtt_ha_send_json(buffer, doc);
} }