Fix Ring Event + add ring locked or open

This commit is contained in:
iranl
2024-03-05 20:45:53 +01:00
parent 4acadac2b9
commit a35a0b89ba
4 changed files with 19 additions and 12 deletions

View File

@@ -1229,8 +1229,9 @@ void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopi
{"pl_off", "locked"}}); {"pl_off", "locked"}});
DynamicJsonDocument json(_bufferSize); DynamicJsonDocument json(_bufferSize);
json = createHassJson(uidString, "_ring_event", "Ring", name, baseTopic, String("~") + mqtt_topic_lock_ring, deviceType, "doorbell", "", "", "", {{"value_template", "{ \"event_type\": \"{{ value }}\" }, \"duration\": 2"}}); json = createHassJson(uidString, "_ring_event", "Ring", name, baseTopic, String("~") + mqtt_topic_lock_ring, deviceType, "doorbell", "", "", "", {{"value_template", "{ \"event_type\": \"{{ value }}\" }"}});
json["event_types"][0] = "ring"; json["event_types"][0] = "ring";
json["event_types"][1] = "ringlocked";
serializeJson(json, _buffer, _bufferSize); serializeJson(json, _buffer, _bufferSize);
String path = createHassTopicPath("event", "ring", uidString); String path = createHassTopicPath("event", "ring", uidString);
_device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, _buffer); _device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, _buffer);

View File

@@ -274,11 +274,18 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
_firstTunerStatePublish = false; _firstTunerStatePublish = false;
} }
void NetworkOpener::publishRing() void NetworkOpener::publishRing(const bool locked)
{ {
publishString(mqtt_topic_lock_state, "ring"); if (locked)
publishString(mqtt_topic_lock_ring, "ring"); {
_resetLockStateTs = millis() + 2000; publishString(mqtt_topic_lock_state, "ring");
publishString(mqtt_topic_lock_ring, "ringlocked");
_resetLockStateTs = millis() + 2000;
}
else
{
publishString(mqtt_topic_lock_ring, "ring");
}
} }
void NetworkOpener::publishState(NukiOpener::OpenerState lockState) void NetworkOpener::publishState(NukiOpener::OpenerState lockState)

View File

@@ -19,7 +19,7 @@ public:
void update(); 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 publishRing(const bool locked);
void publishState(NukiOpener::OpenerState lockState); void publishState(NukiOpener::OpenerState lockState);
void publishAuthorizationInfo(const std::list<NukiOpener::LogEntry>& logEntries); void publishAuthorizationInfo(const std::list<NukiOpener::LogEntry>& logEntries);
void clearAuthorizationInfo(); void clearAuthorizationInfo();

View File

@@ -345,18 +345,17 @@ void NukiOpenerWrapper::updateKeyTurnerState()
_lastKeyTurnerState.lockState == NukiOpener::LockState::Locked && _lastKeyTurnerState.lockState == NukiOpener::LockState::Locked &&
_lastKeyTurnerState.nukiState == _keyTurnerState.nukiState) _lastKeyTurnerState.nukiState == _keyTurnerState.nukiState)
{ {
Log->println(F("Nuki opener: Ring detected")); Log->println(F("Nuki opener: Ring detected (Locked)"));
_network->publishRing(); _network->publishRing(true);
} }
else else
{ {
if(_statusUpdated && if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState &&
_keyTurnerState.lockState != _lastKeyTurnerState.lockState &&
_keyTurnerState.lockState == NukiOpener::LockState::Open && _keyTurnerState.lockState == NukiOpener::LockState::Open &&
_keyTurnerState.trigger == NukiOpener::Trigger::Manual) _keyTurnerState.trigger == NukiOpener::Trigger::Manual)
{ {
Log->println(F("Nuki opener: Ring detected")); Log->println(F("Nuki opener: Ring detected (Open)"));
_network->publishRing(); _network->publishRing(false);
} }
_network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState); _network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);