• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь MQTT - Как вы реализуете(решаете) ситуацию с обрывом wifi

Ninjamannn

New member
Привет. Столкнулся с проблемой, при тестировании ситуации с обрывом wifi (свет погас, итп) - получаю неопределенное поведение. Нет реконнекта к mqtt.
Дано: плата esp8266 nodemcu3, MQTT сервер - CloudMQTT, питание по usb 3.0,
прошивка:
SSL: false
modules: bit,bmp085,cron,dht,ds18b20,file,gpio,http,mqtt,net,node,ow,tmr,uart,wifi
powered by Lua 5.1.4 on SDK 2.2.1(cfd48f3)

Код:

function pubEvent()
pubValue = "hi!"
if mqttBroker:publish("status", pubValue, 0, 0, function(m) print("send HI! status") end)
then
print("publish ok")
else
print("publish problem")
tmr.stop(0)
reconn()
end
end

function reconn()
print("Disconnected, reconnecting....")
mqttBroker:close()
conn()
end

function conn()
print("Making connection to MQTT broker")
mqttBroker:connect("m23.cloudmqtt.com", 16547, 0,
function(client)
print ("connected")
tmr.start(0)
end,
function(client, reason)
print("failed reason: "..reason)
reconn()
end)
end

function makeConn()
-- Instantiate a global MQTT client object
print("Instantiating mqttBroker")
mqttBroker = mqtt.Client("esp8266", 120, "log", "pass", 1)

mqttBroker:eek:n("connect", function(client) print ("connected") end)
mqttBroker:eek:n("offline", reconn)

conn()

tmr.alarm(0, (5 * 1000), 1, pubEvent)
end

Статистика ошибок:
Из 5 тестов: 2 все ок - соединение(mqtt) восстанавливается. 2 вот такие -
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x40100000, len 27184, room 16
tail 0
chksum 0xc7
load 0x3ffe8000, len 2256, room 8
tail 8
chksum 0x38
load 0x3ffe88d0, len 136, room 0
tail 8
chksum 0x11
csum 0x11
„гмГgдЫsѓт'|д$d$l`c›Я|r“lњoаѓgг

и последний может просто зависнуть.

Может я в коде что-то упустил...хз, как это обычно стандартно обрабатывается, как у вас?
По идее мою ситуацию должен обрабатывать колбек mqttBroker:eek:n("offline", reconn) - но он какой-то тугой. При чем с восстановлением wifi проблем не возникает. Сорри за смайлы.
 
Сверху Снизу