publish door sensor state via mqtt

This commit is contained in:
technyon
2022-03-31 17:56:30 +02:00
parent f3de3c75df
commit 1efd8157e2
5 changed files with 53 additions and 10 deletions

View File

@@ -8,3 +8,4 @@
#define mqtt_topic_lockstate_trigger "nuki/lock/trigger"
#define mqtt_topic_lockstate_completionStatus "nuki/lock/completionStatus"
#define mqtt_topic_lockstate_action "nuki/lock/action"
#define mqtt_topic_door_sensor_state_action "nuki/lock/doorSensorState"

View File

@@ -144,6 +144,11 @@ void Network::publishKeyTurnerState(const char* state, const char* trigger, cons
_mqttClient.publish(mqtt_topic_lockstate_completionStatus, completionStatus);
}
void Network::publishDoorSensorState(const char *state)
{
_mqttClient.publish(mqtt_topic_door_sensor_state_action, state);
}
void Network::setLockActionReceived(void (*lockActionReceivedCallback)(const char *))
{
_lockActionReceivedCallback = lockActionReceivedCallback;

View File

@@ -17,6 +17,7 @@ public:
bool isMqttConnected();
void publishKeyTurnerState(const char* state, const char* trigger, const char* completionStatus);
void publishDoorSensorState(const char* state);
void publishBatteryReport(const BatteryReport& batteryReport);
void setLockActionReceived(void (*lockActionReceivedCallback)(const char* value));

View File

@@ -88,6 +88,8 @@ void Nuki::updateKeyTurnerState()
{
_nukiBle.requestKeyTurnerState(&_keyTurnerState);
if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState)
{
char lockStateStr[20];
lockstateToString(_keyTurnerState.lockState, lockStateStr);
char triggerStr[20];
@@ -95,12 +97,17 @@ void Nuki::updateKeyTurnerState()
char completionStatusStr[20];
completionStatusToString(_keyTurnerState.lastLockActionCompletionStatus, completionStatusStr);
if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState)
{
_network->publishKeyTurnerState(lockStateStr, triggerStr, completionStatusStr);
}
Serial.print(F("Nuki lock state: "));
Serial.println(lockStateStr);
}
if(_keyTurnerState.doorSensorState != _lastKeyTurnerState.doorSensorState)
{
char doorSensorStateStr[20];
doorSensorStateToString(_keyTurnerState.doorSensorState, doorSensorStateStr);
_network->publishDoorSensorState(doorSensorStateStr);
}
memcpy(&_lastKeyTurnerState, &_keyTurnerState, sizeof(KeyTurnerState));
}
@@ -234,6 +241,34 @@ void Nuki::completionStatusToString(const CompletionStatus status, char *str)
}
}
void Nuki::doorSensorStateToString(const DoorSensorState state, char *str)
{
switch(state)
{
case DoorSensorState::unavailable:
strcpy(str, "unavailable");
break;
case DoorSensorState::deactivated:
strcpy(str, "deactivated");
break;
case DoorSensorState::doorClosed:
strcpy(str, "doorClosed");
break;
case DoorSensorState::doorOpened:
strcpy(str, "doorOpened");
break;
case DoorSensorState::doorStateUnknown:
strcpy(str, "doorStateUnknown");
break;
case DoorSensorState::calibrating:
strcpy(str, "calibrating");
break;
default:
strcpy(str, "undefined");
break;
}
}
LockAction Nuki::lockActionToEnum(const char *str)
{
if(strcmp(str, "unlock") == 0) return LockAction::unlock;

1
Nuki.h
View File

@@ -27,6 +27,7 @@ private:
void triggerToString(const NukiTrigger trigger, char* str); // char arry at least 10 characters
void completionStatusToString(const CompletionStatus status, char* str); // char arry at least 18 characters
void doorSensorStateToString(const DoorSensorState state, char* str); // char arry at least 17 characters
NukiBle _nukiBle;
Network* _network;