Add battery low entity to HASS autodiscovery

This commit is contained in:
rodriguezst
2022-06-21 10:43:21 +00:00
committed by GitHub
parent 9f68e67ce8
commit 6f9b482bfb
6 changed files with 51 additions and 19 deletions

View File

@@ -343,34 +343,66 @@ void Network::publishPresenceDetection(char *csv)
_presenceCsv = csv; _presenceCsv = csv;
} }
void Network::publishHASSConfig(const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState)
{ {
String configJSON = "{\"~\": \""; String configJSON = "{\"dev\":{\"ids\":[\"nuki_";
configJSON.concat(baseTopic);
configJSON.concat("\", \"name\": \"");
configJSON.concat(name);
configJSON.concat("\", \"unique_id\": \"");
configJSON.concat(uidString); configJSON.concat(uidString);
configJSON.concat("\", \"cmd_t\": \"~/lock/action\", \"pl_lock\": \""); configJSON.concat("\"],\"mf\":\"Nuki\",\"mdl\":\"");
configJSON.concat(deviceType);
configJSON.concat("\",\"name\":\"");
configJSON.concat(name);
configJSON.concat("\"},\"~\":\"");
configJSON.concat(baseTopic);
configJSON.concat("\",\"name\":\"");
configJSON.concat(name);
configJSON.concat("\",\"unique_id\":\"");
configJSON.concat(uidString);
configJSON.concat("_lock\",\"cmd_t\":\"~");
configJSON.concat(mqtt_topic_lock_action);
configJSON.concat("\",\"pl_lock\":\"");
configJSON.concat(lockAction); configJSON.concat(lockAction);
configJSON.concat("\", \"pl_unlk\": \""); configJSON.concat("\",\"pl_unlk\":\"");
configJSON.concat(unlockAction); configJSON.concat(unlockAction);
configJSON.concat("\", \"pl_open\": \""); configJSON.concat("\",\"pl_open\":\"");
configJSON.concat(openAction); configJSON.concat(openAction);
configJSON.concat("\", \"stat_t\": \"~/lock/state\", \"stat_locked\": \""); configJSON.concat("\",\"stat_t\":\"~");
configJSON.concat(mqtt_topic_lock_state);
configJSON.concat("\",\"stat_locked\":\"");
configJSON.concat(lockedState); configJSON.concat(lockedState);
configJSON.concat("\", \"stat_unlocked\": \""); configJSON.concat("\",\"stat_unlocked\":\"");
configJSON.concat(unlockedState); configJSON.concat(unlockedState);
configJSON.concat("\", \"opt\": \"false\"}"); configJSON.concat("\",\"opt\":\"false\"}");
String path = "homeassistant/lock/"; String path = "homeassistant/lock/";
path.concat(uidString); path.concat(uidString);
path.concat("/config"); path.concat("/smartlock/config");
Serial.println("HASS Config:"); Serial.println("HASS Config:");
Serial.println(configJSON); Serial.println(configJSON);
_device->mqttClient()->publish(path.c_str(), configJSON.c_str(), true); _device->mqttClient()->publish(path.c_str(), configJSON.c_str(), true);
configJSON = "{\"dev\":{\"ids\":[\"nuki_";
configJSON.concat(uidString);
configJSON.concat("\"],\"mf\":\"Nuki\",\"mdl\":\"");
configJSON.concat(deviceType);
configJSON.concat("\",\"name\":\"");
configJSON.concat(name);
configJSON.concat("\"},\"~\":\"");
configJSON.concat(baseTopic);
configJSON.concat("\",\"name\":\"");
configJSON.concat(name);
configJSON.concat(" battery low\",\"unique_id\":\"");
configJSON.concat(uidString);
configJSON.concat("_battery_low\",\"dev_cla\":\"battery\",\"ent_cat\":\"diagnostic\",\"pl_off\":\"0\",\"pl_on\":\"1\",\"stat_t\":\"~");
configJSON.concat(mqtt_topic_battery_critical);
configJSON.concat("\"}");
path = "homeassistant/binary_sensor/";
path.concat(uidString);
path.concat("/battery_low/config");
_device->mqttClient()->publish(path.c_str(), configJSON.c_str(), true);
} }
void Network::setLockActionReceivedCallback(bool (*lockActionReceivedCallback)(const char *)) void Network::setLockActionReceivedCallback(bool (*lockActionReceivedCallback)(const char *))

View File

@@ -36,7 +36,7 @@ public:
void publishConfig(const NukiLock::Config& config); void publishConfig(const NukiLock::Config& config);
void publishAdvancedConfig(const NukiLock::AdvancedConfig& config); void publishAdvancedConfig(const NukiLock::AdvancedConfig& config);
void publishPresenceDetection(char* csv); void publishPresenceDetection(char* csv);
void publishHASSConfig(const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState);
void setLockActionReceivedCallback(bool (*lockActionReceivedCallback)(const char* value)); void setLockActionReceivedCallback(bool (*lockActionReceivedCallback)(const char* value));
void setConfigUpdateReceivedCallback(void (*configUpdateReceivedCallback)(const char* path, const char* value)); void setConfigUpdateReceivedCallback(void (*configUpdateReceivedCallback)(const char* path, const char* value));

View File

@@ -166,9 +166,9 @@ void NetworkOpener::publishAdvancedConfig(const NukiOpener::AdvancedConfig &conf
// publishBool(mqtt_topic_config_auto_lock, config.autoLockEnabled == 1); // publishBool(mqtt_topic_config_auto_lock, config.autoLockEnabled == 1);
} }
void NetworkOpener::publishHASSConfig(const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState)
{ {
_network->publishHASSConfig(baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); _network->publishHASSConfig(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState);
} }
void NetworkOpener::setLockActionReceivedCallback(bool (*lockActionReceivedCallback)(const char *)) void NetworkOpener::setLockActionReceivedCallback(bool (*lockActionReceivedCallback)(const char *))

View File

@@ -26,7 +26,7 @@ public:
void publishBatteryReport(const NukiOpener::BatteryReport& batteryReport); void publishBatteryReport(const NukiOpener::BatteryReport& batteryReport);
void publishConfig(const NukiOpener::Config& config); void publishConfig(const NukiOpener::Config& config);
void publishAdvancedConfig(const NukiOpener::AdvancedConfig& config); void publishAdvancedConfig(const NukiOpener::AdvancedConfig& config);
void publishHASSConfig(const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState);
void setLockActionReceivedCallback(bool (*lockActionReceivedCallback)(const char* value)); void setLockActionReceivedCallback(bool (*lockActionReceivedCallback)(const char* value));
void setConfigUpdateReceivedCallback(void (*configUpdateReceivedCallback)(const char* path, const char* value)); void setConfigUpdateReceivedCallback(void (*configUpdateReceivedCallback)(const char* path, const char* value));

View File

@@ -313,7 +313,7 @@ void NukiOpenerWrapper::setupHASS()
String baseTopic = _preferences->getString(preference_mqtt_opener_path); String baseTopic = _preferences->getString(preference_mqtt_opener_path);
char uidString[20]; char uidString[20];
itoa(_nukiConfig.nukiId, uidString, 16); itoa(_nukiConfig.nukiId, uidString, 16);
_network->publishHASSConfig(baseTopic.c_str(),(char*)_nukiConfig.name,uidString,"deactivateRTO","activateRTO","electricStrikeActuation","locked","RTOactive"); _network->publishHASSConfig("Opener",baseTopic.c_str(),(char*)_nukiConfig.name,uidString,"deactivateRTO","activateRTO","electricStrikeActuation","locked","RTOactive");
} }
else else
{ {

View File

@@ -335,7 +335,7 @@ void NukiWrapper::setupHASS()
String baseTopic = _preferences->getString(preference_mqtt_lock_path); String baseTopic = _preferences->getString(preference_mqtt_lock_path);
char uidString[20]; char uidString[20];
itoa(_nukiConfig.nukiId, uidString, 16); itoa(_nukiConfig.nukiId, uidString, 16);
_network->publishHASSConfig(baseTopic.c_str(),(char*)_nukiConfig.name,uidString,"lock","unlock","unlatch","locked","unlocked"); _network->publishHASSConfig("SmartLock",baseTopic.c_str(),(char*)_nukiConfig.name,uidString,"lock","unlock","unlatch","locked","unlocked");
} }
else else
{ {