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"}});
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);

View File

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

View File

@@ -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<NukiOpener::LogEntry>& logEntries);
void clearAuthorizationInfo();

View File

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