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_trigger "nuki/lock/trigger"
|
||||||
#define mqtt_topic_lockstate_completionStatus "nuki/lock/completionStatus"
|
#define mqtt_topic_lockstate_completionStatus "nuki/lock/completionStatus"
|
||||||
#define mqtt_topic_lockstate_action "nuki/lock/action"
|
#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);
|
_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 *))
|
void Network::setLockActionReceived(void (*lockActionReceivedCallback)(const char *))
|
||||||
{
|
{
|
||||||
_lockActionReceivedCallback = lockActionReceivedCallback;
|
_lockActionReceivedCallback = lockActionReceivedCallback;
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ public:
|
|||||||
bool isMqttConnected();
|
bool isMqttConnected();
|
||||||
|
|
||||||
void publishKeyTurnerState(const char* state, const char* trigger, const char* completionStatus);
|
void publishKeyTurnerState(const char* state, const char* trigger, const char* completionStatus);
|
||||||
|
void publishDoorSensorState(const char* state);
|
||||||
void publishBatteryReport(const BatteryReport& batteryReport);
|
void publishBatteryReport(const BatteryReport& batteryReport);
|
||||||
|
|
||||||
void setLockActionReceived(void (*lockActionReceivedCallback)(const char* value));
|
void setLockActionReceived(void (*lockActionReceivedCallback)(const char* value));
|
||||||
|
|||||||
53
Nuki.cpp
53
Nuki.cpp
@@ -88,19 +88,26 @@ void Nuki::updateKeyTurnerState()
|
|||||||
{
|
{
|
||||||
_nukiBle.requestKeyTurnerState(&_keyTurnerState);
|
_nukiBle.requestKeyTurnerState(&_keyTurnerState);
|
||||||
|
|
||||||
char lockStateStr[20];
|
|
||||||
lockstateToString(_keyTurnerState.lockState, lockStateStr);
|
|
||||||
char triggerStr[20];
|
|
||||||
triggerToString(_keyTurnerState.trigger, triggerStr);
|
|
||||||
char completionStatusStr[20];
|
|
||||||
completionStatusToString(_keyTurnerState.lastLockActionCompletionStatus, completionStatusStr);
|
|
||||||
|
|
||||||
if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState)
|
if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState)
|
||||||
{
|
{
|
||||||
|
char lockStateStr[20];
|
||||||
|
lockstateToString(_keyTurnerState.lockState, lockStateStr);
|
||||||
|
char triggerStr[20];
|
||||||
|
triggerToString(_keyTurnerState.trigger, triggerStr);
|
||||||
|
char completionStatusStr[20];
|
||||||
|
completionStatusToString(_keyTurnerState.lastLockActionCompletionStatus, completionStatusStr);
|
||||||
|
|
||||||
_network->publishKeyTurnerState(lockStateStr, triggerStr, completionStatusStr);
|
_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);
|
||||||
}
|
}
|
||||||
Serial.print(F("Nuki lock state: "));
|
|
||||||
Serial.println(lockStateStr);
|
|
||||||
|
|
||||||
memcpy(&_lastKeyTurnerState, &_keyTurnerState, sizeof(KeyTurnerState));
|
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)
|
LockAction Nuki::lockActionToEnum(const char *str)
|
||||||
{
|
{
|
||||||
if(strcmp(str, "unlock") == 0) return LockAction::unlock;
|
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 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 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;
|
NukiBle _nukiBle;
|
||||||
Network* _network;
|
Network* _network;
|
||||||
|
|||||||
Reference in New Issue
Block a user