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