From 66e02395899426babb2f43096af97d77c28ed3fa Mon Sep 17 00:00:00 2001 From: technyon Date: Fri, 25 Mar 2022 20:57:40 +0100 Subject: [PATCH] convert lock state to string --- Network.cpp | 6 ++---- Network.h | 2 +- Nuki.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- Nuki.h | 2 ++ 4 files changed, 51 insertions(+), 7 deletions(-) diff --git a/Network.cpp b/Network.cpp index d4d7338..fcb5227 100644 --- a/Network.cpp +++ b/Network.cpp @@ -124,9 +124,7 @@ void Network::onMqttDataReceived(char *&topic, byte *&payload, unsigned int &len } } -void Network::publishKeyTurnerState(const KeyTurnerState &state) +void Network::publishKeyTurnerState(const char* state) { - char cstr[10]; - itoa((int)state.lockState, cstr, 10); - _mqttClient.publish(mqtt_topc_lockstate, cstr); + _mqttClient.publish(mqtt_topc_lockstate, state); } diff --git a/Network.h b/Network.h index f111d13..9f25377 100644 --- a/Network.h +++ b/Network.h @@ -12,7 +12,7 @@ public: void initialize(); void update(); - void publishKeyTurnerState(const KeyTurnerState& state); + void publishKeyTurnerState(const char* state); private: static void onMqttDataReceivedCallback(char* topic, byte* payload, unsigned int length); diff --git a/Nuki.cpp b/Nuki.cpp index c6ef285..d2682e3 100644 --- a/Nuki.cpp +++ b/Nuki.cpp @@ -25,21 +25,65 @@ void Nuki::update() } else { + vTaskDelay( 200 / portTICK_PERIOD_MS); return; } } vTaskDelay( 100 / portTICK_PERIOD_MS); _nukiBle.requestKeyTurnerState(&_keyTurnerState); + + char str[20]; + stateToString(_keyTurnerState.lockState, str); Serial.print(F("Nuki lock state: ")); - Serial.println((int)_keyTurnerState.lockState); + Serial.println(str); if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState) { - _network->publishKeyTurnerState(_keyTurnerState); + _network->publishKeyTurnerState(str); } memcpy(&_lastKeyTurnerState, &_keyTurnerState, sizeof(KeyTurnerState)); vTaskDelay( 20000 / portTICK_PERIOD_MS); } + +void Nuki::stateToString(LockState state, char* str) +{ + switch(state) + { + case LockState::uncalibrated: + strcpy(str, "uncalibrated"); + break; + case LockState::locked: + strcpy(str, "locked"); + break; + case LockState::locking: + strcpy(str, "locking"); + break; + case LockState::unlocked: + strcpy(str, "unlocked"); + break; + case LockState::unlatched: + strcpy(str, "unlatched"); + break; + case LockState::unlockedLnga: + strcpy(str, "unlockedLnga"); + break; + case LockState::unlatching: + strcpy(str, "unlatching"); + break; + case LockState::calibration: + strcpy(str, "calibration"); + break; + case LockState::bootRun: + strcpy(str, "bootRun"); + break; + case LockState::motorBlocked: + strcpy(str, "motorBlocked"); + break; + default: + strcpy(str, "undefined"); + break; + } +} diff --git a/Nuki.h b/Nuki.h index b447567..4074782 100644 --- a/Nuki.h +++ b/Nuki.h @@ -13,6 +13,8 @@ public: void update(); private: + void stateToString(LockState state, char* str); // char array at least 14 characters + NukiBle _nukiBle; Network* _network;