reflect continuous mode in state mode

This commit is contained in:
technyon
2023-01-10 22:23:34 +01:00
parent de34e1a78e
commit f21dc0d722
3 changed files with 41 additions and 19 deletions

View File

@@ -97,15 +97,23 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
{ {
char str[50]; 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)); 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) if(_haEnabled)
{ {
publishBinaryState(keyTurnerState.lockState); publishBinaryState(keyTurnerState);
} }
} }
@@ -145,20 +153,27 @@ void NetworkOpener::publishRing()
_resetLockStateTs = millis() + 2000; _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, "unlocked");
publishString(mqtt_topic_lock_binary_state, "locked"); }
break; else
case NukiOpener::LockState::RTOactive: {
case NukiOpener::LockState::Open: switch (lockState.lockState)
case NukiOpener::LockState::Opening: {
publishString(mqtt_topic_lock_binary_state, "unlocked"); case NukiOpener::LockState::Locked:
break; publishString(mqtt_topic_lock_binary_state, "locked");
default: break;
break; case NukiOpener::LockState::RTOactive:
case NukiOpener::LockState::Open:
case NukiOpener::LockState::Opening:
publishString(mqtt_topic_lock_binary_state, "unlocked");
break;
default:
break;
}
} }
} }

View File

@@ -21,7 +21,7 @@ public:
void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState); void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState);
void publishRing(); void publishRing();
void publishBinaryState(NukiOpener::LockState lockState); void publishBinaryState(NukiOpener::OpenerState lockState);
void publishAuthorizationInfo(const std::list<NukiOpener::LogEntry>& logEntries); void publishAuthorizationInfo(const std::list<NukiOpener::LogEntry>& logEntries);
void clearAuthorizationInfo(); void clearAuthorizationInfo();
void publishCommandResult(const char* resultStr); void publishCommandResult(const char* resultStr);

View File

@@ -181,7 +181,10 @@ void NukiOpenerWrapper::updateKeyTurnerState()
{ {
_nukiOpener.requestOpenerState(&_keyTurnerState); _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")); Log->println(F("Nuki opener: Ring detected"));
_network->publishRing(); _network->publishRing();
@@ -190,7 +193,11 @@ void NukiOpenerWrapper::updateKeyTurnerState()
{ {
_network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState); _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]; char lockStateStr[20];
lockstateToString(_keyTurnerState.lockState, lockStateStr); lockstateToString(_keyTurnerState.lockState, lockStateStr);