Try to get intermediate states for opener
This commit is contained in:
@@ -453,19 +453,19 @@ void NukiNetworkOpener::publishState(NukiOpener::OpenerState lockState)
|
|||||||
{
|
{
|
||||||
case NukiOpener::LockState::Locked:
|
case NukiOpener::LockState::Locked:
|
||||||
_nukiPublisher->publishString(mqtt_topic_lock_ha_state, "locked", true);
|
_nukiPublisher->publishString(mqtt_topic_lock_ha_state, "locked", true);
|
||||||
_nukiPublisher->publishString(mqtt_topic_lock_binary_state, "locked", true);
|
_nukiPublisher->publishString(mqtt_topic_lock_binary_state, "locked", true);
|
||||||
break;
|
break;
|
||||||
case NukiOpener::LockState::RTOactive:
|
case NukiOpener::LockState::RTOactive:
|
||||||
_nukiPublisher->publishString(mqtt_topic_lock_ha_state, "unlocked", true);
|
_nukiPublisher->publishString(mqtt_topic_lock_ha_state, "unlocked", true);
|
||||||
_nukiPublisher->publishString(mqtt_topic_lock_binary_state, "unlocked", true);
|
_nukiPublisher->publishString(mqtt_topic_lock_binary_state, "unlocked", true);
|
||||||
break;
|
break;
|
||||||
case NukiOpener::LockState::Open:
|
case NukiOpener::LockState::Open:
|
||||||
_nukiPublisher->publishString(mqtt_topic_lock_ha_state, "open", true);
|
_nukiPublisher->publishString(mqtt_topic_lock_ha_state, "open", true);
|
||||||
_nukiPublisher->publishString(mqtt_topic_lock_binary_state, "unlocked", true);
|
_nukiPublisher->publishString(mqtt_topic_lock_binary_state, "unlocked", true);
|
||||||
break;
|
break;
|
||||||
case NukiOpener::LockState::Opening:
|
case NukiOpener::LockState::Opening:
|
||||||
_nukiPublisher->publishString(mqtt_topic_lock_ha_state, "opening", true);
|
_nukiPublisher->publishString(mqtt_topic_lock_ha_state, "opening", true);
|
||||||
_nukiPublisher->publishString(mqtt_topic_lock_binary_state, "unlocked", true);
|
_nukiPublisher->publishString(mqtt_topic_lock_binary_state, "unlocked", true);
|
||||||
break;
|
break;
|
||||||
case NukiOpener::LockState::Undefined:
|
case NukiOpener::LockState::Undefined:
|
||||||
case NukiOpener::LockState::Uncalibrated:
|
case NukiOpener::LockState::Uncalibrated:
|
||||||
|
|||||||
@@ -257,6 +257,9 @@ void NukiOpenerWrapper::update()
|
|||||||
_nextLockAction = (NukiOpener::LockAction) 0xff;
|
_nextLockAction = (NukiOpener::LockAction) 0xff;
|
||||||
_network->publishRetry("--");
|
_network->publishRetry("--");
|
||||||
retryCount = 0;
|
retryCount = 0;
|
||||||
|
_statusUpdated = true;
|
||||||
|
Log->println(F("Opener: updating status after action"));
|
||||||
|
_statusUpdatedTs = ts;
|
||||||
if(_intervalLockstate > 10)
|
if(_intervalLockstate > 10)
|
||||||
{
|
{
|
||||||
_nextLockStateUpdateTs = ts + 10 * 1000;
|
_nextLockStateUpdateTs = ts + 10 * 1000;
|
||||||
@@ -439,16 +442,27 @@ bool NukiOpenerWrapper::updateKeyTurnerState()
|
|||||||
|
|
||||||
if(result != Nuki::CmdResult::Success)
|
if(result != Nuki::CmdResult::Success)
|
||||||
{
|
{
|
||||||
|
Log->println("Query opener state failed");
|
||||||
_retryLockstateCount++;
|
_retryLockstateCount++;
|
||||||
postponeBleWatchdog();
|
postponeBleWatchdog();
|
||||||
if(_retryLockstateCount < _nrOfRetries + 1)
|
if(_retryLockstateCount < _nrOfRetries + 1)
|
||||||
{
|
{
|
||||||
|
Log->print(F("Query opener state retrying in "));
|
||||||
|
Log->print(_retryDelay);
|
||||||
|
Log->println("ms");
|
||||||
_nextLockStateUpdateTs = espMillis() + _retryDelay;
|
_nextLockStateUpdateTs = espMillis() + _retryDelay;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
_retryLockstateCount = 0;
|
_retryLockstateCount = 0;
|
||||||
|
|
||||||
|
const NukiOpener::LockState& lockState = _keyTurnerState.lockState;
|
||||||
|
|
||||||
|
if(lockState != _lastKeyTurnerState.lockState)
|
||||||
|
{
|
||||||
|
_statusUpdatedTs = espMillis();
|
||||||
|
}
|
||||||
|
|
||||||
if((!isPinValid() || !_publishAuthData) &&
|
if((!isPinValid() || !_publishAuthData) &&
|
||||||
_statusUpdated &&
|
_statusUpdated &&
|
||||||
_keyTurnerState.lockState == NukiOpener::LockState::Locked &&
|
_keyTurnerState.lockState == NukiOpener::LockState::Locked &&
|
||||||
@@ -479,6 +493,12 @@ bool NukiOpenerWrapper::updateKeyTurnerState()
|
|||||||
updateGpioOutputs();
|
updateGpioOutputs();
|
||||||
_network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);
|
_network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);
|
||||||
|
|
||||||
|
if((_keyTurnerState.lockState == NukiOpener::LockState::Open || _keyTurnerState.lockState == NukiOpener::LockState::Opening) && espMillis() < _statusUpdatedTs + 10000)
|
||||||
|
{
|
||||||
|
updateStatus = true;
|
||||||
|
Log->println(F("Opener: Keep updating status on intermediate lock state"));
|
||||||
|
}
|
||||||
|
|
||||||
if(_keyTurnerState.nukiState == NukiOpener::State::ContinuousMode)
|
if(_keyTurnerState.nukiState == NukiOpener::State::ContinuousMode)
|
||||||
{
|
{
|
||||||
Log->println(F("Continuous Mode"));
|
Log->println(F("Continuous Mode"));
|
||||||
|
|||||||
Reference in New Issue
Block a user