在使用 MQTT 协议直接与 Azure IoT Hub 通信时,你需要正确设置消息的“系统属性”,这些属性可以帮助 IoT Hub 理解和正确处理发送到它的消息。以下是一些步骤和示例,说明如何在 MQTT 消息中设置这些“系统属性”:
1. 理解系统属性
Azure IoT Hub 的系统属性包括:
message-id
:消息的唯一标识符。correlation-id
:相关消息的标识符。content-type
:消息内容的类型,如application/json
。content-encoding
:消息内容的编码方式,如utf-8
。
2. 设置MQTT主题来包含系统属性
当使用 MQTT 发布消息到 IoT Hub 时,你需要在 MQTT 的 topic 名称中包含这些系统属性。这些属性应该作为主题名称的一部分,格式如下:
shelldevices/{device-id}/messages/events/{property_bag}
其中 {property_bag}
是一个由 &
分隔的键值对列表,例如:
shelldevices/mydevice/messages/events/content-type=application%2Fjson&content-encoding=utf-8
3. 发布消息
假设你正在使用某种 MQTT 客户端库,例如 Python 中的 paho-mqtt
,下面是如何发送包含系统属性的消息的示例代码:
pythonimport paho.mqtt.client as mqtt # MQTT 客户端设置 client = mqtt.Client() client.username_pw_set(username="{iot_hub_hostname}/{device_id}/?api-version=2019-03-30", password="{sas_token}") client.connect("{iot_hub_hostname}", 8883) # MQTT 主题,包括系统属性 topic = "devices/mydevice/messages/events/content-type=application%2Fjson&content-encoding=utf-8" # 消息内容 message = '{"temperature": 22.5}' # 发布消息 client.publish(topic, payload=message, qos=1) client.disconnect()
4. 确认和调试
确保你的设备已正确注册并能在 IoT Hub 中被认证。使用正确的 SAS token 和设备 ID 进行连接。如果消息没有正确处理,检查 IoT Hub 的监视工具和日志来诊断问题。
通过这种方式,你可以确保通过 MQTT 发送到 Azure IoT Hub 的消息携带正确的系统属性,从而使得消息能够被正确解析和处理。
2024年8月21日 01:41 回复