Azure IOT hub 是否可以用于从某些设备读取(获取)数据?

Can Azure IOT hub be used to read(Get) data from some devices?

在我的例子中,我有 1000 多个存储 activity 的设备。我需要向此设备发送 http get 请求以获取 csv 或 json 格式的数据,并将其保存在托管在 azure 上的存储中。 Cab IOT hub 需要使用 get 请求的数据,是否可以安排读取 daily/weekly? 您会建议哪些其他 Azure 服务来促进此计划读取?

可以考虑使用IoT Hub的Device Twin https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-device-twins

使用设备孪生来:

  • 在云中存储特定于设备的元数据。比如自动售货机的部署位置。
  • 报告当前状态信息,例如设备应用程序的可用功能和条件。例如,设备通过蜂窝网络或 WiFi 连接到您的 IoT 中心。
  • 在设备应用程序和后端应用程序之间同步长运行 工作流的状态。例如,当解决方案后端指定要安装的新固件版本时,设备应用程序报告更新过程的各个阶段。
  • 查询您的设备元数据、配置或状态。

IoT Hub 使您能够通过各种协议连接您的设备。首选协议是消息传递协议,例如 MQTT 或 AMQP,但也支持 HTTPS。不过,使用 IoT 中心时,您不需要从设备请求数据。设备会将数据发送到 IoT 中心。您必须选择使用 IoT 中心来实现它:

  • 设备在有数据需要发送时连接到IoT Hub,并将数据推送到IoT Hub
  • 设备不会自行发送任何数据,但始终或至少定期连接到 IoT 中心。然后,您可以通过 IoT 中心向设备发送云到设备消息,请求发送数据。然后设备以与第一个选项相同的方式发送数据。

当数据被发送到 IoT Hub 后,您需要将其推送到永久存储它的地方 - 默认情况下,IoT Hub 仅将消息保留 1 天。选项是:

  • 创建一个 blob 存储帐户并使用 custom endpoint 从 IoT 中心直接推送到该帐户这可能是最简单和最便宜的。根据您需要访问数据的方式,blob 可能不是最佳选择,但
  • 创建一个函数应用程序,创建一个带有 EventHubTrigger 的函数,将其连接到 IoT 中心并让该函数通过将传入数据输出到任何类型的数据接收器来处理传入数据,例如 SQL、CosmosDB、Table 存储...

你没有提到使用了哪个 Azure IoT 中心规模层。基本上有两个价格组,例如 BasicStandard,它们具有显着不同的成本和功能。基本层仅提供设备与 Azure IoT 中心之间的单向通信服务。

基于此,以下场景可用于您的业务案例:

1. Basic Tier(非事件驱动解决方案) 该设备根据需要定期将遥测和非遥测消息推送到 Azure IoT 中心,其中非遥测消息通过服务总线路由到 Azure 函数 Queue/Topic。此非遥测管道的职责是在数据库中保留真实的设备状态。请注意,600 万条消息的费用仅为每月 50 美元。后端应用程序可以随时查询此数据库以获取设备状态。

2。标准层(事件驱动解决方案) 在这种情况下,您可以使用 Azure IoT 中心的设备孪生来在云后端中存储真实设备状态(由@HelenLo 描述)。设备可以由 C2D 消息触发,更改所需的 属性,调用方法或基于设备边缘触发来更新状态(报告的属性)的操作。 Azure IoT 中心具有 运行 为多个设备安排的 jobs 的功能。
在此解决方案中,后端应用程序可以随时调用 ExportDevicesAsync 的作业到 blob 存储,请参阅更多详细信息 here。请注意,600 万条消息的费用为每月 250 美元。

正如你在上面看到的,每个场景都需要根据设备与 Azure IoT 中心之间的通信能力构建不同的设备逻辑模型。请注意,这些通信有一些限制,请参阅更多详细信息 here