什么是有用的 Azure IoT 中心 JSON 消息结构用于时间序列见解中的消费

What is a useful Azure IoT Hub JSON message structure for consumption in Time Series Insights

标题听起来很全面,但我想我的基准问题很简单。

上下文

我是 Azure,我有一个 IoT 中心,我正在向其发送消息。我使用 samples from the Azure Iot SDK for python.

之一的修改版本

发送正常。但是,我发送的不是字符串,而是 JSON 结构。

当我使用云 shell 观察流入 IoT 中心的事件时,它看起来像这样:

PS /home/marcel> az iot hub monitor-events --hub-name weathertestiothub
This extension 'azure-cli-iot-ext' is deprecated and scheduled for removal. Please remove and add 'azure-iot' instead.
Starting event monitor, use ctrl-c to stop...
{
"event": {
        "origin": "raspberrypi-zero-wh",
        "payload": "{ \"timestamp\": \"1608643863720\", \"locationDescription\": \"Attic\", \"temperature\": \"21.941\", \"relhumidity\": \"71.602\" }"
    }
}

问题

数据看起来不错,除了有效负载在这里看起来很奇怪。但是,有效负载实际上是我使用 SDK 示例从设备发送的内容。

这是正确的做法吗?最后,我很难真正将数据输入到时间序列洞察力模型中。所以我想,我的结构应该受到指责。

问题

推荐的 JSON 数据结构是什么,可以发送到 IoT 中心供以后使用?

您应该在 python SDK 示例中的消息中添加以下两行:

msg.content_encoding = "utf-8"
msg.content_type = "application/json"

这应该可以解决您的格式问题。

我们还更新了样本以反映这一点:https://github.com/Azure/azure-iot-sdk-python/blob/master/azure-iot-device/samples/sync-samples/send_message.py

我最终使用了@elhorton 的提示,但这不是关键更改。尽管如此,Azure Shell 监视器中的格式现在看起来好多了:

"event": {
    "origin": "raspberrypi-zero-wh",
    "payload": {
        "temperature": 21.543947753906245,
        "humidity": 69.22964477539062,
        "locationDescription": "Attic"
    }
}

关键是:

  1. 包含 ISO 格式的消息源时间
    from datetime import datetime
    timestampIso = datetime.now().isoformat()
    message.custom_properties["iothub-creation-time-utc"] = timestampIso
  1. 使用locationDescription作为Time Series ID Property参见https://docs.microsoft.com/en-us/azure/time-series-insights/how-to-select-tsid(也许我也可以采用iothub-connection-device-id,但我没有专门单独测试)

我想使用“iothub-connection-device-id”会使“raspberrypi-zero-wh”成为时间序列实例的名称。我同意您选择使用“locationDescription”作为 TSID;所以 Attic 成为时间序列实例名称,temperaturehumidity 将成为您的变量。