You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过HTTP/REST向IoT Central组件发送遥测数据并正确归属

向Azure IoT Central组件发送遥测数据的正确CURL调用方式

问题场景

原本通过CURL向IoT Central发送设备遥测的调用可正常工作:

curl -s -H "authorization: ${AUTH}" --request POST --data "$MESSAGE0" "https://$SCOPE/devices/$DEVICE_ID/messages/events?api-version=2020-03-13"

参数示例:

$AUTH = SharedAccessSignature sr=xxxxxxx.azure-devices.net%2fdevices%2fmyDeviceName4&sig=yyyyyyyy&se=zzzzzzzzzz
$MESSAGE0 = '{"FillingLevel": 30.0, Geo_Data:{"lon":8.2393, "lat":52.02413,"alt":0}}'
$SCOPE = IoT Central的Scope Id
$DEVICE_ID = myDeviceName

尝试向多组件设备模型的指定组件发送遥测时,参考MQTT方式添加了modules/$MODULE_ID路径:

curl -s -H "authorisation: ${AUTH}" --request POST --data "$MESSAGE0" "https://$SCOPE/devices/$DEVICE_ID/modules/$MODULE_ID/messages/events?api-version=2020-03-13"

其中$MODULE_ID为组件ID,发送无报错但数据被标记为unmodeleddata,未关联到目标组件。

正确实现方式

IoT Central的HTTP遥测协议中,组件遥测不是通过URL路径的modules参数指定,而是需要在遥测数据的JSON结构中,用组件ID作为键来包裹对应组件的遥测字段,同时保持原有的设备events请求路径。

步骤1:修改遥测数据格式

将$MESSAGE0调整为包含组件标识的结构,格式如下:

$MESSAGE0 = '{"[组件ID]": {"FillingLevel": 30.0, "Geo_Data":{"lon":8.2393, "lat":52.02413,"alt":0}}}'

例如组件ID为myComponent,则:

$MESSAGE0 = '{"myComponent": {"FillingLevel": 30.0, "Geo_Data":{"lon":8.2393, "lat":52.02413,"alt":0}}}'

步骤2:使用正确的CURL调用

保持原有的请求路径,不需要添加modules/$MODULE_ID,命令如下:

curl -s -H "authorization: ${AUTH}" --request POST --data "$MESSAGE0" "https://$SCOPE/devices/$DEVICE_ID/messages/events?api-version=2020-03-13"

关键说明

  • IoT Central的组件模型遥测,HTTP协议与MQTT协议的标识方式不同:MQTT是通过主题中的组件后缀指定,而HTTP是通过JSON payload中的组件键来关联。
  • URL中的modules路径对应IoT Hub的模块概念,和IoT Central设备模型中的组件不是同一个概念,因此不能混用。

内容的提问来源于stack exchange,提问作者Init5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 20:09:29