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)
|
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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user