azure - 是否可以将大量 JSON 数据发送到 IoT 中心?

标签 azure azure-iot-hub

我代表硬件开发人员问这个问题(我在设备方面没有太多知识)。

目前,由于某些原因,IoT 中心每 2 分钟从设备接收一次数据,计划将数据存储在设备本地并每 30 分钟发送一次。但问题是,数据没有保存到存储中。 2 分钟的数据正在保存到存储中。但30分钟的数据不是 正确保存到存储中。仅保存数组中的第一个对象。

我正在使用流分析来处理来自 IoT 中心的数据并将数据存储到表存储中。

当前消息Json数据(每2分钟)是:

{
    "deviceid": "testdevice12",
    "BatteryVoltage": "31.31",
    "PanelVoltage": "0.00",
    "PanelCurrent": "0.00",
    "OutputVoltage": "31.29",
    "OutputCurrent": "4.94",
    "RSSI": "13",
    "FreeHeapSize": "86.884",
    "timestamp": 1540470493
}

30 分钟内将如下所示:

[{
    "deviceid": "testdevice12",
    "BatteryVoltage": "31.31",
    "PanelVoltage": "0.00",
    "PanelCurrent": "0.00",
    "OutputVoltage": "31.29",
    "OutputCurrent": "4.94",
    "RSSI": "13",
    "FreeHeapSize": "86.884",
    "timestamp": 1540470493
}, {
    "deviceid": "testdevice12",
    "BatteryVoltage": "31.29",
    "PanelVoltage": "0.00",
    "PanelCurrent": "0.00",
    "OutputVoltage": "31.28",
    "OutputCurrent": "4.93",
    "RSSI": "0",
    "FreeHeapSize": "86.884",
    "timestamp": 1540470558
}, {
    "deviceid": "testdevice12",
    "BatteryVoltage": "31.30",
    "PanelVoltage": "0.00",
    "PanelCurrent": "0.00",
    "OutputVoltage": "31.29",
    "OutputCurrent": "4.94",
    "RSSI": "5",
    "FreeHeapSize": "86.884",
    "timestamp": 1540470621
}, {
    "deviceid": "testdevice12",
    "BatteryVoltage": "31.31",
    "PanelVoltage": "0.00",
    "PanelCurrent": "0.00",
    "OutputVoltage": "31.30",
    "OutputCurrent": "4.94",
    "RSSI": "5",
    "FreeHeapSize": "86.884",
    "timestamp": 1540470684
}, {
    "deviceid": "testdevice12",
    "BatteryVoltage": "31.30",
    "PanelVoltage": "0.00",
    "PanelCurrent": "0.00",
    "OutputVoltage": "31.28",
    "OutputCurrent": "4.94",
    "RSSI": "7",
    "FreeHeapSize": "86.884",
    "timestamp": 1540470760
}]

这是我正在使用的 ASA 查询:

WITH [StreamData] AS ( SELECT * FROM [IoTHubStream] WHERE [ObjectType] IS NULL -- Filter out device info and command responses ) 
SELECT IoTHub.ConnectionDeviceId AS DeviceId, PanelVoltage, PanelCurrent, BatteryVoltage, BatteryCurrent, OutputVoltage, OutputCurrent, Temperature, Humidity, EventProcessedUtcTime, PartitionId, EventEnqueuedUtcTime, * INTO [DeviceDataHistory] FROM [StreamData]

最佳答案

终于明白了。 有以下几点: 1. 具有缓存数据结构的 JSON 负载应具有如下结构:

{
 "topic": "cachedData",
  "deviceId": "testdevice12",
  "data":
[{
"BatteryVoltage": "31.31",
"PanelVoltage": "0.00",
"PanelCurrent": "0.00",
"OutputVoltage": "31.29",
"OutputCurrent": "4.94",
"RSSI": "13",
"FreeHeapSize": "86.884",
"timestamp": 1540470493
}, {
"BatteryVoltage": "31.29",
"PanelVoltage": "0.00",
"PanelCurrent": "0.00",
"OutputVoltage": "31.28",
"OutputCurrent": "4.93",
"RSSI": "0",
"FreeHeapSize": "86.884",
"timestamp": 1540470558
}, {
"BatteryVoltage": "31.30",
"PanelVoltage": "0.00",
"PanelCurrent": "0.00",
"OutputVoltage": "31.29",
"OutputCurrent": "4.94",
"RSSI": "5",
"FreeHeapSize": "86.884",
"timestamp": 1540470621
}, {
"BatteryVoltage": "31.31",
"PanelVoltage": "0.00",
"PanelCurrent": "0.00",
"OutputVoltage": "31.30",
"OutputCurrent": "4.94",
"RSSI": "5",
"FreeHeapSize": "86.884",
"timestamp": 1540470684
}, {
"BatteryVoltage": "31.30",
"PanelVoltage": "0.00",
"PanelCurrent": "0.00",
"OutputVoltage": "31.28",
"OutputCurrent": "4.94",
"RSSI": "7",
"FreeHeapSize": "86.884",
"timestamp": 1540470760
}]
}
  • Azure 流分析应如下所示:

     SELECT   
      iothubAlias.deviceId,
      arrayElement.ArrayValue.BatteryVoltage,
      arrayElement.ArrayValue.PanelVoltage,
      arrayElement.ArrayValue.PanelCurrent,
      arrayElement.ArrayValue.OutputVoltage,
      arrayElement.ArrayValue.OutputCurrent,
      arrayElement.ArrayValue.RSSI,
      arrayElement.ArrayValue.FreeHeapSize,
      arrayElement.ArrayValue.timestamp
    INTO [DeviceDataHistory]
    FROM [IoTHubStream] as iothubAlias  
    CROSS APPLY GetArrayElements(iothubAlias.data) AS arrayElement
    
  • 要从输入中检索多行,您必须使用“GetArrayElements” - 您可以在此处阅读更多信息:

    https://learn.microsoft.com/en-us/azure/stream-analytics/stream-analytics-parsing-json

    https://msdn.microsoft.com/en-US/azure/stream-analytics/reference/getarrayelements-azure-stream-analytics

  • 请记住将 Azure 表的 PartitionKey 和 RowKey 设置为 Azure 流分析的输出:
  • enter image description here

    最终结果如下所示:

    enter image description here

    尝试让我知道是否有帮助。

    关于azure - 是否可以将大量 JSON 数据发送到 IoT 中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53003920/

    相关文章:

    azure - 基于 token 的数据库身份验证失败,错误代码为 "Login failed for user ' NT AUTHORITY\ANONYMOUS LOGON'。”

    azure - azure 是否保证两个不同的 azure 应用程序服务计划(标准价格层)具有两个不同的虚拟 IP 地址?

    Azure Functions - 如何为我的 IoTHub 消息设置 IoTHubTrigger?

    azure - 使用 C# 创建 IoT Edge 设备

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

    azure - 如何在 Azure API 管理中使用 validate-jwt 策略验证使用 RS256 算法签名的 JWT

    sql-server - 将数据从本地 SQL Server 移动到 Azure SQL VM

    Azure 实例和 Web 角色

    json - 将 JSON 事件聚合到 Azure 流分析中的数组中

    node.js - 在 Node.js Azure 函数中检索服务总线消息的属性