繁体   English   中英

无法将云发送到设备消息到 Azure 物联网中心

[英]Not able to send Cloud to Device Message to Azure IoT hub

因此,我正在尝试使用 Python 将消息发送到 Azure IoT Hub。 我正在关注文档,但是当我运行脚本时:

from azure.iot.hub import IoTHubRegistryManager

RECEIVED_MESSAGES = 0

CONNECTION_STRING = "<IoT Hub Connection String>"
DEVICE_ID = "<IoT Edge Device ID>"

def iothub_messaging_sample_run():
    
    # Create IoTHubRegistryManager
    registry_manager = IoTHubRegistryManager(CONNECTION_STRING)
    i = 0

    while True:
        i += 1
        print(f'Sending message: {i}')
        data = f'NodeId : Node{i}, Message : Message{i}'
        registry_manager.send_c2d_message(DEVICE_ID, data)

if __name__ == '__main__':
    print('Starting the Python IoT Hub C2D Messaging service sample...')

    iothub_messaging_sample_run()

它首先打印: Sending message: 1
然后抛出这个错误: Exception: C2D message send failure
错误日志的 rest 不包含任何其他信息,仅包含对 Azure IoT 中心 Package 文件的引用。

我已经在防火墙上启用了Inbound Port 8883 ,但我仍然无法将数据发送到 Azure IoT Hub。

配置:

  • Python 版本 - 3.7.3
  • 包 - azure-iot-hub==2.6.0
  • 操作系统 - Windows 10
  • IoT 中心 - 标准层 S1
  • Azure 订阅 - Azure 学生
  • IoT 中心单元数量 - 1
  • IoT 中心位置 - 美国东部
  • 最低 TLS 版本 - 1.0
  • 设备数量 - 1(IoT Edge 设备)

通过链接的教程工作,我注意到您的实现完全不同。 尽管如此,当我复制您的代码时,它确实可以在我的机器上运行,但我知道有两个原因可能导致此错误:

  1. 您输入了错误的设备 ID。
  2. 设备的 C2D 队列已满。 C2D 消息队列有 50 条消息的限制。 确保您的设备(或教程中的设备 Python 文件)正在侦听清空队列。 您的代码没有延迟,因此您将在几秒钟内填满队列,下次启动程序时,它可能会在第一条消息时崩溃。

我还注意到你写道:

DEVICE_ID = "<IoT Edge Device ID>"

Azure IoT Edge 设备不支持 C2D 消息,但不会导致错误,但您将无法在设备上接收消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM