publish lock state to mqtt

This commit is contained in:
technyon
2022-03-25 20:19:21 +01:00
parent fb5dcfaac6
commit 0c03a64a86
6 changed files with 37 additions and 14 deletions

View File

@@ -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

3
MqttTopics.h Normal file
View File

@@ -0,0 +1,3 @@
#pragma once
#define mqtt_topc_lockstate "nuki/lockstate"

View File

@@ -2,6 +2,7 @@
#include "WiFi.h"
#include <WiFiManager.h> // 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);
}

View File

@@ -2,6 +2,7 @@
#include <PubSubClient.h>
#include <WiFiClient.h>
#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;
};

View File

@@ -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);
}

1
Nuki.h
View File

@@ -16,6 +16,7 @@ private:
NukiBle _nukiBle;
Network* _network;
KeyTurnerState _lastKeyTurnerState;
KeyTurnerState _keyTurnerState;
bool _paired = false;