MQTT JSON NukiOpener

This commit is contained in:
iranl
2024-02-16 21:30:03 +01:00
parent a1c259057d
commit 0b05f374f5
2 changed files with 37 additions and 11 deletions

View File

@@ -10,6 +10,7 @@
#define mqtt_topic_battery_keypad_critical "/battery/keypadCritical" #define mqtt_topic_battery_keypad_critical "/battery/keypadCritical"
#define mqtt_topic_lock_state "/lock/state" #define mqtt_topic_lock_state "/lock/state"
#define mqtt_topic_lock_json "/lock/json"
#define mqtt_topic_query_config "/lock/query/config" #define mqtt_topic_query_config "/lock/query/config"
#define mqtt_topic_query_lockstate "/lock/query/lockstate" #define mqtt_topic_query_lockstate "/lock/query/lockstate"
#define mqtt_topic_query_keypad "/lock/query/keypad" #define mqtt_topic_query_keypad "/lock/query/keypad"

View File

@@ -202,18 +202,20 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
_currentLockState = keyTurnerState.lockState; _currentLockState = keyTurnerState.lockState;
char str[50]; char str[50];
memset(&str, 0, sizeof(str));
DynamicJsonDocument json(_bufferSize);
lockstateToString(keyTurnerState.lockState, str);
if((_firstTunerStatePublish || keyTurnerState.lockState != lastKeyTurnerState.lockState || keyTurnerState.nukiState != lastKeyTurnerState.nukiState) && keyTurnerState.lockState != NukiOpener::LockState::Undefined) if((_firstTunerStatePublish || keyTurnerState.lockState != lastKeyTurnerState.lockState || keyTurnerState.nukiState != lastKeyTurnerState.nukiState) && keyTurnerState.lockState != NukiOpener::LockState::Undefined)
{ {
memset(&str, 0, sizeof(str));
if(keyTurnerState.nukiState == NukiOpener::State::ContinuousMode) if(keyTurnerState.nukiState == NukiOpener::State::ContinuousMode)
{ {
publishString(mqtt_topic_lock_state, "ContinuousMode"); publishString(mqtt_topic_lock_state, "ContinuousMode");
} }
else else
{ {
lockstateToString(keyTurnerState.lockState, str);
publishString(mqtt_topic_lock_state, str); publishString(mqtt_topic_lock_state, str);
} }
@@ -223,34 +225,57 @@ void NetworkOpener::publishKeyTurnerState(const NukiOpener::OpenerState& keyTurn
} }
} }
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger) json["lock_state"] = str;
if(keyTurnerState.nukiState == NukiOpener::State::ContinuousMode)
{ {
json["continuous_mode"] = true;
} else {
json["continuous_mode"] = false;
}
memset(&str, 0, sizeof(str)); memset(&str, 0, sizeof(str));
triggerToString(keyTurnerState.trigger, str); triggerToString(keyTurnerState.trigger, str);
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger)
{
publishString(mqtt_topic_lock_trigger, str); publishString(mqtt_topic_lock_trigger, str);
} }
json["trigger"] = str;
memset(&str, 0, sizeof(str));
completionStatusToString(keyTurnerState.lastLockActionCompletionStatus, str);
if(_firstTunerStatePublish || keyTurnerState.lastLockActionCompletionStatus != lastKeyTurnerState.lastLockActionCompletionStatus) if(_firstTunerStatePublish || keyTurnerState.lastLockActionCompletionStatus != lastKeyTurnerState.lastLockActionCompletionStatus)
{ {
memset(&str, 0, sizeof(str));
completionStatusToString(keyTurnerState.lastLockActionCompletionStatus, str);
publishString(mqtt_topic_lock_completionStatus, str); publishString(mqtt_topic_lock_completionStatus, str);
} }
if(_firstTunerStatePublish || keyTurnerState.doorSensorState != lastKeyTurnerState.doorSensorState) json["lock_completion_status"] = str;
{
memset(&str, 0, sizeof(str)); memset(&str, 0, sizeof(str));
NukiOpener::doorSensorStateToString(keyTurnerState.doorSensorState, str); NukiOpener::doorSensorStateToString(keyTurnerState.doorSensorState, str);
if(_firstTunerStatePublish || keyTurnerState.doorSensorState != lastKeyTurnerState.doorSensorState)
{
publishString(mqtt_topic_lock_door_sensor_state, str); publishString(mqtt_topic_lock_door_sensor_state, str);
} }
json["door_sensor_state"] = str;
bool critical = (keyTurnerState.criticalBatteryState & 0b00000001) > 0;
if(_firstTunerStatePublish || keyTurnerState.criticalBatteryState != lastKeyTurnerState.criticalBatteryState) if(_firstTunerStatePublish || keyTurnerState.criticalBatteryState != lastKeyTurnerState.criticalBatteryState)
{ {
bool critical = (keyTurnerState.criticalBatteryState & 0b00000001) > 0;
publishBool(mqtt_topic_battery_critical, critical); publishBool(mqtt_topic_battery_critical, critical);
} }
json["battery_critical"] = critical;
serializeJson(json, _buffer, _bufferSize);
publishString(mqtt_topic_lock_json, _buffer);
_firstTunerStatePublish = false; _firstTunerStatePublish = false;
} }