Dears, Я пытаюсь использовать mqtt на esp8266 на основе nodemcu. Я в настоящее время с помощью настраиваемой сборки (https://nodemcu-build.com/index.php)Сохраняющий таймер на mqtt nodemcu (esp8266) не отвечает
модулей используются: адъютант, enduser_setup, файл, GPIO, HTTP, MQTT, сеть, узел, вл, широтно-импульсная модуляция, пмр, UART, Wi-Fi
версия: питание от Lua 5.1.4 на SDK 1.5.1 (e67da894)
function connect_to_mqtt_broker()
print("Connecting to broker...")
m:connect(BROKER, PORT, 0, 1, function(client)
print("connected")
print("["..tmr.time().."(s)] - Client connected to broker: "..BROKER)
m:subscribe(SUB_TOPIC,0, function(conn)
print("Subscribed to "..SUB_TOPIC.." topic")
led(0,204,0,150)
end)
m:publish(PUB_TOPIC,"Hello from: "..node.chipid()..RESTART_REASON,0,0, function(conn)
print("sent")
end)
end,
function(client, reason)
print("failed reason: "..reason)
end)
end
---MQTT client---
print("--------------> Create mqtt clinet")
--set up MQTT client
-- init mqtt client with keepalive timer 120sec
m = mqtt.Client("ESP"..node.chipid(), KEEP_ALIVE_TMR, USER, PASSWORD)
m:lwt(PUB_TOPIC, "offline", 0, 0)
m:on("offline", function(conn)
print("["..tmr.time().."(s)] - Mqtt client gone offline")
end)
m:on("message", function(conn, topic, data)
--receive_data(data, topic)
print("Data received: "..data)
led(200,50,50,30)
receive_data(data, topic)
led(0,204,0,150)
end)
Так что при инициализации программы я звоню connect_to_mqtt_broker(), белый ich работает отлично, и я могу подписаться и опубликовать на темы.
Проблема в том, что таймер keepalive неверен. Позвольте мне объяснить это на примере. Я установил KEEP_ALIVE_TMR = 120 и после успешного подключения esp8266 к mqtt broker я отключил Wi-Fi на моем маршрутизаторе и начал отсчет секунд. По KEEP_ALIVE_TMR автономного события:
m:on("offline", function(conn)
print("["..tmr.time().."(s)] - Mqtt client gone offline")
end)
должен сгореть ровно 120 секунд с момента у меня есть отключить WiFi, но по неизвестной причине этого не произойдет. Обычно событие срабатывает примерно через 10-15 минут. Я изо всех сил стараюсь понять причину этой задержки без успеха. У вас есть идеи, почему эта странная вещь случается?
Пробовал ответы ниже? – cagdas