From 0c03a64a866891c4d061420365234d867e0bfecb Mon Sep 17 00:00:00 2001 From: technyon Date: Fri, 25 Mar 2022 20:19:21 +0100 Subject: [PATCH] publish lock state to mqtt --- CMakeLists.txt | 1 + MqttTopics.h | 3 +++ Network.cpp | 32 ++++++++++++++++++++------------ Network.h | 4 +++- Nuki.cpp | 10 +++++++++- Nuki.h | 1 + 6 files changed, 37 insertions(+), 14 deletions(-) create mode 100644 MqttTopics.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 16f7d17..5b9ae43 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,7 @@ file(GLOB SRCFILES # "Lib/FreeRTOS/src/*.cpp" Network.cpp Nuki.cpp + MqttTopics.h lib/ESP32_BLE_Arduino-1.0.1/src/*.cpp lib/ESP32_BLE_Arduino-1.0.1/src/*.h lib/WiFiManager/WiFiManager.cpp diff --git a/MqttTopics.h b/MqttTopics.h new file mode 100644 index 0000000..050a581 --- /dev/null +++ b/MqttTopics.h @@ -0,0 +1,3 @@ +#pragma once + +#define mqtt_topc_lockstate "nuki/lockstate" \ No newline at end of file diff --git a/Network.cpp b/Network.cpp index db37a1d..d4d7338 100644 --- a/Network.cpp +++ b/Network.cpp @@ -2,6 +2,7 @@ #include "WiFi.h" #include // https://github.com/tzapu/WiFiManager #include "Arduino.h" +#include "MqttTopics.h" Network* nwInst; @@ -82,18 +83,18 @@ void Network::update() } } - unsigned long ts = millis(); - if(_publishTs < ts) - { - _publishTs = ts + 1000; - - ++_count; - - char cstr[16]; - itoa(_count, cstr, 10); - - _mqttClient.publish("nuki/counter", cstr); - } +// unsigned long ts = millis(); +// if(_publishTs < ts) +// { +// _publishTs = ts + 1000; +// +// ++_count; +// +// char cstr[16]; +// itoa(_count, cstr, 10); +// +// _mqttClient.publish("nuki/counter", cstr); +// } _mqttClient.loop(); @@ -122,3 +123,10 @@ void Network::onMqttDataReceived(char *&topic, byte *&payload, unsigned int &len Serial.println(value); } } + +void Network::publishKeyTurnerState(const KeyTurnerState &state) +{ + char cstr[10]; + itoa((int)state.lockState, cstr, 10); + _mqttClient.publish(mqtt_topc_lockstate, cstr); +} diff --git a/Network.h b/Network.h index f3320c4..f111d13 100644 --- a/Network.h +++ b/Network.h @@ -2,6 +2,7 @@ #include #include +#include "NukiConstants.h" class Network { @@ -11,6 +12,8 @@ public: void initialize(); void update(); + void publishKeyTurnerState(const KeyTurnerState& state); + private: static void onMqttDataReceivedCallback(char* topic, byte* payload, unsigned int length); void onMqttDataReceived(char*& topic, byte*& payload, unsigned int& length); @@ -20,6 +23,5 @@ private: PubSubClient _mqttClient; WiFiClient _wifiClient; - uint32_t _count = 0; unsigned long _publishTs = 0; }; diff --git a/Nuki.cpp b/Nuki.cpp index 34c6efc..c6ef285 100644 --- a/Nuki.cpp +++ b/Nuki.cpp @@ -5,7 +5,8 @@ Nuki::Nuki(const std::string& name, uint32_t id, Network* network) : _nukiBle(name, id), _network(network) { - + memset(&_lastKeyTurnerState, sizeof(KeyTurnerState), 0); + memset(&_keyTurnerState, sizeof(KeyTurnerState), 0); } void Nuki::initialize() @@ -33,5 +34,12 @@ void Nuki::update() Serial.print(F("Nuki lock state: ")); Serial.println((int)_keyTurnerState.lockState); + if(_keyTurnerState.lockState != _lastKeyTurnerState.lockState) + { + _network->publishKeyTurnerState(_keyTurnerState); + } + + memcpy(&_lastKeyTurnerState, &_keyTurnerState, sizeof(KeyTurnerState)); + vTaskDelay( 20000 / portTICK_PERIOD_MS); } diff --git a/Nuki.h b/Nuki.h index e66799d..b447567 100644 --- a/Nuki.h +++ b/Nuki.h @@ -16,6 +16,7 @@ private: NukiBle _nukiBle; Network* _network; + KeyTurnerState _lastKeyTurnerState; KeyTurnerState _keyTurnerState; bool _paired = false;