MQTT/ESP8266/NodeMCU/Lua код не выдавецтва

У мяне ёсць праблемы з наступным кодам Lua на якасці ESP8266 ...

function sendData(humidity,temperature)
    -- Setup MQTT client and events
    print("sendData() entered")
    print("Setting up mqtt.Client...")
    m = mqtt.Client(mqtt_client_id, 120, username, password)
    print("Attempting client connect...")
    m:connect(mqtt_broker_ip , mqtt_broker_port, 0, function(conn)
        print("Connected to MQTT")
        print("  IP: " .. mqtt_broker_ip)
        print("  Port: " .. mqtt_broker_port)
        print("  Client ID: " .. mqtt_client_id)
        print("  Username: " .. mqtt_username)

        payload = "Temp: " .. temperature .. " Hmdy: " .. humidity
        m:publish("pt/env",payload, 0, 0, function(conn)
            print("Going to deep sleep for " .. (DSLEEPTIME/1000) .. " seconds")
            node.dsleep(DSLEEPTIME*1000,4)             
        end)
    end)
end

Код паспяхова выклікаецца з наступнымі ...

-- Connect to network
wifi.setmode(wifi.STATION)
wifi.setphymode(wifi_signal_mode)
wifi.sta.config(wifi_SSID, wifi_password) 
wifi.sta.connect()

print("Attempting to connect...")
ip = wifi.sta.getip()
if ip ~= nil then
    print("Got IP: " .. ip)
    print("About to call sendData()...")
    sendData(humidity, temperature)
    print("Returned from sendData()...")
end

Выкарыстанне ESPlorer я бачу наступнае ...

Attempting to connect...
Attempting to connect...
Attempting to connect...
Attempting to connect...
Attempting to connect...
Attempting to connect...
Got IP: 192.168.0.39
About to call sendData()...
sendData() entered
Setting up mqtt.Client...
Attempting client connect...
Returned from sendData()...

Так што ў асноўным ўваходзіць SendData (...) і я бачу выхад з лініі ...

print("Attempting client connect...")

... але я ніколі не бачыў пратакаляванне ў т: падлучэнне (...) блок, такія як ...

print("Connected to MQTT")

... здаецца, ён проста вяртае неадкладна.

MQTT брокер з'яўляецца Raspberry Pi працуе Mosquitto і я праверыў гэта з праграмамі на мой Android тэлефон і планшэт. Я атрымліваю паспяховай публікацыі/падпіскі паміж тэлефонам і планшэтам у абодвух напрамках.

Я пачатковец Lua і толькі зразумець асновы MQTT і я ў здзіўленні, што здарылася з т: падлучэнне (...) блок, калі хто можа дапамагчы яму будуць ацэнены.

UPDATE: PROBLEM SOLVED - Apologies for not getting back to this thread sooner. The problem was simply down to the version of Mosquitto I was running on my RPi (which complied to MQTT v3.1). The NodeMCU MQTT library supports MQTT v3.1.1 and is NOT backward compatible. In essence there wasn't very much wrong with my code although I did make some changes - it was simply down to MQTT versions being incompatible.

1
Вы вырашыць гэта, справа закрытая?
дададзена аўтар Marcel Stör, крыніца
Ах, добра б ведаць. Вы не хочаце, каб дадаць яго ў якасці адказу на сябе прыняць яго? Няма неабходнасці, каб гэтае шоў на спіс адкрытых NodeMCU пытанняў ІМХО.
дададзена аўтар Marcel Stör, крыніца
Ах, добра б ведаць. Вы не хочаце, каб дадаць яго ў якасці адказу на сябе прыняць яго? Няма неабходнасці, каб гэтае шоў на спіс адкрытых NodeMCU пытанняў ІМХО.
дададзена аўтар Marcel Stör, крыніца
Я мяркую, што ваша спроба злучэння не атрымоўваецца, так нічога не адбываецца. Што вы чакаеце адбудзецца?
дададзена аўтар Piglet, крыніца
@ MarcelStör: Вядома. Я дадам адказ, калі я паглядзеў на тое, што гэта я зрабіў, каб вырашыць гэтую праблему (я не памятаю дакладна, на дадзены момант) я ў цяперашні час змагаюся з пытаннем C ++/Arduino ESP8266, які я павінен быў фіксаваным ў бліжэйшы час , :)
дададзена аўтар Squonk, крыніца
@ MarcelStör: Вядома. Я дадам адказ, калі я паглядзеў на тое, што гэта я зрабіў, каб вырашыць гэтую праблему (я не памятаю дакладна, на дадзены момант) я ў цяперашні час змагаюся з пытаннем C ++/Arduino ESP8266, які я павінен быў фіксаваным ў бліжэйшы час , :)
дададзена аўтар Squonk, крыніца
@ MarcelStör: Вядома. Я дадам адказ, калі я паглядзеў на тое, што гэта я зрабіў, каб вырашыць гэтую праблему (я не памятаю дакладна, на дадзены момант) я ў цяперашні час змагаюся з пытаннем C ++/Arduino ESP8266, які я павінен быў фіксаваным ў бліжэйшы час , :)
дададзена аўтар Squonk, крыніца
@ MarcelStör: Я дадаў абнаўленне/каментар да канца майго першапачатковага пытання, які тлумачыць прычыну праблемы. Дзякуй за тое, каб дапамагчы - я змяніць мой код, заснаваны на вашых прапаноў, але я павінен быў "чыстым" мой RPi, каб прымусіць загрузку больш новай версіі Mosquitto, каб усе зарабіла.
дададзена аўтар Squonk, крыніца
@ MarcelStör: Я дадаў абнаўленне/каментар да канца майго першапачатковага пытання, які тлумачыць прычыну праблемы. Дзякуй за тое, каб дапамагчы - я змяніць мой код, заснаваны на вашых прапаноў, але я павінен быў "чыстым" мой RPi, каб прымусіць загрузку больш новай версіі Mosquitto, каб усе зарабіла.
дададзена аўтар Squonk, крыніца
@ MarcelStör: Я дадаў абнаўленне/каментар да канца майго першапачатковага пытання, які тлумачыць прычыну праблемы. Дзякуй за тое, каб дапамагчы - я змяніць мой код, заснаваны на вашых прапаноў, але я павінен быў "чыстым" мой RPi, каб прымусіць загрузку больш новай версіі Mosquitto, каб усе зарабіла.
дададзена аўтар Squonk, крыніца

7 адказы

Вы не сказалі нам, што версія NodeMCU вы выкарыстоўваеце. Увага: не выкарыстоўвайце любы з гатовых бінарных файлаў 0.9.x, даступных на https://GitHub. кім/nodemcu/nodemcu-прашыўкі/рэлізы . Стварыце сваю ўласную прашыўку згодна http://nodemcu.readthedocs.io/en/dev/ ан/зборкі/.

Я заўсёды дапамагаю распрануцца нездавальняючымі функцыямі і выкарыстоўваць усе даступныя функцыі зваротнага выкліку. Я магу пацвердзіць наступныя працы на амаль 2 месяцы старой прашыўцы ад DEV галіна адпраўкі дадзеных cloudmqtt.com:

function sendData(humidity, temperature)
    print("Setting up mqtt.Client...")
    m = mqtt.Client("SO-36667049", 120, "user", "password")
    print("Attempting client connect...")
    m:connect("m20.cloudmqtt.com", 12703, 0, 0,
        function(conn)
            print("Connected to MQTT")
            payload = "Temp: " .. temperature .. " Hmdy: " .. humidity
            m:publish("topic", payload, 0, 0, 
                function(client) 
                    print("Message sent") 
                end)
        end,
        function(client, reason)
            print("Connection failed, reason: " .. reason)
        end)
end

адрозненні:

  • m:connect defines secure y/n and autoreconnect y/n explicitly. It always confuses me if only a subset of all optional parameters is set. Is your 0 in m:connect interpreted as secure or as autoreconnect? I don't know Lua well enough to tell why I code it explicitly.
  • Make use of the extra callback for function for failed connection attempts. See http://nodemcu.readthedocs.org/en/dev/en/modules/mqtt/#connection-failure-callback-reason-codes for failure reason codes.
  • Do NOT use the same name for variables in callback functions as used in "parent" functions. Note how you use m:connect(..., function(conn) and then inside that function you use m:publish(..., function(conn) again. You don't interact with the conn object in your code, so no harm done. However, this may bite you in other projects.
1
дададзена

Вы не сказалі нам, што версія NodeMCU вы выкарыстоўваеце. Увага: не выкарыстоўвайце любы з гатовых бінарных файлаў 0.9.x, даступных на https://GitHub. кім/nodemcu/nodemcu-прашыўкі/рэлізы . Стварыце сваю ўласную прашыўку згодна http://nodemcu.readthedocs.io/en/dev/ ан/зборкі/.

Я заўсёды дапамагаю распрануцца нездавальняючымі функцыямі і выкарыстоўваць усе даступныя функцыі зваротнага выкліку. Я магу пацвердзіць наступныя працы на амаль 2 месяцы старой прашыўцы ад DEV галіна адпраўкі дадзеных cloudmqtt.com:

function sendData(humidity, temperature)
    print("Setting up mqtt.Client...")
    m = mqtt.Client("SO-36667049", 120, "user", "password")
    print("Attempting client connect...")
    m:connect("m20.cloudmqtt.com", 12703, 0, 0,
        function(conn)
            print("Connected to MQTT")
            payload = "Temp: " .. temperature .. " Hmdy: " .. humidity
            m:publish("topic", payload, 0, 0, 
                function(client) 
                    print("Message sent") 
                end)
        end,
        function(client, reason)
            print("Connection failed, reason: " .. reason)
        end)
end

адрозненні:

  • m:connect defines secure y/n and autoreconnect y/n explicitly. It always confuses me if only a subset of all optional parameters is set. Is your 0 in m:connect interpreted as secure or as autoreconnect? I don't know Lua well enough to tell why I code it explicitly.
  • Make use of the extra callback for function for failed connection attempts. See http://nodemcu.readthedocs.org/en/dev/en/modules/mqtt/#connection-failure-callback-reason-codes for failure reason codes.
  • Do NOT use the same name for variables in callback functions as used in "parent" functions. Note how you use m:connect(..., function(conn) and then inside that function you use m:publish(..., function(conn) again. You don't interact with the conn object in your code, so no harm done. However, this may bite you in other projects.
1
дададзена

Вы не сказалі нам, што версія NodeMCU вы выкарыстоўваеце. Увага: не выкарыстоўвайце любы з гатовых бінарных файлаў 0.9.x, даступных на https://GitHub. кім/nodemcu/nodemcu-прашыўкі/рэлізы . Стварыце сваю ўласную прашыўку згодна http://nodemcu.readthedocs.io/en/dev/ ан/зборкі/.

Я заўсёды дапамагаю распрануцца нездавальняючымі функцыямі і выкарыстоўваць усе даступныя функцыі зваротнага выкліку. Я магу пацвердзіць наступныя працы на амаль 2 месяцы старой прашыўцы ад DEV галіна адпраўкі дадзеных cloudmqtt.com:

function sendData(humidity, temperature)
    print("Setting up mqtt.Client...")
    m = mqtt.Client("SO-36667049", 120, "user", "password")
    print("Attempting client connect...")
    m:connect("m20.cloudmqtt.com", 12703, 0, 0,
        function(conn)
            print("Connected to MQTT")
            payload = "Temp: " .. temperature .. " Hmdy: " .. humidity
            m:publish("topic", payload, 0, 0, 
                function(client) 
                    print("Message sent") 
                end)
        end,
        function(client, reason)
            print("Connection failed, reason: " .. reason)
        end)
end

адрозненні:

  • m:connect defines secure y/n and autoreconnect y/n explicitly. It always confuses me if only a subset of all optional parameters is set. Is your 0 in m:connect interpreted as secure or as autoreconnect? I don't know Lua well enough to tell why I code it explicitly.
  • Make use of the extra callback for function for failed connection attempts. See http://nodemcu.readthedocs.org/en/dev/en/modules/mqtt/#connection-failure-callback-reason-codes for failure reason codes.
  • Do NOT use the same name for variables in callback functions as used in "parent" functions. Note how you use m:connect(..., function(conn) and then inside that function you use m:publish(..., function(conn) again. You don't interact with the conn object in your code, so no harm done. However, this may bite you in other projects.
1
дададзена

Ваш код выглядае выдатна. Калі т: падлучэнне не атрымоўваецца нічога не будзе, як вы не забяспечваюць функцыю зваротнага выкліку для няўдалых спробаў злучэння.

Акрамя таго, вы не праверыць м: падлучэнне Вернемся значэнне для поспеху.

Refer to http://nodemcu.readthedocs.org/en/dev/en/modules/mqtt/#mqttclientconnect

І праверце, калі ваша спроба не атрымоўваецца ўсталяваць злучэнне.

0
дададзена
вы можаце проста пакласці м: падключыць выклік у друк (), каб убачыць, што ён вяртаецца.
дададзена аўтар Piglet, крыніца
Дзякуй - што б не адбылося са мной, але гэта нічога, акрамя пустой радкі ня друкаваць. Я таксама паспрабаваў «убудаваны» м: падлучэнне прыклад са старонкі док nodemcu MQTT Прадастаўленне рядный падлучаны/не ўдалося функцыі, і ні адзін не называюцца. Пачынаючы здзіўляцца, калі мой nodemcu будаваць зламаная хоць я 99,99% упэўнены, што я ўключыў у бібліятэку MQTT, калі я зрабіў апошні білд .... I'l павінны праверыць.
дададзена аўтар Squonk, крыніца
Згодны, гэта мае сэнс, што I <�я> павінен </я> прадастаўляць розныя функцыі зваротнага выкліку, але, зноў жа, мой паслушнік разуменне Lua з'яўляецца тое, што трымае мяне, як я не вельмі разумею, як гэта зрабіць. Паспрабую з «няўдалым» зваротным выклікам, каб убачыць, калі я магу атрымаць прычыну і звузіць праблему. Мая галоўная задача была код быў зламаны, але калі вы думаеце, што гэта нармальна, то праблема можа быць у WiFi баку рэчаў або тайм-аўту.
дададзена аўтар Squonk, крыніца

Ваш код выглядае выдатна. Калі т: падлучэнне не атрымоўваецца нічога не будзе, як вы не забяспечваюць функцыю зваротнага выкліку для няўдалых спробаў злучэння.

Акрамя таго, вы не праверыць м: падлучэнне Вернемся значэнне для поспеху.

Refer to http://nodemcu.readthedocs.org/en/dev/en/modules/mqtt/#mqttclientconnect

І праверце, калі ваша спроба не атрымоўваецца ўсталяваць злучэнне.

0
дададзена
вы можаце проста пакласці м: падключыць выклік у друк (), каб убачыць, што ён вяртаецца.
дададзена аўтар Piglet, крыніца
Дзякуй - што б не адбылося са мной, але гэта нічога, акрамя пустой радкі ня друкаваць. Я таксама паспрабаваў «убудаваны» м: падлучэнне прыклад са старонкі док nodemcu MQTT Прадастаўленне рядный падлучаны/не ўдалося функцыі, і ні адзін не называюцца. Пачынаючы здзіўляцца, калі мой nodemcu будаваць зламаная хоць я 99,99% упэўнены, што я ўключыў у бібліятэку MQTT, калі я зрабіў апошні білд .... I'l павінны праверыць.
дададзена аўтар Squonk, крыніца
Згодны, гэта мае сэнс, што I <�я> павінен </я> прадастаўляць розныя функцыі зваротнага выкліку, але, зноў жа, мой паслушнік разуменне Lua з'яўляецца тое, што трымае мяне, як я не вельмі разумею, як гэта зрабіць. Паспрабую з «няўдалым» зваротным выклікам, каб убачыць, калі я магу атрымаць прычыну і звузіць праблему. Мая галоўная задача была код быў зламаны, але калі вы думаеце, што гэта нармальна, то праблема можа быць у WiFi баку рэчаў або тайм-аўту.
дададзена аўтар Squonk, крыніца

Ваш код выглядае выдатна. Калі т: падлучэнне не атрымоўваецца нічога не будзе, як вы не забяспечваюць функцыю зваротнага выкліку для няўдалых спробаў злучэння.

Акрамя таго, вы не праверыць м: падлучэнне Вернемся значэнне для поспеху.

Refer to http://nodemcu.readthedocs.org/en/dev/en/modules/mqtt/#mqttclientconnect

І праверце, калі ваша спроба не атрымоўваецца ўсталяваць злучэнне.

0
дададзена
вы можаце проста пакласці м: падключыць выклік у друк (), каб убачыць, што ён вяртаецца.
дададзена аўтар Piglet, крыніца
Дзякуй - што б не адбылося са мной, але гэта нічога, акрамя пустой радкі ня друкаваць. Я таксама паспрабаваў «убудаваны» м: падлучэнне прыклад са старонкі док nodemcu MQTT Прадастаўленне рядный падлучаны/не ўдалося функцыі, і ні адзін не называюцца. Пачынаючы здзіўляцца, калі мой nodemcu будаваць зламаная хоць я 99,99% упэўнены, што я ўключыў у бібліятэку MQTT, калі я зрабіў апошні білд .... I'l павінны праверыць.
дададзена аўтар Squonk, крыніца
Згодны, гэта мае сэнс, што I <�я> павінен </я> прадастаўляць розныя функцыі зваротнага выкліку, але, зноў жа, мой паслушнік разуменне Lua з'яўляецца тое, што трымае мяне, як я не вельмі разумею, як гэта зрабіць. Паспрабую з «няўдалым» зваротным выклікам, каб убачыць, калі я магу атрымаць прычыну і звузіць праблему. Мая галоўная задача была код быў зламаны, але калі вы думаеце, што гэта нармальна, то праблема можа быць у WiFi баку рэчаў або тайм-аўту.
дададзена аўтар Squonk, крыніца

Ваш код выглядае выдатна. Калі т: падлучэнне не атрымоўваецца нічога не будзе, як вы не забяспечваюць функцыю зваротнага выкліку для няўдалых спробаў злучэння.

Акрамя таго, вы не праверыць м: падлучэнне Вернемся значэнне для поспеху.

Refer to http://nodemcu.readthedocs.org/en/dev/en/modules/mqtt/#mqttclientconnect

І праверце, калі ваша спроба не атрымоўваецца ўсталяваць злучэнне.

0
дададзена
вы можаце проста пакласці м: падключыць выклік у друк (), каб убачыць, што ён вяртаецца.
дададзена аўтар Piglet, крыніца
Дзякуй - што б не адбылося са мной, але гэта нічога, акрамя пустой радкі ня друкаваць. Я таксама паспрабаваў «убудаваны» м: падлучэнне прыклад са старонкі док nodemcu MQTT Прадастаўленне рядный падлучаны/не ўдалося функцыі, і ні адзін не называюцца. Пачынаючы здзіўляцца, калі мой nodemcu будаваць зламаная хоць я 99,99% упэўнены, што я ўключыў у бібліятэку MQTT, калі я зрабіў апошні білд .... I'l павінны праверыць.
дададзена аўтар Squonk, крыніца
Згодны, гэта мае сэнс, што I <�я> павінен </я> прадастаўляць розныя функцыі зваротнага выкліку, але, зноў жа, мой паслушнік разуменне Lua з'яўляецца тое, што трымае мяне, як я не вельмі разумею, як гэта зрабіць. Паспрабую з «няўдалым» зваротным выклікам, каб убачыць, калі я магу атрымаць прычыну і звузіць праблему. Мая галоўная задача была код быў зламаны, але калі вы думаеце, што гэта нармальна, то праблема можа быць у WiFi баку рэчаў або тайм-аўту.
дададзена аўтар Squonk, крыніца