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) void NetworkOpener::onMqttDataReceived(char *&topic, byte *&payload, unsigned int &length)
{ {
char value[50] = {0}; char value[50] = {0};
@@ -125,6 +137,12 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
_firstTunerStatePublish = false; _firstTunerStatePublish = false;
} }
void NetworkOpener::publishRing()
{
publishString(mqtt_topic_lock_state, "ring");
_resetLockStateTs = millis() + 2000;
}
void NetworkOpener::publishBinaryState(NukiOpener::LockState lockState) void NetworkOpener::publishBinaryState(NukiOpener::LockState lockState)
{ {
switch(lockState) switch(lockState)

View File

@@ -17,8 +17,10 @@ public:
virtual ~NetworkOpener() = default; virtual ~NetworkOpener() = default;
void initialize(); void initialize();
void update();
void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState); void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState);
void publishRing();
void publishBinaryState(NukiOpener::LockState lockState); void publishBinaryState(NukiOpener::LockState lockState);
void publishAuthorizationInfo(const std::list<NukiOpener::LogEntry>& logEntries); void publishAuthorizationInfo(const std::list<NukiOpener::LogEntry>& logEntries);
void clearAuthorizationInfo(); void clearAuthorizationInfo();
@@ -58,6 +60,7 @@ private:
bool _firstTunerStatePublish = true; bool _firstTunerStatePublish = true;
bool _haEnabled= false; bool _haEnabled= false;
unsigned long _resetLockStateTs = 0;
bool (*_lockActionReceivedCallback)(const char* value) = nullptr; bool (*_lockActionReceivedCallback)(const char* value) = nullptr;
void (*_configUpdateReceivedCallback)(const char* path, 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() void NukiOpenerWrapper::updateKeyTurnerState()
{ {
_nukiOpener.requestOpenerState(&_keyTurnerState); _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]; Serial.println(F("Nuki opener: Ring detected"));
lockstateToString(_keyTurnerState.lockState, lockStateStr); _network->publishRing();
Serial.print(F("Nuki opener state: ")); }
Serial.println((int)_keyTurnerState.lockState); else
// Serial.println((int)_keyTurnerState.nukiState); {
// Serial.println((int)_keyTurnerState.currentTimeYear); _network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);
// Serial.println((int)_keyTurnerState.ringToOpenTimer);
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) if(_publishAuthData)

View File

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