MQTT JSON NukiLock

This commit is contained in:
iranl
2024-02-16 21:37:47 +01:00
parent 0b05f374f5
commit 8757197c36
2 changed files with 50 additions and 23 deletions

View File

@@ -209,11 +209,15 @@ void NetworkLock::onMqttDataReceived(const char* topic, byte* payload, const uns
void NetworkLock::publishKeyTurnerState(const NukiLock::KeyTurnerState& keyTurnerState, const NukiLock::KeyTurnerState& lastKeyTurnerState) void NetworkLock::publishKeyTurnerState(const NukiLock::KeyTurnerState& keyTurnerState, const NukiLock::KeyTurnerState& lastKeyTurnerState)
{ {
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.lockState != NukiLock::LockState::Undefined) if((_firstTunerStatePublish || keyTurnerState.lockState != lastKeyTurnerState.lockState) && keyTurnerState.lockState != NukiLock::LockState::Undefined)
{ {
memset(&str, 0, sizeof(str));
lockstateToString(keyTurnerState.lockState, str);
publishString(mqtt_topic_lock_state, str); publishString(mqtt_topic_lock_state, str);
if(_haEnabled) if(_haEnabled)
@@ -222,57 +226,80 @@ void NetworkLock::publishKeyTurnerState(const NukiLock::KeyTurnerState& keyTurne
} }
} }
json["lock_state"] = str;
memset(&str, 0, sizeof(str));
triggerToString(keyTurnerState.trigger, str);
if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger) if(_firstTunerStatePublish || keyTurnerState.trigger != lastKeyTurnerState.trigger)
{ {
memset(&str, 0, sizeof(str));
triggerToString(keyTurnerState.trigger, str);
publishString(mqtt_topic_lock_trigger, str); publishString(mqtt_topic_lock_trigger, str);
} }
json["trigger"] = str;
memset(&str, 0, sizeof(str));
lockactionToString(keyTurnerState.lastLockAction, str);
if(_firstTunerStatePublish || keyTurnerState.lastLockAction != lastKeyTurnerState.lastLockAction) if(_firstTunerStatePublish || keyTurnerState.lastLockAction != lastKeyTurnerState.lastLockAction)
{ {
memset(&str, 0, sizeof(str));
lockactionToString(keyTurnerState.lastLockAction, str);
publishString(mqtt_topic_lock_last_lock_action, str); publishString(mqtt_topic_lock_last_lock_action, str);
} }
json["last_lock_action"] = str;
memset(&str, 0, sizeof(str));
NukiLock::completionStatusToString(keyTurnerState.lastLockActionCompletionStatus, str);
if(_firstTunerStatePublish || keyTurnerState.lastLockActionCompletionStatus != lastKeyTurnerState.lastLockActionCompletionStatus) if(_firstTunerStatePublish || keyTurnerState.lastLockActionCompletionStatus != lastKeyTurnerState.lastLockActionCompletionStatus)
{ {
memset(&str, 0, sizeof(str));
NukiLock::completionStatusToString(keyTurnerState.lastLockActionCompletionStatus, str);
publishString(mqtt_topic_lock_completionStatus, str); publishString(mqtt_topic_lock_completionStatus, str);
} }
json["lock_completion_status"] = str;
memset(&str, 0, sizeof(str));
NukiLock::doorSensorStateToString(keyTurnerState.doorSensorState, str);
if(_firstTunerStatePublish || keyTurnerState.doorSensorState != lastKeyTurnerState.doorSensorState) if(_firstTunerStatePublish || keyTurnerState.doorSensorState != lastKeyTurnerState.doorSensorState)
{ {
memset(&str, 0, sizeof(str));
NukiLock::doorSensorStateToString(keyTurnerState.doorSensorState, str);
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;
bool charging = (keyTurnerState.criticalBatteryState & 0b00000010) > 0;
uint8_t level = (keyTurnerState.criticalBatteryState & 0b11111100) >> 1;
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);
bool charging = (keyTurnerState.criticalBatteryState & 0b00000010) > 0;
publishBool(mqtt_topic_battery_charging, charging); publishBool(mqtt_topic_battery_charging, charging);
uint8_t level = (keyTurnerState.criticalBatteryState & 0b11111100) >> 1;
publishInt(mqtt_topic_battery_level, level); publishInt(mqtt_topic_battery_level, level);
} }
json["battery_critical"] = critical;
json["battery_charging"] = charging;
json["battery_level"] = level;
bool keypadBatteryCritical;
if ((keyTurnerState.accessoryBatteryState & (1 << 7)) != 0) {
keypadBatteryCritical = (keyTurnerState.accessoryBatteryState & (1 << 6)) != 0);
}
else
{
keypadBatteryCritical = false;
}
if(_firstTunerStatePublish || keyTurnerState.accessoryBatteryState != lastKeyTurnerState.accessoryBatteryState) if(_firstTunerStatePublish || keyTurnerState.accessoryBatteryState != lastKeyTurnerState.accessoryBatteryState)
{ {
if ((keyTurnerState.accessoryBatteryState & (1 << 7)) != 0) { publishBool(mqtt_topic_battery_keypad_critical, keypadBatteryCritical);
publishBool(mqtt_topic_battery_keypad_critical, (keyTurnerState.accessoryBatteryState & (1 << 6)) != 0);
}
else
{
publishBool(mqtt_topic_battery_keypad_critical, false);
}
} }
json["keypad_battery_critical"] = keypadBatteryCritical;
_firstTunerStatePublish = false; _firstTunerStatePublish = false;
} }