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

问题描述 投票:1回答:1

我想在我的局域网上使用带有LUA的ESP发现我的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)
...

但是,如何才能发现运行代理和端口的设备的IP地址? Mosquitto的设置如下:

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

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

lua mqtt mosquitto nodemcu zeroconf
1个回答
2
投票

NodeMCU mDNS模块的documentation在顶部有一个注释,表示它只是一个mDNS服务器而不是客户端,但指向另一种选择。

注意

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

替代方案的自述文件包括解析本地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)
© www.soinside.com 2019 - 2024. All rights reserved.