Skip to content

Commit ee1d992

Browse files
Use mDNS to discover the sensors
1 parent e640ea3 commit ee1d992

File tree

1 file changed

+47
-6
lines changed

1 file changed

+47
-6
lines changed

src/main.cpp

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
#include <SPI.h>
33
#include <SD.h>
44
#include <esp_sntp.h>
5+
#include <ESPmDNS.h>
56
#include <list>
67
#include <vector>
78

89
#include <WebSocketsClient.h> /* https://github.com/Links2004/arduinoWebSockets */
910

10-
#define WEBSOCKET_SERVER "192.168.0.20"
11+
#define WEBSOCKET_MDNS_HOSTNAME "sensorhub"
1112
#define WEBSOCKET_PORT 80
1213
#define WEBSOCKET_URL "/sensors"
1314
#define WEBSOCKET_TIMEOUT 4000
@@ -27,6 +28,7 @@ extern void weatherDownloadTask(void *parameter);
2728
extern QueueHandle_t displayQueue;
2829
static TaskHandle_t displayTaskHandle = nullptr;
2930

31+
static IPAddress websocketServerIP;
3032
static WebSocketsClient webSocket;
3133
static auto lastWebsocketEventMS = 0;
3234

@@ -202,6 +204,14 @@ static void processPayload(char *payload)
202204
}
203205
}
204206

207+
static void messageOnTFT(const char *str)
208+
{
209+
displayMessage msg;
210+
msg.type = displayMessage::SYSTEM_MESSAGE;
211+
snprintf(msg.str, sizeof(msg.str), str);
212+
xQueueSend(displayQueue, &msg, portMAX_DELAY);
213+
}
214+
205215
static void webSocketEvent(WStype_t type, uint8_t *payload, size_t length)
206216
{
207217
switch (type)
@@ -210,7 +220,7 @@ static void webSocketEvent(WStype_t type, uint8_t *payload, size_t length)
210220
log_i("[WSc] Disconnected!");
211221
break;
212222
case WStype_CONNECTED:
213-
log_i("[WSc] Connected to ws://%s:%i%s", WEBSOCKET_SERVER, WEBSOCKET_PORT, WEBSOCKET_URL);
223+
log_i("[WSc] Connected to ws://%s:%i%s", websocketServerIP.toString().c_str(), WEBSOCKET_PORT, WEBSOCKET_URL);
214224
if (history.empty())
215225
webSocket.sendTXT("G:\n");
216226
lastWebsocketEventMS = millis();
@@ -252,13 +262,14 @@ void setup()
252262
forecasts.reserve(REQUIRED_CAPACITY);
253263
if (forecasts.capacity() != REQUIRED_CAPACITY)
254264
{
255-
log_e("could not allocate %i forecasts. halted!", FORECASTS_MAX_ITEMS);
265+
log_e("could not allocate %i forecasts. System halted", FORECASTS_MAX_ITEMS);
256266
while (1)
257267
delay(100);
258268
}
259269

260-
log_i("connecting to %s\n", WIFI_SSID);
270+
log_i("connecting to %s", WIFI_SSID);
261271

272+
WiFi.setSleep(false);
262273
WiFi.begin(WIFI_SSID, WIFI_PSK);
263274

264275
// mount sd card
@@ -285,7 +296,7 @@ void setup()
285296

286297
if (taskResult != pdPASS)
287298
{
288-
log_e("FATAL error! Could not create playerTask. System HALTED!");
299+
log_e("FATAL error! Could not create display task. System HALTED!");
289300
while (1)
290301
delay(100);
291302
}
@@ -296,10 +307,40 @@ void setup()
296307

297308
log_i("connected to %s", WIFI_SSID);
298309

310+
messageOnTFT("Searching the sensors...");
311+
312+
if (mdns_init() != ESP_OK)
313+
{
314+
messageOnTFT("mDNS ERROR. System halted");
315+
while (1)
316+
delay(100);
317+
}
318+
319+
int ndx = MDNS.queryService("http", "tcp");
320+
321+
log_i("found %i mDNS servers", ndx);
322+
323+
while (--ndx != -1)
324+
{
325+
if (MDNS.hostname(ndx) == WEBSOCKET_MDNS_HOSTNAME)
326+
break;
327+
}
328+
329+
if (ndx == -1)
330+
{
331+
messageOnTFT("No sensors. System halted");
332+
while (1)
333+
delay(100);
334+
}
335+
336+
log_i("sensorhub found at IP %s", MDNS.IP(ndx).toString().c_str());
337+
338+
websocketServerIP = MDNS.IP(ndx);
339+
299340
sntp_set_time_sync_notification_cb((sntp_sync_time_cb_t)ntpSynced);
300341
configTzTime(TIMEZONE, NTP_POOL);
301342

302-
webSocket.begin(WEBSOCKET_SERVER, WEBSOCKET_PORT, WEBSOCKET_URL);
343+
webSocket.begin(websocketServerIP, WEBSOCKET_PORT, WEBSOCKET_URL);
303344
webSocket.onEvent(webSocketEvent);
304345
webSocket.setReconnectInterval(600);
305346
}

0 commit comments

Comments
 (0)