Mercurial > code > home > repos > homeauto
annotate espNode/desk/src/mqtt.cpp @ 784:415d7853ad45
fix enroll slot bug; try to log better
author | drewp@bigasterisk.com |
---|---|
date | Thu, 27 Aug 2020 23:54:11 -0700 |
parents | e4cf795d3677 |
children | 3ff074ba25f1 |
rev | line source |
---|---|
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
1 #include "mqtt.h" |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
2 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
3 #include "config.h" |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
4 #include "fingerprint.h" |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
5 #include "wifi.h" |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
6 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
7 namespace mqtt { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
8 AsyncMqttClient mqttClient; |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
9 TimerHandle_t mqttReconnectTimer; |
783
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
10 |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
11 #define MAX_INCOMING_PAYLOAD 1536 |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
12 class IncomingMessage { |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
13 public: |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
14 bool complete; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
15 std::string topic; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
16 std::vector<byte> payload; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
17 }; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
18 IncomingMessage incomingMessage; |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
19 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
20 void StopTimer() { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
21 xTimerStop(mqttReconnectTimer, |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
22 0); // ensure we don't reconnect to MQTT while reconnecting |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
23 // to Wi-Fi |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
24 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
25 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
26 void Publish(std::string subtopic, std::string msg) { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
27 std::string topic = "fingerprint/" + subtopic; |
784
415d7853ad45
fix enroll slot bug; try to log better
drewp@bigasterisk.com
parents:
783
diff
changeset
|
28 mqttClient.publish(topic.c_str(), 1, /*retain=*/false, msg.data(), msg.size()); |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
29 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
30 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
31 void ConnectToMqtt() { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
32 Serial.println("Connecting to MQTT..."); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
33 mqttClient.connect(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
34 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
35 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
36 void SendTemperature() { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
37 float temp_c = temperatureRead(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
38 char buf[20]; |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
39 snprintf(buf, sizeof(buf), "%.3fC", temp_c); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
40 mqttClient.publish("fingerprint/temperature", 1, /*retain=*/true, buf); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
41 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
42 void onMqttConnect(bool sessionPresent) { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
43 Serial.println("Connected to MQTT."); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
44 Serial.print("Session present: "); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
45 Serial.println(sessionPresent); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
46 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
47 mqttClient.subscribe("fingerprint/command", 1); |
783
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
48 mqttClient.subscribe("fingerprint/set/#", 1); |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
49 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
50 SendTemperature(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
51 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
52 mqttClient.setWill("fingerprint/status", 1, /*retain=*/true, "offline"); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
53 mqttClient.publish("fingerprint/status", 1, /*retain=*/true, "online"); |
783
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
54 |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
55 Serial.println("queuing a blink change"); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
56 fingerprint::QueueBlinkConnected(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
57 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
58 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
59 void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
60 Serial.println("Disconnected from MQTT."); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
61 fingerprint::BlinkNotConnected(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
62 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
63 if (wifi::IsConnected()) { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
64 xTimerStart(mqttReconnectTimer, 0); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
65 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
66 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
67 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
68 void onMqttMessage(char* topic, char* payload, |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
69 AsyncMqttClientMessageProperties properties, size_t len, |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
70 size_t index, size_t total) { |
783
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
71 if (index == 0) { |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
72 incomingMessage.complete = false; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
73 incomingMessage.topic = std::string(topic); |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
74 incomingMessage.payload.clear(); |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
75 } |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
76 |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
77 for (int i = 0; i < len; i++) { |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
78 incomingMessage.payload.push_back(payload[i]); |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
79 } |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
80 |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
81 if (index + len == total) { |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
82 incomingMessage.complete = true; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
83 } |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
84 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
85 |
783
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
86 // Don't do command right away; wait for main loop to ask for it. |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
87 bool HasPendingMessage() { return incomingMessage.complete; } |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
88 std::pair<std::string, std::vector<byte>> PopPendingMessage() { |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
89 std::pair<std::string, std::vector<byte>> ret{incomingMessage.topic, |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
90 incomingMessage.payload}; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
91 incomingMessage.complete = false; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
92 return ret; |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
93 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
94 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
95 void Setup() { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
96 mqttReconnectTimer = |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
97 xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
98 reinterpret_cast<TimerCallbackFunction_t>(ConnectToMqtt)); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
99 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
100 mqttClient.onConnect(onMqttConnect); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
101 mqttClient.onDisconnect(onMqttDisconnect); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
102 mqttClient.onMessage(onMqttMessage); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
103 mqttClient.setServer(MQTT_HOST, MQTT_PORT); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
104 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
105 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
106 } // namespace mqtt |