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

@@ -88,19 +88,26 @@ void Nuki::updateKeyTurnerState()
{
_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)
{
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);
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));
}
@@ -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;