我正在尝试将ESP8266安全地连接到云端或本地计算机上的MQTT Azure协议网关代理(尝试过两者),就像这样(不重要 - 连接正常工作):
m = mqtt.Client("{deviceId}", "3600", "{iotHub}/{deviceId}", "{SASToken}")
...
m:on("message", function(conn, top, data)
print(data) -- EMPTY string here!
end)
...
m:connect({IP}, 8883, 1, function(conn)
m:subscribe("devices/{deviceId}/messages/devicebound/#", 1, function(conn)
...
end)
end)
ESP连接到服务器并成功完成握手。当我发布一些数据时,我可以在服务器上正确读取它,没关系。我订阅主题没有问题。当我从云端到设备消息中将数据从服务器发送到ESP到订阅主题时,会调用“on message”事件,但传递给该函数的数据属性为EMPTY字符串。
我正在使用基于1.4.0 SDK的最新NodeMCU主版本(尝试整数版和浮动版)。我无法打开调试,因为我还没有NodeMCU开发人员。
我试过以下:
有人可以告诉我哪里可能有问题或如何调试它以获取更多信息?我会讨论任何想法。谢谢。
编辑: 我尝试过调试模式,输出没什么好处的。
enter mqtt_socket_received.
MQTT_DATA: type: 3, qos: 0, msg_id: 0, pending_id: 0
enter deliver_publish.
string
userdata: 3fff3e88
devices/ESP/messages/devicebound
<- here should be printed data
On
leave deliver_publish.
receive, queue size: 0
leave mqtt_socket_received.
enter mqtt_socket_timer.
timer, queue size: 0
keep_alive_tick: 71
leave mqtt_socket_timer.
enter mqtt_socket_received.
MQTT_DATA: type: 7, qos: 1, msg_id: 8813, pending_id: 0
receive, queue size: 0
leave mqtt_socket_received.
答案 0 :(得分:0)
这可能是愚蠢的,但有时lua期望某些功能中的特定名称。
改变这个
function(conn, top, data)
为了这
function(conn, topic, data)
我之前曾在lua工作过密码保护,我不得不放弃它,因为我没有收到消息内容,但我认为我的收入是由于我收到/传递的消息量。我还将经纪人从mosquitto改为mosca。
我希望您能尽快找到解决方法并请分享,我们也许可以将其用于:)