• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

В nodemcu разработчики сломали mqtt

Kitsok

New member
Код:
-- init mqtt client with keepalive timer 120sec
m = mqtt.Client(wifi.sta.getmac(), 120)

-- Process incoming data
function MQTT_ProcessRx(conn, topic,data)
  print(topic .. ":" )
  if data ~= nil then
    print(data)
    if data == "ON" then
     print("ON!!! Received")
     gpio.write(3,1)
    end
    if data == "OFF" then
     print("OFF!!! RECEIVED")
     gpio.write(3,0)
    end
  end
end

-- Handler subscribe function
function MQTT_On()
-- subscribe topic with qos = 0
m:subscribe("/topic",0, function(conn) print("subscribe success")
  m:publish("/topic","hello",0,0, function() print("sent") end)
end)

m:on("offline", function(con)
  print ("offline.Reconnecting")
  tmr.stop(3)
  print(node.heap())
  tmr.alarm(1, 3000, 0, function() MQTT_Connect() end)
end)

m:on("message",function(conn,topic,data) MQTT_ProcessRx(conn,topic,data) end)
t=0
print("To set the timer3")
tmr.alarm(3,10000,1,function()
   dofile("ds18b20.lc")
   print("T=",t)
   m:publish("/topic_temp",t,0,0, function() print("T sent") end)
  end)
end

function MQTT_Connect()
print("MQTT_Connect()")
tmr.alarm(0, 1000, 1, function()
   if wifi.sta.getip() == nil then
      print("Connecting to AP...")
   else
      print('Connected to WiFi. IP: ',wifi.sta.getip())
      tmr.stop(0)   
      print("Connecting to MQTT server")
      m:connect("172.20.2.7", 1883, 0, function(conn)
      print("connected")
      MQTT_On()
    end)
   end
end)
end
m:lwt("/lwt", "offline", 0, 0)
MQTT_Connect()
Странно. У меня работает.
 
  • Like
Реакции: TRO

Victor

Administrator
Команда форума
Ну, issue все еще открыт, значит какие-то проблемы еще не устранили
 

Roman

New member
У меня тоже не работает, даже не конектится. Я использовал mosquitto mqtt server, специально пересобирал чтоб была поддержка mqtt 3.1.1(не знаю почему, но в nodemcu mqtt не работает с 3.1). Сторонним клиентом подключаюсь, а ESP никак. Потом перепрошил ESPшку под nodemcu_20150123.bin вроде там еще работало, коннект проходит, но вот подписаться на что то не получается
 

Kitsok

New member
У меня тоже mosquitto, и именно 1.3.5, и подписывание, и публикация работают. Вы мой код пробовали?
 

Roman

New member
нет, ваш не пробовал. Если у вас работает, обязательно попробую. Очень хотелось с mqtt работать
 

Roman

New member
попробовал ваш код - безрезультатно. Mosquitto 1.4 запущен, могу подключиться сторонним клиентом и подписаться на события. ESP находится в той же сети, указываю те же параметры - висит на этапа конекта
 

Roman

New member
мало того, я пробовал покдлючаться к официальному тестовому серверу mosquitto - не работает. Просто клиентом с компа - все ОК
 

Roman

New member
В общем на последней версии прошивки mqtt не работает вообще, перепрошиваю на nodemcu_20150123.bin - работает. Но. При каждом подключении приходится менять client id, иначе не подключится. Я подозреваю это как то связано с настройками mosquitto
 

Kitsok

New member
Глупый вопрос задам: а Вы mosquitto брали из репозитория (версия протокола 3.1) или у разработчика (3.1.1)?
 

Roman

New member
Попробовал с версией 1.4 Пишут что там есть поддержка 3.1.1. Да и оно рабоает на 20150123 версии, но только один раз. Рестартишь модуль и все, пока не поменяешь client id, не подконектится
 

Kitsok

New member
По логике вещей это похоже на глюк со стороны сервера. У меня такого не было, из коробки mosquitto работал правильно.
 

Kitsok

New member
Да. Из репозитория у меня не заработало совсем, даже не коннектилось. Я качал исходники и собирал свежую версию.
 

alexhi

Member
У меня mqtt тоже норм работает на последней NODEMCU 0.9.5 BUILD 20150213 ,включаю /выключаю реле дома через интернет. Использую внешний брокер i0t.eclipse.org . Управляю с Андроид по 3G (улица) и WIFI.Задержки при 3G/2G есть, но не очень существенные. Пробывал также с локальным брокером mosquitto , все конечно "шустрее" Под Андроид написал небольшую программу для включения лампы.

Всего три команды !SetR1 -вкл, !SetR0-выкл, !GetR -дать текущее состояние.Уникальный топик формирую по ID ESP.
Так же из брокеров пробывал cloudmqtt ,тоже вроде норм. Да,надо еще вводить реконнект иначе если WIFI пропала и появилась то может ESP подвиснуть. Я просто пересбрасываю модуль через 10 сек,для моей задачи подходит.
m:eek:n("offline", function(con)
print ("reconnecting...")
tmr.alarm(1, 10000, 0, function()
node.restart()
Конечно глюки наверное есть,но думаю подправят.Жить можно.
 

Victor

Administrator
Команда форума
небольшую программу для включения лампы
Может быть вы смогли бы сделать более подробное описание своего проекта в разделе в разделе Умный дом или Другие проекты со схемой, скриптами и приложением?
Открытые исходные коды всегда приветствуются на нашем форуме
 

Roman

New member
В общем, друзья, разобрался я! Все дело было в том, что сразу после подключения к wifi роутеру ESP запускала основной скрипт с mqtt и т.к. реально соединение еще не было установлено, mqtt клиент висел в непонятном состоянии. Так что теперь мой init.lua выглядит так:

wifi.setmode(wifi.STATION)
wifi.sta.config("ap","password")
wifi.sta.connect()

print('MAC: ',wifi.sta.getmac())
print('heap: ',node.heap())

print("Starting...")
function init_restart()
if wifi.sta.status() ~= 5 then node.restart()
else
print('IP address: ',wifi.sta.getip())
dofile('main.lua')
end
end

function init_main()
if wifi.sta.status() ~= 5 then tmr.alarm(0, 3000, 0, function() init_restart() end)
else
print('IP address: ',wifi.sta.getip())
dofile('main.lua')
end
end

init_main()

Теперь mqtt стартует без проблем на последней прошивке
 

alexhi

Member
Может быть вы смогли бы сделать более подробное описание своего проекта в разделе в разделе Умный дом или Другие проекты со схемой, скриптами и приложением?
Открытые исходные коды всегда приветствуются на нашем форуме
Да попозже сделаю,надо чуток подрихтовать. (хочу еще и температуру и датчик открытия двери добавить),но времени в обрез с работой.
 

VelAndr

New member
Внесу свои пять копеек в тему, поскольку только что победил москито с nodemcu. Москито был изначально из репозитория убунты 14.4, а nodemcu собрана билдером (dev-ветка - там памяти очень много остается). Перепробовал сборки nodemcu с/без SSL, чуть не запустил ерланговый emqttd...А проблема таки была в моските. Собранный из сорцов москит прекрасно работает без аутентификациии и без SSL. И кстати, nodemcu dev-branch теперь на SDK 1.5... Не знаю, правда, хорошо это или плохо... Стабильность проверю опытным путем, но память вроде пока не течет.
 
Сверху Снизу