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

时间:2019-05-01 09:55:32

标签: lua mqtt mosquitto nodemcu zeroconf

我想使用我的ESP和LAN上的LUA找到我的Mosquitto MQTT经纪人。我的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地址?蚊帐的设置如下:

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

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

1 个答案:

答案 0 :(得分:2)

NodeMCU mDNS模块的documentation顶部有一条注释,说它只是一个mDNS服务器,不是客户端,但指向替代服务器。

  

注意

     

这是一个mDNS服务器模块。如果您正在寻找一个mDNS客户端   NodeMCU(即查询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)