Mercurial > code > home > repos > homeauto
view espNode/desk/src/mqtt.cpp @ 781:6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
author | drewp@bigasterisk.com |
---|---|
date | Mon, 24 Aug 2020 01:27:33 -0700 |
parents | |
children | e4cf795d3677 |
line wrap: on
line source
#include "mqtt.h" #include "config.h" #include "fingerprint.h" #include "wifi.h" namespace mqtt { AsyncMqttClient mqttClient; TimerHandle_t mqttReconnectTimer; std::string pendingCmd = ""; void StopTimer() { xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting // to Wi-Fi } void Publish(std::string subtopic, std::string msg) { std::string topic = "fingerprint/" + subtopic; mqttClient.publish(topic.c_str(), 1, /*retain=*/false, msg.c_str()); } void ConnectToMqtt() { Serial.println("Connecting to MQTT..."); mqttClient.connect(); } void SendTemperature() { float temp_c = temperatureRead(); char buf[20]; snprintf(buf, sizeof(buf), "%.3fC", temp_c); mqttClient.publish("fingerprint/temperature", 1, /*retain=*/true, buf); } void onMqttConnect(bool sessionPresent) { Serial.println("Connected to MQTT."); Serial.print("Session present: "); Serial.println(sessionPresent); mqttClient.subscribe("fingerprint/command", 1); SendTemperature(); mqttClient.setWill("fingerprint/status", 1, /*retain=*/true, "offline"); mqttClient.publish("fingerprint/status", 1, /*retain=*/true, "online"); Serial.println("queuing a blink change"); fingerprint::QueueBlinkConnected(); } void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) { Serial.println("Disconnected from MQTT."); fingerprint::BlinkNotConnected(); if (wifi::IsConnected()) { xTimerStart(mqttReconnectTimer, 0); } } void onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) { std::string cmd(payload, len); pendingCmd = cmd; } bool HasPendingCommand() { return pendingCmd != ""; } std::string PopPendingCommand() { std::string cmd = pendingCmd; pendingCmd = ""; return cmd; } void Setup() { mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast<TimerCallbackFunction_t>(ConnectToMqtt)); mqttClient.onConnect(onMqttConnect); mqttClient.onDisconnect(onMqttDisconnect); mqttClient.onMessage(onMqttMessage); mqttClient.setServer(MQTT_HOST, MQTT_PORT); } } // namespace mqtt