From b1c42522bac4eb9d59be510c7e11e04cb88856a4 Mon Sep 17 00:00:00 2001 From: technyon Date: Mon, 20 Feb 2023 19:19:29 +0100 Subject: [PATCH] add more home assistant auto discovery topics --- Network.cpp | 87 +++++++++++++++++++++++++++++++++++------------ Network.h | 6 ++-- NetworkLock.cpp | 3 +- NetworkOpener.cpp | 3 +- 4 files changed, 73 insertions(+), 26 deletions(-) diff --git a/Network.cpp b/Network.cpp index 6fd76d6..87cd689 100644 --- a/Network.cpp +++ b/Network.cpp @@ -652,20 +652,6 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n "", { { "enabled_by_default", "true" } }); -// doc_out["name"] = name + " LED enabled"; -// doc_out["object_id"] = object_id + " LED enabled"; -// doc_out["uniq_id"] = build_unique_id(address, "led_enabled"); -// doc_out["ic"] = "mdi:led-variant-on"; -// doc_out["ent_cat"] = "config"; -// doc_out["stat_t"] = net_build_topic("config"); -// doc_out["val_tpl"] = "{{iif(value_json.led_enabled,'ON','OFF')}}"; -// doc_out["cmd_t"] = net_build_topic("config/set"); -// doc_out["state_on"] = "ON"; -// doc_out["state_off"] = "OFF"; -// doc_out["pl_on"] = "{'led_enabled': true}"; -// doc_out["pl_off"] = "{'led_enabled': false}"; -// doc_out["opt"] = true; - // LED enabled publishHassTopic("switch", "led_enabled", @@ -676,7 +662,7 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n baseTopic, mqtt_topic_config_led_enabled, deviceType, - "switch", + "", "", "config", mqtt_topic_config_led_enabled, @@ -684,13 +670,31 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n { "pl_on", "1" }, { "pl_off", "0" }, { "state_on", "1" }, - { "state_off", "0" },}); + { "state_off", "0" }}); + + // Button enabled + publishHassTopic("switch", + "button_enabled", + uidString, + "_button_enabled", + "Button enabled", + name, + baseTopic, + mqtt_topic_config_button_enabled, + deviceType, + "", + "", + "config", + mqtt_topic_config_button_enabled, + { { "ic", "mdi:radiobox-marked" }, + { "pl_on", "1" }, + { "pl_off", "0" }, + { "state_on", "1" }, + { "state_off", "0" }}); } } //json["cmd_t"] = String("~") + String(mqtt_topic_lock_action); -void Network::publishHASSConfigBatLevel(char *deviceType, const char *baseTopic, char *name, char *uidString, - char *lockAction, char *unlockAction, char *openAction, char *lockedState, - char *unlockedState) +void Network::publishHASSConfigBatLevel(char *deviceType, const char *baseTopic, char *name, char *uidString) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); @@ -740,9 +744,7 @@ void Network::publishHASSConfigDoorSensor(char *deviceType, const char *baseTopi } } -void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopic, char *name, char *uidString, - char *lockAction, char *unlockAction, char *openAction, char *lockedState, - char *unlockedState) +void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopic, char *name, char *uidString) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); @@ -766,6 +768,47 @@ void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopi } } + +void Network::publishHASSConfigLedBrightness(char *deviceType, const char *baseTopic, char *name, char *uidString) +{ + publishHassTopic("number", + "led_brightness", + uidString, + "_led_brightness", + "LED brightness", + name, + baseTopic, + mqtt_topic_config_led_brightness, + deviceType, + "", + "", + "config", + mqtt_topic_config_led_brightness, + { { "ic", "mdi:brightness-6" }, + { "min", "0" }, + { "max", "5" }}); +} + +void Network::publishHASSConfigSoundLevel(char *deviceType, const char *baseTopic, char *name, char *uidString) +{ + publishHassTopic("number", + "sound_level", + uidString, + "_sound_level", + "Sound level", + name, + baseTopic, + mqtt_topic_config_sound_level, + deviceType, + "", + "", + "config", + mqtt_topic_config_sound_level, + { { "ic", "mdi:volume-source" }, + { "min", "0" }, + { "max", "255" }}); +} + void Network::publishHASSWifiRssiConfig(char *deviceType, const char *baseTopic, char *name, char *uidString) { if(_device->signalStrength() == 127) diff --git a/Network.h b/Network.h index 0a0c53e..0f72e21 100644 --- a/Network.h +++ b/Network.h @@ -36,9 +36,11 @@ public: bool publishString(const char* prefix, const char* topic, const char* value); void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); - void publishHASSConfigBatLevel(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); + void publishHASSConfigBatLevel(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSConfigDoorSensor(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); - void publishHASSConfigRingDetect(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); + void publishHASSConfigRingDetect(char* deviceType, const char* baseTopic, char* name, char* uidString); + void publishHASSConfigLedBrightness(char* deviceType, const char* baseTopic, char* name, char* uidString); + void publishHASSConfigSoundLevel(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSWifiRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSBleRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString); void removeHASSConfig(char* uidString); diff --git a/NetworkLock.cpp b/NetworkLock.cpp index b61791c..8f8cece 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -506,7 +506,8 @@ void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, cha char *unlockAction, char *openAction, char *lockedState, char *unlockedState) { _network->publishHASSConfig(deviceType, baseTopic, name, uidString, hasKeypad, lockAction, unlockAction, openAction, lockedState, unlockedState); - _network->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString); + _network->publishHASSConfigLedBrightness(deviceType, baseTopic, name, uidString); if(hasDoorSensor) { _network->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index c607fc7..ecc2d20 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -476,7 +476,8 @@ void NetworkOpener::publishBleAddress(const std::string &address) void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) { _network->publishHASSConfig(deviceType, baseTopic, name, uidString, false, lockAction, unlockAction, openAction, lockedState, unlockedState); - _network->publishHASSConfigRingDetect(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSConfigRingDetect(deviceType, baseTopic, name, uidString); + _network->publishHASSConfigSoundLevel(deviceType, baseTopic, name, uidString); _network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString); }