我遇到一个奇怪的问题,当机器学习模块被推送到 IoT Edge 设备时,该模块的输出无法被云端的 ASA 接收。例如,尽管消息已经被发送(使用 VS Code 等工具检查过),但 ASA 的输入样本却返回空。我使用了这个教程:https://learn.microsoft.com/en-us/azure/iot-edge/tutorial-deploy-machine-learning
当使用温度传感器模拟器发送消息时,ASA 可以正确地采样并消费这些消息。相关教程见:https://learn.microsoft.com/en-us/azure/iot-edge/tutorial-simulate-device-linux
我能看到的唯一区别在于 JSON 的格式 – 我想知道是否是 ‘applicationProperties’ 部分引起了问题?
机器学习模块发送到 IoT Hub 的 JSON:15/02/2018 2:42:14 PM> 设备:[DSVM],数据:[[“{\”ambient\”: {\”humidity\”: 24, \”temperature\”: 21.277752659180088}, \”machine\”: {\”pressure\”: 10.860424874724545, \”temperature\”: 107.55261834480434}, \”timeCreated\”: \”2018-02-15T03:42:14.140615Z\”, \”anomaly\”: true}”]]属性:’AzureMLResponse’: ‘OK’
温度传感器发送到 IoT Hub 的 JSON:15/02/2018 2:42:14 PM> 设备:[DSVM],数据:[{“machine”:{“temperature”:107.55261834480434,”pressure”:10.860424874724545},”ambient”:{“temperature”:21.277752659180088,”humidity”:24},”timeCreated”:”2018-02-15T03:42:14.140615Z”}]
有谁对这个问题有任何想法吗?你们能否轻易去掉 AzureMLResponse 属性?
谢谢,Com
回答:
我已经找到了这个特定问题的解决方案。
这一行代码:return [json.dumps(input_json)]
会对 JSON 字符串进行编码并将其返回到 IoT Hub。模块本身或 IoT Hub 必须在传出时自动将消息编码为 JSON。转义字符等是双重编码的结果。