Mercurial > code > home > repos > homeauto
annotate espNode/desk/src/mqtt.cpp @ 785:3ff074ba25f1
updates to mqtt message API; much more consistent logging
author | drewp@bigasterisk.com |
---|---|
date | Fri, 28 Aug 2020 01:39:08 -0700 |
parents | 415d7853ad45 |
children | 7831b5de3572 |
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 } |
785
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
25 /* |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
26 |
785
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
27 Subscribed by MCU: |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
28 |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
29 fingerprint/command = |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
30 'enroll' |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
31 | 'show_success' |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
32 | 'clear_success' |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
33 | 'delete_all' |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
34 | 'delete/model/<fid>' |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
35 | 'get/model/<fid>' |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
36 fingerprint/set/model/<fid> = binary model data |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
37 |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
38 Published from MCU: |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
39 |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
40 fingerprint/<mode>/status = junk |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
41 fingerprint/<mode>/error/<caller> = FPM error message |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
42 fingerprint/store = some change to fingerprint storage |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
43 fingerprint/detect = input finger |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
44 fingerprint/model/<fid> = binary model data |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
45 fingerprint/image/<fid> = binary image data |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
46 */ |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
47 void Publish(const std::string& subtopic, const std::string& msg) { |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
48 std::string topic = "fingerprint/" + subtopic; |
785
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
49 mqttClient.publish(topic.c_str(), 1, /*retain=*/false, msg.data(), |
3ff074ba25f1
updates to mqtt message API; much more consistent logging
drewp@bigasterisk.com
parents:
784
diff
changeset
|
50 msg.size()); |
781
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 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
53 void ConnectToMqtt() { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
54 Serial.println("Connecting to MQTT..."); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
55 mqttClient.connect(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
56 } |
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 void SendTemperature() { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
59 float temp_c = temperatureRead(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
60 char buf[20]; |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
61 snprintf(buf, sizeof(buf), "%.3fC", temp_c); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
62 mqttClient.publish("fingerprint/temperature", 1, /*retain=*/true, buf); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
63 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
64 void onMqttConnect(bool sessionPresent) { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
65 Serial.println("Connected to MQTT."); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
66 Serial.print("Session present: "); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
67 Serial.println(sessionPresent); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
68 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
69 mqttClient.subscribe("fingerprint/command", 1); |
783
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
70 mqttClient.subscribe("fingerprint/set/#", 1); |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
71 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
72 SendTemperature(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
73 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
74 mqttClient.setWill("fingerprint/status", 1, /*retain=*/true, "offline"); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
75 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
|
76 |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
77 Serial.println("queuing a blink change"); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
78 fingerprint::QueueBlinkConnected(); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
79 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
80 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
81 void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
82 Serial.println("Disconnected from MQTT."); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
83 fingerprint::BlinkNotConnected(); |
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 if (wifi::IsConnected()) { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
86 xTimerStart(mqttReconnectTimer, 0); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
87 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
88 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
89 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
90 void onMqttMessage(char* topic, char* payload, |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
91 AsyncMqttClientMessageProperties properties, size_t len, |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
92 size_t index, size_t total) { |
783
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
93 if (index == 0) { |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
94 incomingMessage.complete = false; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
95 incomingMessage.topic = std::string(topic); |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
96 incomingMessage.payload.clear(); |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
97 } |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
98 |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
99 for (int i = 0; i < len; i++) { |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
100 incomingMessage.payload.push_back(payload[i]); |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
101 } |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
102 |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
103 if (index + len == total) { |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
104 incomingMessage.complete = true; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
105 } |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
106 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
107 |
783
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
108 // 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
|
109 bool HasPendingMessage() { return incomingMessage.complete; } |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
110 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
|
111 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
|
112 incomingMessage.payload}; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
113 incomingMessage.complete = false; |
e4cf795d3677
support download/set/delete, but somehow enroll has broken
drewp@bigasterisk.com
parents:
781
diff
changeset
|
114 return ret; |
781
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
115 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
116 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
117 void Setup() { |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
118 mqttReconnectTimer = |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
119 xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
120 reinterpret_cast<TimerCallbackFunction_t>(ConnectToMqtt)); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
121 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
122 mqttClient.onConnect(onMqttConnect); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
123 mqttClient.onDisconnect(onMqttDisconnect); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
124 mqttClient.onMessage(onMqttMessage); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
125 mqttClient.setServer(MQTT_HOST, MQTT_PORT); |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
126 } |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
127 |
6c42c1f64f00
new driver for esp32 and R503 fingerprint sensor
drewp@bigasterisk.com
parents:
diff
changeset
|
128 } // namespace mqtt |