From ea93aa7b27e2fbeb749c430ad94b85f2ca7818b8 Mon Sep 17 00:00:00 2001 From: iranl Date: Fri, 9 Feb 2024 16:07:27 +0100 Subject: [PATCH] Publish additional lock states --- Network.cpp | 15 ++++++++------- Network.h | 6 +++--- NetworkLock.cpp | 23 ++++++++++++++++++----- NetworkLock.h | 2 +- NetworkOpener.cpp | 12 ++++++++---- NetworkOpener.h | 2 +- 6 files changed, 39 insertions(+), 21 deletions(-) diff --git a/Network.cpp b/Network.cpp index c643a0b..92c1e5e 100644 --- a/Network.cpp +++ b/Network.cpp @@ -706,7 +706,7 @@ bool Network::publishString(const char* prefix, const char *topic, const char *v return _device->mqttPublish(path, MQTT_QOS_LEVEL, true, value) > 0; } -void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) +void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); @@ -741,8 +741,11 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n json["pl_unlk"] = unlockAction; json["pl_open"] = openAction; json["stat_t"] = String("~") + mqtt_topic_lock_binary_state; - json["stat_locked"] = lockedState; - json["stat_unlocked"] = unlockedState; + json["stat_jammed"] = "jammed"; + json["stat_locked"] = "locked"; + json["stat_locking"] = "locking"; + json["stat_unlocked"] = "unlocked"; + json["stat_unlocking"] = "unlocking"; json["opt"] = "false"; serializeJson(json, _buffer, _bufferSize); @@ -994,7 +997,7 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n } -void Network::publishHASSConfigAdditionalButtons(char *deviceType, const char *baseTopic, char *name, char *uidString, const char *availabilityTopic, const bool &hasKeypad, char *lockAction, char *unlockAction, char *openAction, char *lockedState, char *unlockedState) +void Network::publishHASSConfigAdditionalButtons(char *deviceType, const char *baseTopic, char *name, char *uidString) { // Lock 'n' Go publishHassTopic("button", @@ -1056,9 +1059,7 @@ void Network::publishHASSConfigBatLevel(char *deviceType, const char *baseTopic, } } -void Network::publishHASSConfigDoorSensor(char *deviceType, const char *baseTopic, char *name, char *uidString, - char *lockAction, char *unlockAction, char *openAction, char *lockedState, - char *unlockedState) +void Network::publishHASSConfigDoorSensor(char *deviceType, const char *baseTopic, char *name, char *uidString) { String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); diff --git a/Network.h b/Network.h index c9aa133..d736eef 100644 --- a/Network.h +++ b/Network.h @@ -43,10 +43,10 @@ public: void publishBool(const char* prefix, const char* topic, const bool value); bool publishString(const char* prefix, const char* topic, const char* value); - void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); - void publishHASSConfigAdditionalButtons(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); + void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const char* availabilityTopic, const bool& hasKeypad, char* lockAction, char* unlockAction, char* openAction); + void publishHASSConfigAdditionalButtons(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSConfigBatLevel(char* deviceType, const char* baseTopic, char* name, char* uidString); - void publishHASSConfigDoorSensor(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); + void publishHASSConfigDoorSensor(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSConfigRingDetect(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSConfigLedBrightness(char* deviceType, const char* baseTopic, char* name, char* uidString); void publishHASSConfigSoundLevel(char* deviceType, const char* baseTopic, char* name, char* uidString); diff --git a/NetworkLock.cpp b/NetworkLock.cpp index 549afc5..d6fcb00 100644 --- a/NetworkLock.cpp +++ b/NetworkLock.cpp @@ -281,16 +281,29 @@ void NetworkLock::publishBinaryState(NukiLock::LockState lockState) switch(lockState) { case NukiLock::LockState::Locked: - case NukiLock::LockState::Locking: publishString(mqtt_topic_lock_binary_state, "locked"); break; + case NukiLock::LockState::Locking: + publishString(mqtt_topic_lock_binary_state, "locking"); + break; case NukiLock::LockState::Unlocked: + publishString(mqtt_topic_lock_binary_state, "unlocked"); + break; case NukiLock::LockState::Unlocking: + publishString(mqtt_topic_lock_binary_state, "unlocking"); + break; case NukiLock::LockState::Unlatched: + publishString(mqtt_topic_lock_binary_state, "unlatched"); + break; case NukiLock::LockState::Unlatching: + publishString(mqtt_topic_lock_binary_state, "unlatching"); + break; case NukiLock::LockState::UnlockedLnga: publishString(mqtt_topic_lock_binary_state, "unlocked"); break; + case NukiLock::LockState::MotorBlocked: + publishString(mqtt_topic_lock_binary_state, "jammed"); + break; default: break; } @@ -529,15 +542,15 @@ bool NetworkLock::comparePrefixedPath(const char *fullPath, const char *subPath) } void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, const bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, char *lockAction, - char *unlockAction, char *openAction, char *lockedState, char *unlockedState) + char *unlockAction, char *openAction) { - _network->publishHASSConfig(deviceType, baseTopic, name, uidString, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction, lockedState, unlockedState); - _network->publishHASSConfigAdditionalButtons(deviceType, baseTopic, name, uidString, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSConfig(deviceType, baseTopic, name, uidString, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction); + _network->publishHASSConfigAdditionalButtons(deviceType, baseTopic, name, uidString); _network->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString); _network->publishHASSConfigLedBrightness(deviceType, baseTopic, name, uidString); if(hasDoorSensor) { - _network->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString); } else { diff --git a/NetworkLock.h b/NetworkLock.h index 95f0e88..ccd2538 100644 --- a/NetworkLock.h +++ b/NetworkLock.h @@ -34,7 +34,7 @@ public: void publishRssi(const int& rssi); void publishRetry(const std::string& message); void publishBleAddress(const std::string& address); - void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); + void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, const bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, char* lockAction, char* unlockAction, char* openAction); void removeHASSConfig(char* uidString); void publishKeypad(const std::list& entries, uint maxKeypadCodeCount); void publishKeypadCommandResult(const char* result); diff --git a/NetworkOpener.cpp b/NetworkOpener.cpp index 89e5a4f..9287361 100644 --- a/NetworkOpener.cpp +++ b/NetworkOpener.cpp @@ -274,10 +274,14 @@ void NetworkOpener::publishBinaryState(NukiOpener::OpenerState lockState) publishString(mqtt_topic_lock_binary_state, "locked"); break; case NukiOpener::LockState::RTOactive: - case NukiOpener::LockState::Open: - case NukiOpener::LockState::Opening: publishString(mqtt_topic_lock_binary_state, "unlocked"); break; + case NukiOpener::LockState::Open: + publishString(mqtt_topic_lock_binary_state, "unlocked"); + break; + case NukiOpener::LockState::Opening: + publishString(mqtt_topic_lock_binary_state, "unlocking"); + break; default: break; } @@ -494,12 +498,12 @@ void NetworkOpener::publishBleAddress(const std::string &address) publishString(mqtt_topic_lock_address, address); } -void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState) +void NetworkOpener::publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction) { String availabilityTopic = _preferences->getString("mqttpath"); availabilityTopic.concat("/maintenance/mqttConnectionState"); - _network->publishHASSConfig(deviceType, baseTopic, name, uidString, availabilityTopic.c_str(), false, lockAction, unlockAction, openAction, lockedState, unlockedState); + _network->publishHASSConfig(deviceType, baseTopic, name, uidString, availabilityTopic.c_str(), false, lockAction, unlockAction, openAction); _network->publishHASSConfigRingDetect(deviceType, baseTopic, name, uidString); _network->publishHASSConfigSoundLevel(deviceType, baseTopic, name, uidString); _network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString); diff --git a/NetworkOpener.h b/NetworkOpener.h index 5a2853e..9b5c112 100644 --- a/NetworkOpener.h +++ b/NetworkOpener.h @@ -31,7 +31,7 @@ public: void publishRssi(const int& rssi); void publishRetry(const std::string& message); void publishBleAddress(const std::string& address); - void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState); + void publishHASSConfig(char* deviceType, const char* baseTopic, char* name, char* uidString, char* lockAction, char* unlockAction, char* openAction); void removeHASSConfig(char* uidString); void publishKeypad(const std::list& entries, uint maxKeypadCodeCount); void publishKeypadCommandResult(const char* result);