@@ -36,7 +36,7 @@ TimerHandle_t mqttReconnectTimer;
36
36
37
37
extern t_wifi_state wifi_state;
38
38
char time_str[32 ];
39
-
39
+ char lwt[ 128 ];
40
40
41
41
/* Global initalization (on TTGO startup) */
42
42
void MQTT::init () {
@@ -64,16 +64,20 @@ void MQTT::netsetup() {
64
64
65
65
mqttClient.setServer (ip, sonde.config .mqtt .port );
66
66
snprintf (clientID, 20 , " %s%04d" , sonde.config .mqtt .id , (int )random (0 , 1000 ));
67
+ snprintf (lwt, sizeof (lwt), " %sstatus" , sonde.config .mqtt .prefix );
67
68
clientID[20 ] = 0 ;
68
69
LOG_I (TAG, " pubsub client %s connecting to %s\n " , clientID, sonde.config .mqtt .host );
69
70
mqttClient.setClientId (clientID);
70
71
if (strlen (sonde.config .mqtt .password ) > 0 ) {
71
72
mqttClient.setCredentials (sonde.config .mqtt .username , sonde.config .mqtt .password );
72
73
}
74
+ mqttClient.setWill (lwt, MQTT_QOS, MQTT_RETAIN_TRUE, " lost connection" );
75
+
73
76
MQTT::connectToMqtt ();
74
77
}
75
78
76
79
void MQTT::netshutdown () {
80
+ mqttClient.publish (lwt, MQTT_QOS, MQTT_RETAIN_TRUE, " offline" );
77
81
mqttClient.disconnect (false ); // nice shutdown....
78
82
delay (200 );
79
83
mqttClient.disconnect (true ); // force
@@ -91,6 +95,7 @@ void MQTT::updateStation( PosInfo *pi ) {
91
95
unsigned long now = millis ();
92
96
if ( (lastMqttUptime == 0 ) || (now - lastMqttUptime >= sonde.config .mqtt .report_interval ) ) {
93
97
MQTT::connectToMqtt ();
98
+ mqttClient.publish (lwt, MQTT_QOS, MQTT_RETAIN_TRUE, " online" );
94
99
publishUptime ();
95
100
publishPmuInfo ();
96
101
publishGps ();
@@ -115,6 +120,7 @@ int MQTT::connectToMqtt() {
115
120
return 0 ;
116
121
LOG_D (TAG, " MQTT not connected, connecting...." );
117
122
mqttClient.connect ();
123
+ mqttClient.publish (lwt, MQTT_QOS, MQTT_RETAIN_TRUE, " online" );
118
124
return 1 ;
119
125
}
120
126
@@ -160,7 +166,7 @@ void MQTT::publishUptime()
160
166
LOG_D (TAG, " publishUptime: sending %s\n " , payload);
161
167
char topic[128 ];
162
168
snprintf (topic, 128 , " %s%s" , sonde.config .mqtt .prefix , " uptime" );
163
- mqttClient.publish (topic, 1 , 1 , payload);
169
+ mqttClient.publish (topic, MQTT_QOS, MQTT_RETAIN_TRUE , payload);
164
170
}
165
171
166
172
void MQTT::publishPmuInfo ()
@@ -187,7 +193,7 @@ void MQTT::publishPmuInfo()
187
193
188
194
char topic[128 ];
189
195
snprintf (topic, sizeof (topic), " %s%s" , sonde.config .mqtt .prefix , " pmu" );
190
- mqttClient.publish (topic, 1 , 1 , payload);
196
+ mqttClient.publish (topic, MQTT_QOS, MQTT_RETAIN_TRUE , payload);
191
197
}
192
198
193
199
@@ -209,7 +215,7 @@ void MQTT::publishGps()
209
215
210
216
char topic[128 ];
211
217
snprintf (topic, sizeof (topic), " %s%s" , sonde.config .mqtt .prefix , " gps" );
212
- mqttClient.publish (topic, 1 , 1 , payload);
218
+ mqttClient.publish (topic, MQTT_QOS, MQTT_RETAIN_TRUE , payload);
213
219
}
214
220
215
221
@@ -225,7 +231,7 @@ void MQTT::publishPeak(double pf, int rssi)
225
231
226
232
char topic[128 ];
227
233
snprintf (topic, sizeof (topic), " %s%s" , sonde.config .mqtt .prefix , " spectrum" );
228
- mqttClient.publish (topic, 1 , /* retain */ false , payload);
234
+ mqttClient.publish (topic, MQTT_QOS_NONE, MQTT_RETAIN_FALSE , payload);
229
235
}
230
236
231
237
// What's the scanner looking at?
@@ -243,7 +249,7 @@ void MQTT::publishQRG(int num, const char* type, char* launchsite, float mhz)
243
249
244
250
char topic[128 ];
245
251
snprintf (topic, sizeof (topic), " %s%s" , sonde.config .mqtt .prefix , " qrg" );
246
- mqttClient.publish (topic, 1 , /* retain */ false , payload);
252
+ mqttClient.publish (topic, MQTT_QOS_NONE, MQTT_RETAIN_FALSE , payload);
247
253
}
248
254
249
255
@@ -257,7 +263,7 @@ void MQTT::publishDebug(char *debugmsg)
257
263
snprintf (payload, 256 , " {\" msg\" : %s}" , debugmsg);
258
264
char topic[128 ];
259
265
snprintf (topic, sizeof (topic), " %s%s" , sonde.config .mqtt .prefix , " debug" );
260
- mqttClient.publish (topic, 1 , /* retain */ false , payload);
266
+ mqttClient.publish (topic, MQTT_QOS_NONE, MQTT_RETAIN_FALSE , payload);
261
267
}
262
268
263
269
void MQTT::publishPacket (SondeInfo *si)
@@ -279,7 +285,7 @@ void MQTT::publishPacket(SondeInfo *si)
279
285
char topic[128 ];
280
286
snprintf (topic, 128 , " %s%s" , sonde.config .mqtt .prefix , " packet" );
281
287
LOG_D (TAG, " publishPacket: %s\n " , payload);
282
- mqttClient.publish (topic, 1 , 1 , payload);
288
+ mqttClient.publish (topic, MQTT_QOS, MQTT_RETAIN_TRUE , payload);
283
289
}
284
290
285
291
String MQTT::getStatus () {
0 commit comments