Elektroda.pl
Elektroda.pl
X
Elektroda.pl
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ESP8266 - problem z subskrypcja MQTT

lukaszrzepinski 08 Kwi 2016 20:08 1590 0
  • #1
    lukaszrzepinski
    Poziom 8  
    Witam,
    mam nastepujaca konfiguracje.
    Raspberry Pi z OpenHab i brokerem MQTT Mosquitto.

    Zbudowalem termometr na NodeMCU polaczony ze znanym i lubianym Ds18b20.
    Funkcjonuje ladnie i publikuje temperature przez MQTT - w OpenHab jest piekny wykresik.

    Teraz chce zrobic przekaznik sluchajacy MQTT ale nie udalo mi sie.
    Usiluje z ESP8266 z Lua zasubskrybowac temat na MQTT na Raspberry. W OpenHabie ustawilem przelacznik z tematem "home/testsw/1". Przelaczanie z konsoli OpenHab powoduje w nasluchu MQTT na Rasbperry ladne komendy 0 i 1.
    Niestety o ile publish mi dziala z NodeMCU to nie widzi on komend z topicu, brak reakcji. W zasadzie nie zachodzi nawet "subscribed" mimo ze taki topic istnieje. Spodzielem sie ze przy zmianach topicu zadziala funkcja przypisania zdarzeniu "message"...
    Oto kod
    Code:

    ip = "192.168.0.195"
    port = 1883
    seconds = 10
     

      m = mqtt.Client("1", 60)
            m:on("message", function(conn, topic, data)
            print(topic .. ":" )
            if data ~= nil then
              print(data)
            end
          end)
     
           m:connect(ip, port, 3000, function()
           print ("connected")
               
                m:subscribe("home/testsw/1",0, function(conn)
                   print("subscribed")
               end)
           end
           )


    Tutaj dzialajacy sprawnie kod publikacji temperatury:

    Code:
    ip = "192.168.0.195"
    
    port = 1883
    seconds = 10
     
    tmr.alarm(0, 1000 * seconds, 1, function()
      m = mqtt.Client("1", 60)
           m:connect(ip, port, 3000, function()
                tmr.wdclr()
                m:publish("home/humidity", 0, 0, 0, function()
                     tmr.wdclr()
                     m:publish("home/temperature", ds18b20.read(), 0, 0, function()
                          tmr.wdclr()
                          m:close()
                     end
                     )
                end
                )   
           end
           )
      end
    )


    Dodano po 5 [godziny] 40 [minuty]:

    problem rozwiazany
    zadzialal kod z tego tutoriala: https://geekgrandad.wordpress.com/2015/03/22/esp8266-mqtt-relay/

    ESP8266 ladnie reaguje tutaj na zasubskrybowany topic i moge zrobic przelacznik;
    tak na marginesie mam od producenta z Chin gniazda 220v oparte na ESP8266 i zamierzam wlasnie je oprogramowac
  • PCBway