publish HA auto discovery for keypad only if keypad connected
This commit is contained in:
48
Network.cpp
48
Network.cpp
@@ -450,7 +450,7 @@ bool Network::publishString(const char* prefix, const char *topic, const char *v
|
||||
return _device->mqttPublish(path, MQTT_QOS_LEVEL, true, value) > 0;
|
||||
}
|
||||
|
||||
void Network::publishHASSConfig(char* deviceType, 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, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState)
|
||||
{
|
||||
String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery);
|
||||
|
||||
@@ -515,29 +515,33 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
||||
|
||||
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, configJSON.c_str());
|
||||
|
||||
// Keypad battery critical
|
||||
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(" keypad battery low\",\"unique_id\":\"");
|
||||
configJSON.concat(uidString);
|
||||
configJSON.concat("_keypad_battery_low\",\"dev_cla\":\"battery\",\"ent_cat\":\"diagnostic\",\"pl_off\":\"0\",\"pl_on\":\"1\",\"stat_t\":\"~");
|
||||
configJSON.concat(mqtt_topic_battery_keypad_critical);
|
||||
configJSON.concat("\"}");
|
||||
if(hasKeypad)
|
||||
{
|
||||
// Keypad battery critical
|
||||
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(" keypad battery low\",\"unique_id\":\"");
|
||||
configJSON.concat(uidString);
|
||||
configJSON.concat(
|
||||
"_keypad_battery_low\",\"dev_cla\":\"battery\",\"ent_cat\":\"diagnostic\",\"pl_off\":\"0\",\"pl_on\":\"1\",\"stat_t\":\"~");
|
||||
configJSON.concat(mqtt_topic_battery_keypad_critical);
|
||||
configJSON.concat("\"}");
|
||||
|
||||
path = discoveryTopic;
|
||||
path.concat("/binary_sensor/");
|
||||
path.concat(uidString);
|
||||
path.concat("/keypad_battery_low/config");
|
||||
path = discoveryTopic;
|
||||
path.concat("/binary_sensor/");
|
||||
path.concat(uidString);
|
||||
path.concat("/keypad_battery_low/config");
|
||||
|
||||
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, configJSON.c_str());
|
||||
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, configJSON.c_str());
|
||||
}
|
||||
|
||||
// Battery voltage
|
||||
configJSON = "{\"dev\":{\"ids\":[\"nuki_";
|
||||
|
||||
@@ -33,7 +33,7 @@ public:
|
||||
void publishBool(const char* prefix, const char* topic, const bool value);
|
||||
bool publishString(const char* prefix, const char* topic, const char* value);
|
||||
|
||||
void publishHASSConfig(char* deviceType, 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, 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 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);
|
||||
|
||||
@@ -468,10 +468,10 @@ bool NetworkLock::comparePrefixedPath(const char *fullPath, const char *subPath)
|
||||
return strcmp(fullPath, prefixedPath) == 0;
|
||||
}
|
||||
|
||||
void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, char *lockAction,
|
||||
void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, const bool& hasKeypad, char *lockAction,
|
||||
char *unlockAction, char *openAction, char *lockedState, char *unlockedState)
|
||||
{
|
||||
_network->publishHASSConfig(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, 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->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState);
|
||||
_network->publishHASSWifiRssiConfig(deviceType, baseTopic, name, uidString);
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
void publishRssi(const int& rssi);
|
||||
void publishRetry(const std::string& message);
|
||||
void publishBleAddress(const std::string& address);
|
||||
void publishHASSConfig(char* deviceType, 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, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState);
|
||||
void removeHASSConfig(char* uidString);
|
||||
void publishKeypad(const std::list<NukiLock::KeypadEntry>& entries, uint maxKeypadCodeCount);
|
||||
void publishKeypadCommandResult(const char* result);
|
||||
|
||||
@@ -389,7 +389,7 @@ 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, lockAction, unlockAction, openAction, lockedState, 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->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);
|
||||
}
|
||||
|
||||
@@ -599,7 +599,7 @@ void NukiWrapper::setupHASS()
|
||||
String baseTopic = _preferences->getString(preference_mqtt_lock_path);
|
||||
char uidString[20];
|
||||
itoa(_nukiConfig.nukiId, uidString, 16);
|
||||
_network->publishHASSConfig("SmartLock",baseTopic.c_str(),(char*)_nukiConfig.name,uidString,"lock","unlock","unlatch","locked","unlocked");
|
||||
_network->publishHASSConfig("SmartLock", baseTopic.c_str(),(char*)_nukiConfig.name, uidString, _hasKeypad, "lock", "unlock", "unlatch", "locked", "unlocked");
|
||||
_hassSetupCompleted = true;
|
||||
|
||||
Log->println("HASS setup for lock completed.");
|
||||
|
||||
Reference in New Issue
Block a user