Fix Ring Event + add ring locked or open
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user