MQTT JSON NukiOpener
This commit is contained in:
@@ -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"
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user