带有NodeMCU固件的ESP8266:接收带有安全MQTT订阅的空消息

时间:2016-02-14 11:14:47

标签: esp8266 nodemcu azure-iot-hub

我正在尝试将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开发人员。

我试过以下:

  • dev版本 - 不帮助
  • 免费内存高达32kB - 没有帮助
  • 使用WireShark捕获数据包:数据包包含一些长度的加密数据,因此它不为空且数据包大小小于2kB缓冲区大小

有人可以告诉我哪里可能有问题或如何调试它以获取更多信息?我会讨论任何想法。谢谢。

编辑: 我尝试过调试模式,输出没什么好处的。

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.

1 个答案:

答案 0 :(得分:0)

这可能是愚蠢的,但有时lua期望某些功能中的特定名称。 改变这个 function(conn, top, data) 为了这 function(conn, topic, data)

我之前曾在lua工作过密码保护,我不得不放弃它,因为我没有收到消息内容,但我认为我的收入是由于我收到/传递的消息量。我还将经纪人从mosquitto改为mosca。

我希望您能尽快找到解决方法并请分享,我们也许可以将其用于:)