使用nodemcu lua zeroconf在LAN中找到MQTT Broker

我想使用我的ESP8266和LUA在我的LAN中发现我的Mosquitto MQTT Broker。我的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)
...

但我如何发现运行broker的设备的IP地址和端口? Mosquitto设置如下:

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

LUA mdns模块不提供发现,我是对的吗?

点赞
用户504554
用户504554

NodeMCU mDNS 模块的 文档 在顶部注明它只是一个 mDNS 服务器而非客户端,并提供了一个备选方案。

注意

这是一个 mDNS 服务器模块。如果你正在寻找 NodeMCU 的 mDNS 客户端(即查询 mDNS),那么 udaygin/nodemcu-mdns-client 可能是一个选择。

备选方案的自述文件包含了一个解决本地 MQTT 代理的示例。

mc = require('mdnsclient')
local service_to_query = '_mqtt._tcp' --要搜索的服务模式,用于 MQTT 代理
local query_timeout = 2 -- 2 秒钟

--处理程序可从 mdns 查询结果中获取一些有用的数据
local query_result_handler  = function(err,query_result)
    if (query_result ~= nil) then
        print("得到查询结果")
        local broker_ip,broker_port = mc.extractIpAndPortFromResults(res,1)
        print('代理 '..broker_ip ..":"..broker_port)
    else
        print('在本地网络中找不到 MQTT 代理,请确保它们正在运行并在 mdns 上进行广告宣传。')
    end
end

print('连接到 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\t获取 IP".."\n\tIP 地址: "..T.IP)
    mc.mdns_query( service_to_query, query_timeout, T.IP, query_result_handler)
end)
2019-05-01 10:47:24