fixed issue #23: Using Lockngo does not change the lock state
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
#define mqtt_topic_battery_lock_distance "/battery/lockDistance"
|
#define mqtt_topic_battery_lock_distance "/battery/lockDistance"
|
||||||
|
|
||||||
#define mqtt_topic_lock_state "/lock/state"
|
#define mqtt_topic_lock_state "/lock/state"
|
||||||
|
#define mqtt_topic_lock_binary_state "/lock/binaryState"
|
||||||
#define mqtt_topic_lock_trigger "/lock/trigger"
|
#define mqtt_topic_lock_trigger "/lock/trigger"
|
||||||
#define mqtt_topic_lock_auth_id "/lock/authorizationId"
|
#define mqtt_topic_lock_auth_id "/lock/authorizationId"
|
||||||
#define mqtt_topic_lock_auth_name "/lock/authorizationName"
|
#define mqtt_topic_lock_auth_name "/lock/authorizationName"
|
||||||
|
|||||||
@@ -365,7 +365,7 @@ void Network::publishHASSConfig(char* deviceType, const char* baseTopic, char* n
|
|||||||
configJSON.concat("\",\"pl_open\":\"");
|
configJSON.concat("\",\"pl_open\":\"");
|
||||||
configJSON.concat(openAction);
|
configJSON.concat(openAction);
|
||||||
configJSON.concat("\",\"stat_t\":\"~");
|
configJSON.concat("\",\"stat_t\":\"~");
|
||||||
configJSON.concat(mqtt_topic_lock_state);
|
configJSON.concat(mqtt_topic_lock_binary_state);
|
||||||
configJSON.concat("\",\"stat_locked\":\"");
|
configJSON.concat("\",\"stat_locked\":\"");
|
||||||
configJSON.concat(lockedState);
|
configJSON.concat(lockedState);
|
||||||
configJSON.concat("\",\"stat_unlocked\":\"");
|
configJSON.concat("\",\"stat_unlocked\":\"");
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ void NetworkLock::initialize()
|
|||||||
|
|
||||||
_network->setMqttPresencePath(_mqttPath);
|
_network->setMqttPresencePath(_mqttPath);
|
||||||
|
|
||||||
|
_haEnabled = _preferences->getString(preference_mqtt_hass_discovery) != "";
|
||||||
|
|
||||||
_network->subscribe(_mqttPath, mqtt_topic_lock_action);
|
_network->subscribe(_mqttPath, mqtt_topic_lock_action);
|
||||||
for(const auto& topic : _configTopics)
|
for(const auto& topic : _configTopics)
|
||||||
{
|
{
|
||||||
@@ -117,6 +119,11 @@ void NetworkLock::publishKeyTurnerState(const NukiLock::KeyTurnerState& keyTurne
|
|||||||
memset(&str, 0, sizeof(str));
|
memset(&str, 0, sizeof(str));
|
||||||
lockstateToString(keyTurnerState.lockState, str);
|
lockstateToString(keyTurnerState.lockState, str);
|
||||||
publishString(mqtt_topic_lock_state, str);
|
publishString(mqtt_topic_lock_state, str);
|
||||||
|
|
||||||
|
if(_haEnabled)
|
||||||
|
{
|
||||||
|
publishBinaryState(keyTurnerState.lockState);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger)
|
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger)
|
||||||
@@ -155,6 +162,27 @@ void NetworkLock::publishKeyTurnerState(const NukiLock::KeyTurnerState& keyTurne
|
|||||||
_firstTunerStatePublish = false;
|
_firstTunerStatePublish = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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::Unlocked:
|
||||||
|
case NukiLock::LockState::Unlocking:
|
||||||
|
case NukiLock::LockState::Unlatched:
|
||||||
|
case NukiLock::LockState::Unlatching:
|
||||||
|
case NukiLock::LockState::UnlockedLnga:
|
||||||
|
publishString(mqtt_topic_lock_binary_state, "unlocked");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void NetworkLock::publishAuthorizationInfo(const uint32_t authId, const char *authName)
|
void NetworkLock::publishAuthorizationInfo(const uint32_t authId, const char *authName)
|
||||||
{
|
{
|
||||||
publishUInt(mqtt_topic_lock_auth_id, authId);
|
publishUInt(mqtt_topic_lock_auth_id, authId);
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ public:
|
|||||||
void update();
|
void update();
|
||||||
|
|
||||||
void publishKeyTurnerState(const NukiLock::KeyTurnerState& keyTurnerState, const NukiLock::KeyTurnerState& lastKeyTurnerState);
|
void publishKeyTurnerState(const NukiLock::KeyTurnerState& keyTurnerState, const NukiLock::KeyTurnerState& lastKeyTurnerState);
|
||||||
|
void publishBinaryState(NukiLock::LockState lockState);
|
||||||
void publishAuthorizationInfo(const uint32_t authId, const char* authName);
|
void publishAuthorizationInfo(const uint32_t authId, const char* authName);
|
||||||
void publishCommandResult(const char* resultStr);
|
void publishCommandResult(const char* resultStr);
|
||||||
void publishBatteryReport(const NukiLock::BatteryReport& batteryReport);
|
void publishBatteryReport(const NukiLock::BatteryReport& batteryReport);
|
||||||
@@ -52,6 +53,7 @@ private:
|
|||||||
|
|
||||||
bool _firstTunerStatePublish = true;
|
bool _firstTunerStatePublish = true;
|
||||||
unsigned long _lastMaintenanceTs = 0;
|
unsigned long _lastMaintenanceTs = 0;
|
||||||
|
bool _haEnabled= false;
|
||||||
|
|
||||||
bool (*_lockActionReceivedCallback)(const char* value) = nullptr;
|
bool (*_lockActionReceivedCallback)(const char* value) = nullptr;
|
||||||
void (*_configUpdateReceivedCallback)(const char* path, const char* value) = nullptr;
|
void (*_configUpdateReceivedCallback)(const char* path, const char* value) = nullptr;
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ void NetworkOpener::initialize()
|
|||||||
_preferences->putString(preference_mqtt_opener_path, _mqttPath);
|
_preferences->putString(preference_mqtt_opener_path, _mqttPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_haEnabled = _preferences->getString(preference_mqtt_hass_discovery) != "";
|
||||||
|
|
||||||
_network->subscribe(_mqttPath, mqtt_topic_lock_action);
|
_network->subscribe(_mqttPath, mqtt_topic_lock_action);
|
||||||
for(const auto& topic : _configTopics)
|
for(const auto& topic : _configTopics)
|
||||||
{
|
{
|
||||||
@@ -86,6 +88,11 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
|
|||||||
memset(&str, 0, sizeof(str));
|
memset(&str, 0, sizeof(str));
|
||||||
lockstateToString(keyTurnerState.lockState, str);
|
lockstateToString(keyTurnerState.lockState, str);
|
||||||
publishString(mqtt_topic_lock_state, str);
|
publishString(mqtt_topic_lock_state, str);
|
||||||
|
|
||||||
|
if(_haEnabled)
|
||||||
|
{
|
||||||
|
publishBinaryState(keyTurnerState.lockState);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger)
|
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger)
|
||||||
@@ -118,6 +125,23 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
|
|||||||
_firstTunerStatePublish = false;
|
_firstTunerStatePublish = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkOpener::publishBinaryState(NukiOpener::LockState lockState)
|
||||||
|
{
|
||||||
|
switch(lockState)
|
||||||
|
{
|
||||||
|
case NukiOpener::LockState::Locked:
|
||||||
|
case NukiOpener::LockState::RTOactive:
|
||||||
|
publishString(mqtt_topic_lock_binary_state, "locked");
|
||||||
|
break;
|
||||||
|
case NukiOpener::LockState::Open:
|
||||||
|
case NukiOpener::LockState::Opening:
|
||||||
|
publishString(mqtt_topic_lock_binary_state, "unlocked");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void NetworkOpener::publishAuthorizationInfo(const uint32_t authId, const char *authName)
|
void NetworkOpener::publishAuthorizationInfo(const uint32_t authId, const char *authName)
|
||||||
{
|
{
|
||||||
publishUInt(mqtt_topic_lock_auth_id, authId);
|
publishUInt(mqtt_topic_lock_auth_id, authId);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public:
|
|||||||
void initialize();
|
void initialize();
|
||||||
|
|
||||||
void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState);
|
void publishKeyTurnerState(const NukiOpener::OpenerState& keyTurnerState, const NukiOpener::OpenerState& lastKeyTurnerState);
|
||||||
|
void publishBinaryState(NukiOpener::LockState lockState);
|
||||||
void publishAuthorizationInfo(const uint32_t authId, const char* authName);
|
void publishAuthorizationInfo(const uint32_t authId, const char* authName);
|
||||||
void publishCommandResult(const char* resultStr);
|
void publishCommandResult(const char* resultStr);
|
||||||
void publishBatteryReport(const NukiOpener::BatteryReport& batteryReport);
|
void publishBatteryReport(const NukiOpener::BatteryReport& batteryReport);
|
||||||
@@ -54,6 +55,7 @@ private:
|
|||||||
std::vector<char*> _configTopics;
|
std::vector<char*> _configTopics;
|
||||||
|
|
||||||
bool _firstTunerStatePublish = true;
|
bool _firstTunerStatePublish = true;
|
||||||
|
bool _haEnabled= false;
|
||||||
|
|
||||||
bool (*_lockActionReceivedCallback)(const char* value) = nullptr;
|
bool (*_lockActionReceivedCallback)(const char* value) = nullptr;
|
||||||
void (*_configUpdateReceivedCallback)(const char* path, const char* value) = nullptr;
|
void (*_configUpdateReceivedCallback)(const char* path, const char* value) = nullptr;
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define nuki_hub_version "5.5"
|
#define nuki_hub_version "5.6"
|
||||||
Binary file not shown.
Reference in New Issue
Block a user