通过MQTT向IoT Hub发送消息时ContentType系统属性缺失问题
Azure IoT Hub MQTT模块消息设置ContentType/ContentEncoding问题解决
确认MQTT主题格式正确性:模块遥测消息的主题必须以
devices/{device-id}/modules/{module-id}/messages/events/为基础,直接在末尾追加$.ct=application/json&$.ce=utf-8,禁止对$.ct和$.ce做URL转义。完整示例主题:devices/my-device/modules/my-module/messages/events/$.ct=application/json&$.ce=utf-8修正消息Payload格式:发送的遥测数据必须是标准JSON格式,键名需用双引号包裹,比如
{"signalStrength": -19.0},单引号格式的JSON可能导致IoT Hub无法正确解析,进而无法设置对应系统属性。检查MQTT客户端编码配置:部分MQTT客户端会自动对主题进行URL编码,将
$.ct转义为%24.ct,这种转义后的参数无法被IoT Hub识别。需在客户端设置中关闭主题的自动URL编码功能。改用SDK显式设置属性:如果主题追加参数的方式始终无效,可直接使用Azure IoT SDK发送消息,在消息对象中显式指定
contentType和contentEncoding。示例Python代码:
from azure.iot.device import IoTHubModuleClient # 替换为模块的连接字符串 client = IoTHubModuleClient.create_from_connection_string("YOUR_MODULE_CONNECTION_STRING") telemetry_data = {"signalStrength": -19.0} # 显式设置内容类型和编码 client.send_message(telemetry_data, content_type="application/json", content_encoding="utf-8")
内容的提问来源于stack exchange,提问作者Solar.gy
相关产品推荐
相关产品推荐

