diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index 7fe249e..6b3dc84 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -97,15 +97,23 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn { char str[50]; - if((_firstTunerStatePublish || keyTurnerState.lockState != lastKeyTurnerState.lockState) && keyTurnerState.lockState != NukiOpener::LockState::Undefined) + if((_firstTunerStatePublish || keyTurnerState.lockState != lastKeyTurnerState.lockState || keyTurnerState.nukiState != lastKeyTurnerState.nukiState) && keyTurnerState.lockState != NukiOpener::LockState::Undefined) { memset(&str, 0, sizeof(str)); - lockstateToString(keyTurnerState.lockState, str); - publishString(mqtt_topic_lock_state, str); + + if(keyTurnerState.nukiState == NukiOpener::State::ContinuousMode) + { + publishString(mqtt_topic_lock_state, "ContinuousMode"); + } + else + { + lockstateToString(keyTurnerState.lockState, str); + publishString(mqtt_topic_lock_state, str); + } if(_haEnabled) { - publishBinaryState(keyTurnerState.lockState); + publishBinaryState(keyTurnerState); } } @@ -145,20 +153,27 @@ void NetworkOpener::publishRing() _resetLockStateTs = millis() + 2000; } -void NetworkOpener::publishBinaryState(NukiOpener::LockState lockState) +void NetworkOpener::publishBinaryState(NukiOpener::OpenerState lockState) { - switch(lockState) + if(lockState.nukiState == NukiOpener::State::ContinuousMode) { - case NukiOpener::LockState::Locked: - publishString(mqtt_topic_lock_binary_state, "locked"); - break; - case NukiOpener::LockState::RTOactive: - case NukiOpener::LockState::Open: - case NukiOpener::LockState::Opening: - publishString(mqtt_topic_lock_binary_state, "unlocked"); - break; - default: - break; + publishString(mqtt_topic_lock_binary_state, "unlocked"); + } + else + { + switch (lockState.lockState) + { + case NukiOpener::LockState::Locked: + publishString(mqtt_topic_lock_binary_state, "locked"); + break; + case NukiOpener::LockState::RTOactive: + case NukiOpener::LockState::Open: + case NukiOpener::LockState::Opening: + publishString(mqtt_topic_lock_binary_state, "unlocked"); + break; + default: + break; + } } } diff --git a/NetworkOpener.h b/NetworkOpener.h index 89eee36..eb52a22 100644 --- a/NetworkOpener.h +++ b/NetworkOpener.h @@ -21,7 +21,7 @@ public: void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState); void publishRing(); - void publishBinaryState(NukiOpener::LockState lockState); + void publishBinaryState(NukiOpener::OpenerState lockState); void publishAuthorizationInfo(const std::list& logEntries); void clearAuthorizationInfo(); void publishCommandResult(const char* resultStr); diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index cc8f064..a8c2d65 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -181,7 +181,10 @@ void NukiOpenerWrapper::updateKeyTurnerState() { _nukiOpener.requestOpenerState(&_keyTurnerState); - if(_statusUpdated && _keyTurnerState.lockState == NukiOpener::LockState::Locked && _lastKeyTurnerState.lockState == NukiOpener::LockState::Locked) + if(_statusUpdated && + _keyTurnerState.lockState == NukiOpener::LockState::Locked && + _lastKeyTurnerState.lockState == NukiOpener::LockState::Locked && + _lastKeyTurnerState.nukiState == _keyTurnerState.nukiState) { Log->println(F("Nuki opener: Ring detected")); _network->publishRing(); @@ -190,7 +193,11 @@ void NukiOpenerWrapper::updateKeyTurnerState() { _network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState); - if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState) + if(_keyTurnerState.nukiState == NukiOpener::State::ContinuousMode) + { + Log->println(F("Nuki opener state: Continuous Mode")); + } + else if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState) { char lockStateStr[20]; lockstateToString(_keyTurnerState.lockState, lockStateStr);