Найти MQTT-брокера в локальной сети с помощью nodemcu lua zeroconf - PullRequest
1 голос
/ 01 мая 2019

Я хочу обнаружить моего брокера Mosquitto MQTT, использующего мой ESP с LUA в моей локальной сети.Мой ESP8266 находится в той же сети.

Я работаю

NodeMCU custom build by frightanic.com
branch: master
commit: 4905381c004bdeaf744a60bb940c1906c2e052d4
SSL: false
modules: bme280,dht,file,gpio,http,mdns,mqtt,net,node,rtctime,sjson,sntp,tmr,uart,wifi
build created on 2019-04-28 18:59
powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)

Все работает, как ожидалось, когда я подключаюсь к брокеру, зная IP порт:

m:connect("10.0.1.97", 1883, 0, function(client)
...

Но как мне узнать IP-адрес устройства, на котором работает брокер, и порт?Mosquitto настроен так:

http://dagrende.blogspot.com/2017/02/find-mqtt-broker-without-hard-coded-ip.html

Модуль LUA mdns не обеспечивает обнаружение, я прав?

1 Ответ

2 голосов
/ 01 мая 2019

Документация для модуля mDNS NodeMCU содержит примечание вверху о том, что это только сервер mDNS, а не клиент, но указывает на альтернативу.

Примечание

Это модуль сервера mDNS.Если вы ищете mDNS-клиент для NodeMCU (то есть для запроса mDNS), тогда udaygin / nodemcu-mdns-client может быть опцией.

Файл readme для альтернативы включаетпример разрешения локальных брокеров MQTT

mc = require('mdnsclient')
local service_to_query = '_mqtt._tcp' --service pattern to search. this is for mqtt brokers
local query_timeout = 2 -- 2 seconds

-- handler to do some thing useful with mdns query results
local query_result_handler  = function(err,query_result)
    if (query_result ~= nil) then
        print("Got Query results")
        local broker_ip,broker_port = mc.extractIpAndPortFromResults(res,1)
        print('Broker '..broker_ip ..":"..broker_port)
    else
        print('no mqtt brokers found in local network. please ensure that they are running and advertising on mdns')
    end
end

print('Connecting to wifi')
wifi.setmode(wifi.STATION)
wifi.sta.config('<SSID>', '<PASSWORD>')
wifi.sta.getip()
wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
    print("\n\tSTA - GOT IP".."\n\tStation IP: "..T.IP)
    mc.mdns_query( service_to_query, query_timeout, T.IP, query_result_handler)
end)
...