diff --git a/Network.cpp b/Network.cpp index 9d841df..dd261d3 100644 --- a/Network.cpp +++ b/Network.cpp @@ -1229,8 +1229,9 @@ void Network::publishHASSConfigRingDetect(char *deviceType, const char *baseTopi {"pl_off", "locked"}}); 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"][1] = "ringlocked"; serializeJson(json, _buffer, _bufferSize); String path = createHassTopicPath("event", "ring", uidString); _device->mqttPublish(path.c_str(), MQTT_QOS_LEVEL, true, _buffer); diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index f80a21f..42c7703 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -274,11 +274,18 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn _firstTunerStatePublish = false; } -void NetworkOpener::publishRing() +void NetworkOpener::publishRing(const bool locked) { - publishString(mqtt_topic_lock_state, "ring"); - publishString(mqtt_topic_lock_ring, "ring"); - _resetLockStateTs = millis() + 2000; + if (locked) + { + 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) diff --git a/NetworkOpener.h b/NetworkOpener.h index 212bd09..ac85004 100644 --- a/NetworkOpener.h +++ b/NetworkOpener.h @@ -19,7 +19,7 @@ public: void update(); void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState); - void publishRing(); + void publishRing(const bool locked); void publishState(NukiOpener::OpenerState lockState); void publishAuthorizationInfo(const std::list& logEntries); void clearAuthorizationInfo(); diff --git a/NukiOpenerWrapper.cpp b/NukiOpenerWrapper.cpp index afe9fcf..a19f79c 100644 --- a/NukiOpenerWrapper.cpp +++ b/NukiOpenerWrapper.cpp @@ -345,18 +345,17 @@ void NukiOpenerWrapper::updateKeyTurnerState() _lastKeyTurnerState.lockState == NukiOpener::LockState::Locked && _lastKeyTurnerState.nukiState == _keyTurnerState.nukiState) { - Log->println(F("Nuki opener: Ring detected")); - _network->publishRing(); + Log->println(F("Nuki opener: Ring detected (Locked)")); + _network->publishRing(true); } else { - if(_statusUpdated && - _keyTurnerState.lockState != _lastKeyTurnerState.lockState && + if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState && _keyTurnerState.lockState == NukiOpener::LockState::Open && _keyTurnerState.trigger == NukiOpener::Trigger::Manual) { - Log->println(F("Nuki opener: Ring detected")); - _network->publishRing(); + Log->println(F("Nuki opener: Ring detected (Open)")); + _network->publishRing(false); } _network->publishKeyTurnerState(_keyTurnerState, _lastKeyTurnerState);