远程监控预配置解决方案演示

IoT 套件远程监视 预配置解决方案 是针对在远程位置运行的多台计算机的端到端监视解决方案的实现。 该解决方案结合了关键的 Azure 服务,以提供业务方案的通用实现。 可以将解决方案用作你自己的实现的起点,并 对其进行自定义 以满足自己的特定业务需求。

本文逐步讲解远程监视解决方案的一些关键元素,使你能够了解其工作原理。 此知识可帮助你:

  • 排查解决方案中的问题。
  • 规划如何自定义解决方案以满足自己的特定要求。
  • 设计自己的使用 Azure 服务的 IoT 解决方案。

逻辑体系结构

下图概述了预配置解决方案的逻辑组件:

逻辑体系结构

微服务和 Docker 容器

远程监视是我们利用微服务体系结构的预配置解决方案中的第一个。 该解决方案在 .NETJava 中均可用。 微服务已成为一种普遍模式,可实现缩放和灵活性(允许容器单独缩放),而不会影响开发速度。 微服务将代码隔离,并提供定义良好的接口,使解决方案更易于理解,减少整体式。 它还进一步扩展了希望扩展当前解决方案加速器的合作伙伴的选项,以构建可盈利的已完成解决方案。

详细了解 Docker 容器

模拟设备

在预配置解决方案中,模拟设备表示冷却设备(如建筑物空调或设施空气处理单元)。 部署预配置解决方案时,还会自动预配在 Azure WebJob 中运行的四个模拟设备。 通过模拟设备,可以轻松探索解决方案的行为,而无需部署任何物理设备。 若要部署实际物理设备,请参阅将 设备连接到远程监视预配置解决方案 教程。

设备到云的消息

每个模拟设备都可以将以下消息类型发送到 IoT 中心:

消息 说明
初创公司 设备启动时,它会向后端发送包含自身相关信息 的设备信息 消息。 此数据包括设备 ID 以及设备支持的命令和方法的列表。
存在 设备定期发送 状态 消息来报告设备是否可以感知传感器的存在。
遥测 设备定期发送 遥测 消息,该消息报告从设备的模拟传感器收集的温度和湿度的模拟值。

注释

解决方案将设备支持的命令列表存储在 Cosmos DB 数据库中,而不是存储在设备孪生中。

属性和设备孪生

模拟设备将以下设备属性作为报告属性发送到 IoT 中心中的孪生体。 设备在启动时发送报告的属性,并响应 更改设备状态 命令或方法。

财产 目的
配置.遥测间隔 设备发送遥测的频率(秒)
Config.温度平均值 指定模拟温度遥测的平均值
设备.设备ID 在解决方案中创建设备时提供或分配的 ID
Device.DeviceState 设备报告的状态
设备.创建时间 在解决方案中创建设备的时间
设备.启动时间 设备启动时间
设备.最后期望属性更改 上次所需属性更改的版本号
设备.位置.纬度 设备的纬度位置
设备.位置.经度 设备的经度位置
System.Manufacturer 设备制造商
系统.型号编号 设备的型号
System.SerialNumber 设备的序列号
系统.固件版本 设备上的固件的当前版本
System.Platform 设备的平台体系结构
系统处理器 运行设备的处理器
System.InstalledRAM (系统已安装内存) 设备上安装的 RAM 量

模拟器在模拟设备中用示例值设置这些属性。 每当模拟器初始化模拟设备时,设备都会将预定义的元数据报告给 IoT 中心作为报告属性。 报告的属性只能由设备更新。 若要更改报告的属性,可以在解决方案门户中设置所需的属性。 设备的责任是:

  1. 定期从 IoT 中心检索所需属性。
  2. 使用所需的属性值更新其配置。
  3. 以报告属性的形式将新值发送回集线器。

在解决方案仪表板中,可以使用 所需的属性 通过 设备孪生在设备上设置属性。 通常,设备从集线器读取所需的属性值以更新其内部状态,并将更改作为报告属性返回。

注释

模拟设备代码仅使用 Desired.Config.TemperatureMeanValueDesired.Config.TelemetryInterval 所需属性来更新发送回 IoT 中心的报告属性。 模拟设备中将忽略所有其他所需属性更改请求。

方法

模拟设备可以通过 IoT 中心处理从解决方案门户调用的以下方法(直接方法):

方法 说明
启动固件更新 指示设备执行固件更新
重新启动 指示设备重新启动
恢复出厂设置 指示设备执行恢复出厂设置

某些方法使用报告的属性来报告进度。 例如, InitiateFirmwareUpdate 方法模拟在设备上异步运行更新。 该方法立即在设备上返回,而异步任务继续使用报告属性将状态更新发送回解决方案仪表板。

指令

模拟设备可以处理通过 IoT 中心从解决方案门户发送的以下命令(云到设备消息):

指令 说明
PingDevice 向设备发送 ping 以检查它是否处于活动状态
StartTelemetry (启动遥测) 启动发送遥测的设备
停止遥测 阻止设备发送遥测数据
更改设定点温度 更改生成随机数据的设置点值
DiagnosticTelemetry 触发设备模拟器发送一个额外的遥测值(externalTemp)
更改设备状态 更改设备的扩展状态属性,并从设备发送设备信息消息

注释

有关这些命令(云到设备消息)和方法(直接方法)的比较,请参阅 云到设备的通信指南

IoT 中心

IoT 中心将数据从设备引入到云中,并使其可用于 Azure 流分析(ASA)作业。 每个流 ASA 作业都使用单独的 IoT 中心使用者组从设备读取消息流。

解决方案中的 IoT 中心还:

  • 维护标识注册表,用于存储允许连接到门户的所有设备的 ID 和身份验证密钥。 可以通过标识注册表启用或禁用设备。
  • 代表解决方案门户向设备发送命令。
  • 代表解决方案门户在您的设备上调用方法。
  • 维护所有已注册设备的设备孪生。 设备孪生存储设备报告的属性值。 设备孪生还存储所需属性,这些属性在解决方案门户中设置,以便在设备下次连接时检索。
  • 计划作业以设置多个设备的属性或在多个设备上调用方法。

Azure 流分析

在远程监视解决方案中, Azure 流分析 (ASA)将 IoT 中心收到的设备消息调度到其他后端组件进行处理或存储。 不同的 ASA 作业根据消息的内容执行特定功能。

作业 1:设备信息 从传入消息流中筛选设备信息消息,并将其发送到事件中心终结点。 设备在启动时发送设备信息消息,并响应 SendDeviceInfo 命令。 此作业使用以下查询定义来标识 设备信息 消息:

SELECT * FROM DeviceDataStream Partition By PartitionId WHERE  ObjectType = 'DeviceInfo'

此作业将其输出发送到事件中心以供进一步处理。

作业 2:规则 根据每个设备阈值评估传入的温度和湿度遥测值。 阈值是在解决方案门户中可用的规则编辑器中设置的。 每个设备/值对按时间戳存储在 Blob 中,供流分析读取为 引用数据。 该作业将任何非空值与设备的设置阈值进行比较。 如果超出“”>条件,作业将输出一个 警报 事件,该事件指示超出阈值并提供设备、值和时间戳值。 此作业使用以下查询定义来标识应触发警报的遥测消息:

WITH AlarmsData AS 
(
SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Temperature' as ReadingType,
     Stream.Temperature as Reading,
     Ref.Temperature as Threshold,
     Ref.TemperatureRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Temperature IS NOT null AND Stream.Temperature > Ref.Temperature

UNION ALL

SELECT
     Stream.IoTHub.ConnectionDeviceId AS DeviceId,
     'Humidity' as ReadingType,
     Stream.Humidity as Reading,
     Ref.Humidity as Threshold,
     Ref.HumidityRuleOutput as RuleOutput,
     Stream.EventEnqueuedUtcTime AS [Time]
FROM IoTTelemetryStream Stream
JOIN DeviceRulesBlob Ref ON Stream.IoTHub.ConnectionDeviceId = Ref.DeviceID
WHERE
     Ref.Humidity IS NOT null AND Stream.Humidity > Ref.Humidity
)

SELECT *
INTO DeviceRulesMonitoring
FROM AlarmsData

SELECT *
INTO DeviceRulesHub
FROM AlarmsData

该作业将其输出发送到事件中心,以便进一步处理,并将每个警报的详细信息保存到 Blob 存储,解决方案门户可从中读取警报信息。

作业 3:遥测 通过两种方式处理传入的设备遥测流。 第一个将设备中的所有遥测消息发送到持久性 Blob 存储,以便进行长期存储。 第二个计算五分钟滑动窗口中的平均、最小值和最大湿度值,并将此数据发送到 Blob 存储。 解决方案门户从 Blob 存储读取遥测数据以填充图表。 此作业使用以下查询定义:

WITH 
    [StreamData]
AS (
    SELECT
        *
    FROM [IoTHubStream]
    WHERE
        [ObjectType] IS NULL -- Filter out device info and command responses
) 

SELECT
    IoTHub.ConnectionDeviceId AS DeviceId,
    Temperature,
    Humidity,
    ExternalTemperature,
    EventProcessedUtcTime,
    PartitionId,
    EventEnqueuedUtcTime,
    * 
INTO
    [Telemetry]
FROM
    [StreamData]

SELECT
    IoTHub.ConnectionDeviceId AS DeviceId,
    AVG (Humidity) AS [AverageHumidity],
    MIN(Humidity) AS [MinimumHumidity],
    MAX(Humidity) AS [MaxHumidity],
    5.0 AS TimeframeMinutes 
INTO
    [TelemetrySummary]
FROM [StreamData]
WHERE
    [Humidity] IS NOT NULL
GROUP BY
    IoTHub.ConnectionDeviceId,
    SlidingWindow (mi, 5)

事件中心

设备信息和规则 ASA 作业将其数据输出到事件中心,以便可靠地转发到 WebJob 中运行的事件处理程序

Azure 存储

该解决方案使用 Azure Blob 存储来保存解决方案中设备的所有原始和汇总遥测数据。 门户网站从 Blob 存储读取遥测数据来填充图表。 为了显示警报,解决方案门户从 Blob 存储读取数据,该存储记录了遥测值超过配置阈值的事件。 该解决方案还使用 Blob 存储来记录在解决方案门户中设置的阈值。

WebJobs

除了托管设备模拟器之外,解决方案中的 WebJobs 还托管在处理命令响应的 Azure WebJob 中运行的 事件处理程序 。 它使用命令响应消息更新设备命令历史记录(存储在 Cosmos DB 数据库中)。

Cosmos DB

该解决方案使用 Cosmos DB 数据库来存储连接到解决方案的设备的相关信息。 此信息包括从解决方案门户发送到设备的命令的历史记录,以及从解决方案门户调用的方法。

解决方案门户

解决方案门户是作为预配置解决方案的一部分部署的 Web 应用。 解决方案门户中的关键页面是仪表板和设备列表。

仪表盘

Web 应用中的此页面使用 PowerBI javascript 控件(请参阅 PowerBI 视觉对象存储库)可视化来自设备的遥测数据。 解决方案使用 ASA 遥测任务将遥测数据写入 Blob 存储。

设备列表

从解决方案门户的这个页面,您可以:

  • 配置新设备。 此作设置唯一的设备 ID 并生成身份验证密钥。 它将有关设备的信息写入 IoT 中心标识注册表和特定于解决方案的 Cosmos DB 数据库。
  • 管理设备属性。 此操作包括查看现有属性并更新为新属性。
  • 将命令发送到设备。
  • 查看设备的命令历史记录。
  • 启用和禁用设备。

后续步骤

以下 TechNet 博客文章提供有关远程监视预配置解决方案的更多详细信息:

可以阅读以下文章,继续开始使用 IoT 套件: