fixed issue #23: Using Lockngo does not change the lock state

This commit is contained in:
technyon
2022-08-06 18:22:10 +02:00
parent 241d39a2e4
commit bdb377a031
8 changed files with 60 additions and 3 deletions

View File

@@ -34,6 +34,8 @@ void NetworkOpener::initialize()
_preferences->putString(preference_mqtt_opener_path, _mqttPath);
}
_haEnabled = _preferences->getString(preference_mqtt_hass_discovery) != "";
_network->subscribe(_mqttPath, mqtt_topic_lock_action);
for(const auto& topic : _configTopics)
{
@@ -86,6 +88,11 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
memset(&str, 0, sizeof(str));
lockstateToString(keyTurnerState.lockState, str);
publishString(mqtt_topic_lock_state, str);
if(_haEnabled)
{
publishBinaryState(keyTurnerState.lockState);
}
}
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger)
@@ -118,6 +125,23 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
_firstTunerStatePublish = false;
}
void NetworkOpener::publishBinaryState(NukiOpener::LockState lockState)
{
switch(lockState)
{
case NukiOpener::LockState::Locked:
case NukiOpener::LockState::RTOactive:
publishString(mqtt_topic_lock_binary_state, "locked");
break;
case NukiOpener::LockState::Open:
case NukiOpener::LockState::Opening:
publishString(mqtt_topic_lock_binary_state, "unlocked");
break;
default:
break;
}
}
void NetworkOpener::publishAuthorizationInfo(const uint32_t authId, const char *authName)
{
publishUInt(mqtt_topic_lock_auth_id, authId);
@@ -224,4 +248,4 @@ bool NetworkOpener::comparePrefixedPath(const char *fullPath, const char *subPat
char prefixedPath[500];
buildMqttPath(subPath, prefixedPath);
return strcmp(fullPath, prefixedPath) == 0;
}
}