add ring detection

This commit is contained in:
technyon
2022-09-02 19:25:10 +02:00
parent 8d388fd846
commit 6b986d09ed
4 changed files with 37 additions and 9 deletions

View File

@@ -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)

View File

@@ -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;

View File

@@ -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)

View File

@@ -38,6 +38,7 @@ void networkTask(void *pvParameters)
case 0:
case 1:
networkLock->update();
networkOpener->update();
network->update();
webCfgServer->update();
break;