add ring detection
This commit is contained in:
@@ -43,6 +43,18 @@ void NetworkOpener::initialize()
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkOpener::update()
|
||||
{
|
||||
if(_resetLockStateTs != 0 && millis() >= _resetLockStateTs)
|
||||
{
|
||||
char str[50];
|
||||
memset(str, 0, sizeof(str));
|
||||
_resetLockStateTs = 0;
|
||||
lockstateToString(NukiOpener::LockState::Locked, str);
|
||||
publishString(mqtt_topic_lock_state, str);
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkOpener::onMqttDataReceived(char *&topic, byte *&payload, unsigned int &length)
|
||||
{
|
||||
char value[50] = {0};
|
||||
@@ -125,6 +137,12 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
|
||||
_firstTunerStatePublish = false;
|
||||
}
|
||||
|
||||
void NetworkOpener::publishRing()
|
||||
{
|
||||
publishString(mqtt_topic_lock_state, "ring");
|
||||
_resetLockStateTs = millis() + 2000;
|
||||
}
|
||||
|
||||
void NetworkOpener::publishBinaryState(NukiOpener::LockState lockState)
|
||||
{
|
||||
switch(lockState)
|
||||
|
||||
@@ -17,8 +17,10 @@ public:
|
||||
virtual ~NetworkOpener() = default;
|
||||
|
||||
void initialize();
|
||||
void update();
|
||||
|
||||
void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState);
|
||||
void publishRing();
|
||||
void publishBinaryState(NukiOpener::LockState lockState);
|
||||
void publishAuthorizationInfo(const std::list<NukiOpener::LogEntry>& logEntries);
|
||||
void clearAuthorizationInfo();
|
||||
@@ -58,6 +60,7 @@ private:
|
||||
|
||||
bool _firstTunerStatePublish = true;
|
||||
bool _haEnabled= false;
|
||||
unsigned long _resetLockStateTs = 0;
|
||||
|
||||
bool (*_lockActionReceivedCallback)(const char* value) = nullptr;
|
||||
void (*_configUpdateReceivedCallback)(const char* path, const char* value) = nullptr;
|
||||
|
||||
@@ -147,17 +147,23 @@ void NukiOpenerWrapper::unpair()
|
||||
void NukiOpenerWrapper::updateKeyTurnerState()
|
||||
{
|
||||
_nukiOpener.requestOpenerState(&_keyTurnerState);
|
||||
_network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);
|
||||
|
||||
if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState)
|
||||
if(_keyTurnerState.lockState == NukiOpener::LockState::Locked && _lastKeyTurnerState.lockState == NukiOpener::LockState::Locked)
|
||||
{
|
||||
char lockStateStr[20];
|
||||
lockstateToString(_keyTurnerState.lockState, lockStateStr);
|
||||
Serial.print(F("Nuki opener state: "));
|
||||
Serial.println((int)_keyTurnerState.lockState);
|
||||
// Serial.println((int)_keyTurnerState.nukiState);
|
||||
// Serial.println((int)_keyTurnerState.currentTimeYear);
|
||||
// Serial.println((int)_keyTurnerState.ringToOpenTimer);
|
||||
Serial.println(F("Nuki opener: Ring detected"));
|
||||
_network->publishRing();
|
||||
}
|
||||
else
|
||||
{
|
||||
_network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);
|
||||
|
||||
if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState)
|
||||
{
|
||||
char lockStateStr[20];
|
||||
lockstateToString(_keyTurnerState.lockState, lockStateStr);
|
||||
Serial.print(F("Nuki opener state: "));
|
||||
Serial.println((int)_keyTurnerState.lockState);
|
||||
}
|
||||
}
|
||||
|
||||
if(_publishAuthData)
|
||||
|
||||
Reference in New Issue
Block a user