Publish additional lock states

This commit is contained in:
iranl
2024-02-09 16:07:27 +01:00
parent a9d80b33ef
commit ea93aa7b27
6 changed files with 39 additions and 21 deletions

View File

@@ -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; 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); 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_unlk"] = unlockAction;
json["pl_open"] = openAction; json["pl_open"] = openAction;
json["stat_t"] = String("~") + mqtt_topic_lock_binary_state; json["stat_t"] = String("~") + mqtt_topic_lock_binary_state;
json["stat_locked"] = lockedState; json["stat_jammed"] = "jammed";
json["stat_unlocked"] = unlockedState; json["stat_locked"] = "locked";
json["stat_locking"] = "locking";
json["stat_unlocked"] = "unlocked";
json["stat_unlocking"] = "unlocking";
json["opt"] = "false"; json["opt"] = "false";
serializeJson(json, _buffer, _bufferSize); 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 // Lock 'n' Go
publishHassTopic("button", 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, void Network::publishHASSConfigDoorSensor(char *deviceType, const char *baseTopic, char *name, char *uidString)
char *lockAction, char *unlockAction, char *openAction, char *lockedState,
char *unlockedState)
{ {
String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery); String discoveryTopic = _preferences->getString(preference_mqtt_hass_discovery);

View File

@@ -43,10 +43,10 @@ public:
void publishBool(const char* prefix, const char* topic, const bool value); void publishBool(const char* prefix, const char* topic, const bool value);
bool publishString(const char* prefix, const char* topic, const char* 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 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, 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);
void publishHASSConfigBatLevel(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 publishHASSConfigRingDetect(char* deviceType, const char* baseTopic, char* name, char* uidString);
void publishHASSConfigLedBrightness(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); void publishHASSConfigSoundLevel(char* deviceType, const char* baseTopic, char* name, char* uidString);

View File

@@ -281,16 +281,29 @@ void NetworkLock::publishBinaryState(NukiLock::LockState lockState)
switch(lockState) switch(lockState)
{ {
case NukiLock::LockState::Locked: case NukiLock::LockState::Locked:
case NukiLock::LockState::Locking:
publishString(mqtt_topic_lock_binary_state, "locked"); publishString(mqtt_topic_lock_binary_state, "locked");
break; break;
case NukiLock::LockState::Locking:
publishString(mqtt_topic_lock_binary_state, "locking");
break;
case NukiLock::LockState::Unlocked: case NukiLock::LockState::Unlocked:
publishString(mqtt_topic_lock_binary_state, "unlocked");
break;
case NukiLock::LockState::Unlocking: case NukiLock::LockState::Unlocking:
publishString(mqtt_topic_lock_binary_state, "unlocking");
break;
case NukiLock::LockState::Unlatched: case NukiLock::LockState::Unlatched:
publishString(mqtt_topic_lock_binary_state, "unlatched");
break;
case NukiLock::LockState::Unlatching: case NukiLock::LockState::Unlatching:
publishString(mqtt_topic_lock_binary_state, "unlatching");
break;
case NukiLock::LockState::UnlockedLnga: case NukiLock::LockState::UnlockedLnga:
publishString(mqtt_topic_lock_binary_state, "unlocked"); publishString(mqtt_topic_lock_binary_state, "unlocked");
break; break;
case NukiLock::LockState::MotorBlocked:
publishString(mqtt_topic_lock_binary_state, "jammed");
break;
default: default:
break; 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, 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->publishHASSConfig(deviceType, baseTopic, name, uidString, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction);
_network->publishHASSConfigAdditionalButtons(deviceType, baseTopic, name, uidString, "~/maintenance/mqttConnectionState", hasKeypad, lockAction, unlockAction, openAction, lockedState, unlockedState); _network->publishHASSConfigAdditionalButtons(deviceType, baseTopic, name, uidString);
_network->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString); _network->publishHASSConfigBatLevel(deviceType, baseTopic, name, uidString);
_network->publishHASSConfigLedBrightness(deviceType, baseTopic, name, uidString); _network->publishHASSConfigLedBrightness(deviceType, baseTopic, name, uidString);
if(hasDoorSensor) if(hasDoorSensor)
{ {
_network->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString, lockAction, unlockAction, openAction, lockedState, unlockedState); _network->publishHASSConfigDoorSensor(deviceType, baseTopic, name, uidString);
} }
else else
{ {

View File

@@ -34,7 +34,7 @@ public:
void publishRssi(const int& rssi); void publishRssi(const int& rssi);
void publishRetry(const std::string& message); void publishRetry(const std::string& message);
void publishBleAddress(const std::string& address); 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 removeHASSConfig(char* uidString);
void publishKeypad(const std::list<NukiLock::KeypadEntry>& entries, uint maxKeypadCodeCount); void publishKeypad(const std::list<NukiLock::KeypadEntry>& entries, uint maxKeypadCodeCount);
void publishKeypadCommandResult(const char* result); void publishKeypadCommandResult(const char* result);

View File

@@ -274,10 +274,14 @@ void NetworkOpener::publishBinaryState(NukiOpener::OpenerState lockState)
publishString(mqtt_topic_lock_binary_state, "locked"); publishString(mqtt_topic_lock_binary_state, "locked");
break; break;
case NukiOpener::LockState::RTOactive: case NukiOpener::LockState::RTOactive:
case NukiOpener::LockState::Open:
case NukiOpener::LockState::Opening:
publishString(mqtt_topic_lock_binary_state, "unlocked"); publishString(mqtt_topic_lock_binary_state, "unlocked");
break; 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: default:
break; break;
} }
@@ -494,12 +498,12 @@ void NetworkOpener::publishBleAddress(const std::string &address)
publishString(mqtt_topic_lock_address, 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"); String availabilityTopic = _preferences->getString("mqttpath");
availabilityTopic.concat("/maintenance/mqttConnectionState"); 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->publishHASSConfigRingDetect(deviceType, baseTopic, name, uidString);
_network->publishHASSConfigSoundLevel(deviceType, baseTopic, name, uidString); _network->publishHASSConfigSoundLevel(deviceType, baseTopic, name, uidString);
_network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString); _network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);

View File

@@ -31,7 +31,7 @@ public:
void publishRssi(const int& rssi); void publishRssi(const int& rssi);
void publishRetry(const std::string& message); void publishRetry(const std::string& message);
void publishBleAddress(const std::string& address); 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 removeHASSConfig(char* uidString);
void publishKeypad(const std::list<NukiLock::KeypadEntry>& entries, uint maxKeypadCodeCount); void publishKeypad(const std::list<NukiLock::KeypadEntry>& entries, uint maxKeypadCodeCount);
void publishKeypadCommandResult(const char* result); void publishKeypadCommandResult(const char* result);