publish door sensor state via mqtt
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
41
Nuki.cpp
41
Nuki.cpp
@@ -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
1
Nuki.h
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user