add ha topic for last lock action sensor
This commit is contained in:
2
Config.h
2
Config.h
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define NUKI_HUB_VERSION "8.18"
|
#define NUKI_HUB_VERSION "8.19-pre-1"
|
||||||
|
|
||||||
#define MQTT_QOS_LEVEL 1
|
#define MQTT_QOS_LEVEL 1
|
||||||
#define MQTT_CLEAN_SESSIONS false
|
#define MQTT_CLEAN_SESSIONS false
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#define mqtt_topic_config_auto_lock "/configuration/autoLock"
|
#define mqtt_topic_config_auto_lock "/configuration/autoLock"
|
||||||
#define mqtt_topic_config_single_lock "/configuration/singleLock"
|
#define mqtt_topic_config_single_lock "/configuration/singleLock"
|
||||||
#define mqtt_topic_config_sound_level "/configuration/soundLevel"
|
#define mqtt_topic_config_sound_level "/configuration/soundLevel"
|
||||||
|
#define mqtt_topic_config_last_action_authorization "/configuration/lastActionAuthorizaton"
|
||||||
|
|
||||||
#define mqtt_topic_info_hardware_version "/info/hardwareVersion"
|
#define mqtt_topic_info_hardware_version "/info/hardwareVersion"
|
||||||
#define mqtt_topic_info_firmware_version "/info/firmwareVersion"
|
#define mqtt_topic_info_firmware_version "/info/firmwareVersion"
|
||||||
|
|||||||
25
Network.cpp
25
Network.cpp
@@ -856,7 +856,7 @@ void Network::publishHASSConfigLedBrightness(char *deviceType, const char *baseT
|
|||||||
|
|
||||||
void Network::publishHASSConfigSoundLevel(char *deviceType, const char *baseTopic, char *name, char *uidString)
|
void Network::publishHASSConfigSoundLevel(char *deviceType, const char *baseTopic, char *name, char *uidString)
|
||||||
{
|
{
|
||||||
publishHassTopic("number",
|
publishHassTopic("sensor",
|
||||||
"sound_level",
|
"sound_level",
|
||||||
uidString,
|
uidString,
|
||||||
"_sound_level",
|
"_sound_level",
|
||||||
@@ -874,6 +874,25 @@ void Network::publishHASSConfigSoundLevel(char *deviceType, const char *baseTopi
|
|||||||
{ "max", "255" }});
|
{ "max", "255" }});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Network::publishHASSConfigAccessLog(char *deviceType, const char *baseTopic, char *name, char *uidString)
|
||||||
|
{
|
||||||
|
publishHassTopic("sensor",
|
||||||
|
"last_action_authorization",
|
||||||
|
uidString,
|
||||||
|
"_last_action_authorization",
|
||||||
|
"Last action authorization",
|
||||||
|
name,
|
||||||
|
baseTopic,
|
||||||
|
mqtt_topic_lock_log,
|
||||||
|
deviceType,
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"diagnostic",
|
||||||
|
"",
|
||||||
|
{ { "value_template", "{{ (value_json|selectattr('type', 'eq', 'LockAction')|selectattr('action', 'in', ['Lock', 'Unlock', 'Unlatch'])|first).authorizationName }}" }});}
|
||||||
|
|
||||||
|
|
||||||
void Network::publishHASSWifiRssiConfig(char *deviceType, const char *baseTopic, char *name, char *uidString)
|
void Network::publishHASSWifiRssiConfig(char *deviceType, const char *baseTopic, char *name, char *uidString)
|
||||||
{
|
{
|
||||||
if(_device->signalStrength() == 127)
|
if(_device->signalStrength() == 127)
|
||||||
@@ -1083,9 +1102,9 @@ void Network::removeHASSConfig(char* uidString)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Network::removeHASSConfigDoorSensor(char *deviceType, const char *baseTopic, char *name, char *uidString)
|
void Network::removeHASSConfigTopic(char *deviceType, char *name, char *uidString)
|
||||||
{
|
{
|
||||||
removeHassTopic("binary_sensor", "door_sensor", uidString);
|
removeHassTopic(deviceType, name, uidString);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Network::publishPresenceDetection(char *csv)
|
void Network::publishPresenceDetection(char *csv)
|
||||||
|
|||||||
@@ -46,10 +46,11 @@ public:
|
|||||||
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);
|
||||||
|
void publishHASSConfigAccessLog(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||||
void publishHASSWifiRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
void publishHASSWifiRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||||
void publishHASSBleRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
void publishHASSBleRssiConfig(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
||||||
void removeHASSConfig(char* uidString);
|
void removeHASSConfig(char* uidString);
|
||||||
void removeHASSConfigDoorSensor(char* deviceType, const char* baseTopic, char* name, char* uidString);
|
void removeHASSConfigTopic(char* deviceType, char* name, char* uidString);
|
||||||
|
|
||||||
void clearWifiFallback();
|
void clearWifiFallback();
|
||||||
|
|
||||||
|
|||||||
@@ -515,7 +515,7 @@ bool NetworkLock::comparePrefixedPath(const char *fullPath, const char *subPath)
|
|||||||
return strcmp(fullPath, prefixedPath) == 0;
|
return strcmp(fullPath, prefixedPath) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, char *name, char *uidString, const bool& hasDoorSensor, const bool& hasKeypad, 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, char *lockedState, char *unlockedState)
|
||||||
{
|
{
|
||||||
_network->publishHASSConfig(deviceType, baseTopic, name, uidString, hasKeypad, lockAction, unlockAction, openAction, lockedState, unlockedState);
|
_network->publishHASSConfig(deviceType, baseTopic, name, uidString, hasKeypad, lockAction, unlockAction, openAction, lockedState, unlockedState);
|
||||||
@@ -527,10 +527,19 @@ void NetworkLock::publishHASSConfig(char *deviceType, const char *baseTopic, cha
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_network->removeHASSConfigDoorSensor(deviceType, baseTopic, name, uidString);
|
_network->removeHASSConfigTopic("binary_sensor", "door_sensor", uidString);
|
||||||
}
|
}
|
||||||
_network->publishHASSWifiRssiConfig(deviceType, baseTopic, name, uidString);
|
_network->publishHASSWifiRssiConfig(deviceType, baseTopic, name, uidString);
|
||||||
_network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);
|
_network->publishHASSBleRssiConfig(deviceType, baseTopic, name, uidString);
|
||||||
|
|
||||||
|
if(publishAuthData)
|
||||||
|
{
|
||||||
|
_network->publishHASSConfigAccessLog(deviceType, baseTopic, name, uidString);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_network->removeHASSConfigTopic("sensor", "last_action_authorization", uidString);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkLock::removeHASSConfig(char *uidString)
|
void NetworkLock::removeHASSConfig(char *uidString)
|
||||||
|
|||||||
@@ -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, const bool& hasDoorSensor, 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 bool& hasDoorSensor, const bool& hasKeypad, const bool& publishAuthData, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState);
|
||||||
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);
|
||||||
|
|||||||
@@ -481,12 +481,21 @@ 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, const bool& publishAuthData, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState)
|
||||||
{
|
{
|
||||||
_network->publishHASSConfig(deviceType, baseTopic, name, uidString, false, lockAction, unlockAction, openAction, lockedState, unlockedState);
|
_network->publishHASSConfig(deviceType, baseTopic, name, uidString, false, lockAction, unlockAction, openAction, lockedState, unlockedState);
|
||||||
_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);
|
||||||
|
|
||||||
|
if(publishAuthData)
|
||||||
|
{
|
||||||
|
_network->publishHASSConfigAccessLog(deviceType, baseTopic, name, uidString);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_network->removeHASSConfigTopic("sensor", "last_action_authorization", uidString);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkOpener::removeHASSConfig(char* uidString)
|
void NetworkOpener::removeHASSConfig(char* uidString)
|
||||||
|
|||||||
@@ -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, const bool& publishAuthData, char* lockAction, char* unlockAction, char* openAction, char* lockedState, char* unlockedState);
|
||||||
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);
|
||||||
|
|||||||
@@ -646,7 +646,7 @@ void NukiOpenerWrapper::setupHASS()
|
|||||||
String baseTopic = _preferences->getString(preference_mqtt_opener_path);
|
String baseTopic = _preferences->getString(preference_mqtt_opener_path);
|
||||||
char uidString[20];
|
char uidString[20];
|
||||||
itoa(_nukiConfig.nukiId, uidString, 16);
|
itoa(_nukiConfig.nukiId, uidString, 16);
|
||||||
_network->publishHASSConfig("Opener",baseTopic.c_str(),(char*)_nukiConfig.name,uidString,"deactivateRTO","activateRTO","electricStrikeActuation","locked","unlocked");
|
_network->publishHASSConfig("Opener",baseTopic.c_str(),(char*)_nukiConfig.name,uidString, _publishAuthData, "deactivateRTO","activateRTO","electricStrikeActuation","locked","unlocked");
|
||||||
_hassSetupCompleted = true;
|
_hassSetupCompleted = true;
|
||||||
|
|
||||||
Log->println("HASS setup for opener completed.");
|
Log->println("HASS setup for opener completed.");
|
||||||
|
|||||||
@@ -661,7 +661,7 @@ void NukiWrapper::setupHASS()
|
|||||||
char uidString[20];
|
char uidString[20];
|
||||||
itoa(_nukiConfig.nukiId, uidString, 16);
|
itoa(_nukiConfig.nukiId, uidString, 16);
|
||||||
|
|
||||||
_network->publishHASSConfig("SmartLock", baseTopic.c_str(),(char*)_nukiConfig.name, uidString, hasDoorSensor(), _hasKeypad, "lock", "unlock", "unlatch", "locked", "unlocked");
|
_network->publishHASSConfig("SmartLock", baseTopic.c_str(),(char*)_nukiConfig.name, uidString, hasDoorSensor(), _hasKeypad, _publishAuthData,"lock", "unlock", "unlatch", "locked", "unlocked");
|
||||||
_hassSetupCompleted = true;
|
_hassSetupCompleted = true;
|
||||||
|
|
||||||
Log->println("HASS setup for lock completed.");
|
Log->println("HASS setup for lock completed.");
|
||||||
|
|||||||
Reference in New Issue
Block a user