publish HA auto discovery for door sensor only if keypad connected
This commit is contained in:
@@ -468,12 +468,15 @@ bool NetworkLock::comparePrefixedPath(const char *fullPath, const char *subPath)
|
|||||||
return strcmp(fullPath, prefixedPath) == 0;
|
return strcmp(fullPath, prefixedPath) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, const bool& hasKeypad, char *lockAction,
|
void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, const bool& hasDoorSensor, const bool& hasKeypad, char *lockAction,
|
||||||
char *unlockAction, char *openAction, char *lockedState, char *unlockedState)
|
char *unlockAction, char *openAction, char *lockedState, char *unlockedState)
|
||||||
{
|
{
|
||||||
_network->publishHASSConfig(deviceType, baseTopic, name, uidString, hasKeypad, 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->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState);
|
||||||
|
if(hasDoorSensor)
|
||||||
|
{
|
||||||
_network->publishHASSConfigDoorSensor(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);
|
_network->publishHASSWifiRssiConfig(deviceType, baseTopic, name, uidString);
|
||||||
_network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);
|
_network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public:
|
|||||||
void publishRssi(const int& rssi);
|
void publishRssi(const int& rssi);
|
||||||
void publishRetry(const std::string& message);
|
void publishRetry(const std::string& message);
|
||||||
void publishBleAddress(const std::string& address);
|
void publishBleAddress(const std::string& address);
|
||||||
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 publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const bool& hasDoorSensor, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState);
|
||||||
void removeHASSConfig(char* uidString);
|
void removeHASSConfig(char* uidString);
|
||||||
void publishKeypad(const std::list<NukiLock::KeypadEntry>& entries, uint maxKeypadCodeCount);
|
void publishKeypad(const std::list<NukiLock::KeypadEntry>& entries, uint maxKeypadCodeCount);
|
||||||
void publishKeypadCommandResult(const char* result);
|
void publishKeypadCommandResult(const char* result);
|
||||||
|
|||||||
@@ -599,12 +599,21 @@ 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("SmartLock", baseTopic.c_str(),(char*)_nukiConfig.name, uidString, _hasKeypad, "lock", "unlock", "unlatch", "locked", "unlocked");
|
|
||||||
|
_network->publishHASSConfig("SmartLock", baseTopic.c_str(),(char*)_nukiConfig.name, uidString, _hasKeypad, hasDoorSensor(), "lock", "unlock", "unlatch", "locked", "unlocked");
|
||||||
_hassSetupCompleted = true;
|
_hassSetupCompleted = true;
|
||||||
|
|
||||||
Log->println("HASS setup for lock completed.");
|
Log->println("HASS setup for lock completed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool NukiWrapper::hasDoorSensor()
|
||||||
|
{
|
||||||
|
return _keyTurnerState.doorSensorState == Nuki::DoorSensorState::DoorClosed ||
|
||||||
|
_keyTurnerState.doorSensorState == Nuki::DoorSensorState::DoorOpened ||
|
||||||
|
_keyTurnerState.doorSensorState == Nuki::DoorSensorState::DoorStateUnknown ||
|
||||||
|
_keyTurnerState.doorSensorState == Nuki::DoorSensorState::Calibrating;;
|
||||||
|
}
|
||||||
|
|
||||||
void NukiWrapper::disableHASS()
|
void NukiWrapper::disableHASS()
|
||||||
{
|
{
|
||||||
if(!_nukiConfigValid) // only ask for config once to save battery life
|
if(!_nukiConfigValid) // only ask for config once to save battery life
|
||||||
|
|||||||
@@ -49,6 +49,8 @@ private:
|
|||||||
|
|
||||||
void setupHASS();
|
void setupHASS();
|
||||||
|
|
||||||
|
bool hasDoorSensor();
|
||||||
|
|
||||||
NukiLock::LockAction lockActionToEnum(const char* str); // char array at least 14 characters
|
NukiLock::LockAction lockActionToEnum(const char* str); // char array at least 14 characters
|
||||||
|
|
||||||
std::string _deviceName;
|
std::string _deviceName;
|
||||||
|
|||||||
Reference in New Issue
Block a user