你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

IoT Central 的设备实现和最佳做法

本文提供有关如何实现连接到 IoT Central 应用程序的设备的信息。 此外,本文还介绍了一些最佳做法。 若要详细了解整个连接过程,请参阅连接设备

有关示例设备实现代码,请参阅教程:创建客户端应用程序并将其连接到 Azure IoT Central 应用程序

实现设备

连接到 IoT Central 的设备应遵循 IoT 即插即用约定。 其中一项约定是设备在连接时应发送它所实现的设备模型的模型 ID。 模型 ID 使 IoT Central 应用程序能够将设备分配到正确的设备模板。

IoT Central 设备模板包括一个模型,用于指定该类型的设备应实现的行为。 行为包括遥测、属性和命令。

每个模型都具有唯一的数字孪生体模型标识符 (DTMI),如 dtmi:com:example:Thermostat;1。 当设备连接到 IoT Central 时,它会发送其实现的模型的 DTMI。 然后 IoT Central 可以将正确的设备模板分配到设备。

IoT 即插即用定义设备在实现 数字孪生体定义语言 (DTDL) 模型时应遵循的一组约定

Azure IoT 设备 SDK 包括对 IoT 即插即用约定的支持。

设备型号

对于 IoT Central,设备模型是使用 DTDL V2 建模语言定义的。 此语言可让你定义:

  • 设备发送的遥测。 定义包括遥测的名称和数据类型。 例如,设备以双精度形式发送温度遥测。
  • 设备报告给 IoT Central 的属性。 属性定义包括其名称和数据类型。 例如,设备将阀门的状态报告为布尔值。
  • 设备可从 IoT Central 接收的属性。 还可以选择将属性标记为可写。 例如,IoT Central 将目标温度以双精度值将发送到设备。
  • 设备响应的命令。 定义包含命令的名称,以及任何参数的名称和数据类型。 例如,设备响应一个指定在重新启动之前要等待的秒数的重新启动命令。

注意

IoT Central 定义了 DTDL v2 语言的一些扩展。 若要了解详细信息,请参阅 IoT Central 扩展

DTDL 模型可以是非组件或多组件模型

  • 无组件模型:简单的模型不使用嵌入或级联的组件。 所有遥测、属性和命令都定义为单个根组件。 有关示例,请参阅恒温器模型。
  • 多组件模型。 包含两个或以上组件的更为复杂的模型。 这些组件包括单个根组件以及一个或多个嵌套组件。 有关示例,请参阅温度控制器模型。

提示

可以将 IoT Central 设备模板作为 DTDL v2 文件导入和导出完整的设备模型或单个接口

若要详细了解设备模型,请参阅 IoT 即插即用建模指南

约定

设备在与 IoT Central 交换数据时,应遵循 IoT 即插即用约定。 约定包括:

  • 当 DTMI 连接到 IoT Central 时发送 DTMI。
  • 将格式正确的 JSON 有效负载和元数据发送到 IoT Central。
  • 正确响应 IoT Central 中的可写属性和命令。
  • 遵循组件命令的命名约定。

注意

目前 IoT Central 不完全支持 DTDL“Array”和“Geospatial”数据类型

若要了解有关 IoT 即插即用约定的详细信息,请参阅 IoT 即插即用约定

若要了解有关设备与 IoT Central 交换的 JSON 消息格式的详细信息,请参阅遥测、属性和命令有效负载

设备 SDK

使用 Azure IoT 设备 SDK 中的一个来实现设备行为。 代码应做到以下几点:

  • 将设备注册到 DPS,并使用 DPS 中的信息连接到 IoT Central 应用程序中的内部 IoT 中心。
  • 公布设备实现的模型的 DTMI。
  • 以设备模型指定的格式发送遥测。 IoT Central 使用设备模板中的模型来确定如何使用遥测,以便实现可视化效果和分析。
  • 同步设备和 IoT Central 之间的属性值。 模型指定属性名称和数据类型,以便 IoT Central 可以显示信息。
  • 为模型中指定的命令实现命令处理程序。 模型指定设备应使用的命令名称和参数。

有关设备模板的角色的详细信息,请参阅什么是设备模板?

下表对 Azure IoT Central 设备功能映射到 IoT 中心功能的具体情况进行了汇总:

Azure IoT Central Azure IoT 中心
遥测 设备到云的消息传送
脱机命令 云到设备的消息传递
properties 设备孪生报告属性
属性(可写) 设备孪生所需的和报告的属性
命令 直接方法

通信协议

设备可用于连接到 IoT Central 的通信协议包括 MQTT、AMQP 和 HTTPS。 在内部,IoT Central 使用 IoT 中心来启用设备连接。 有关 IoT 中心针对设备连接支持的通信协议的详细信息,请参阅选择通信协议

如果设备无法使用这些受支持协议中的任何一种,请使用 Azure IoT Edge 进行协议转换。 IoT Edge 支持其他边缘智能方案,以将处理从 Azure IoT Central 应用程序卸载。

遥测时间戳

默认情况下,IoT Central 在仪表板和图表上显示遥测数据时会使用消息排队时间。 当 IoT Central 接收来自设备的消息时,消息排队时间会在内部进行设置。

设备可以在创建要发送到 IoT Central 的消息时设置 iothub-creation-time-utc 属性。 如果此属性存在,IoT Central 会在仪表板和图表上显示遥测数据时使用它。

从 IoT Central 应用程序导出遥测数据时,可同时导出排队时间和 iothub-creation-time-utc 属性。

若要详细了解消息属性,请参阅设备到云 IoT 中心消息的系统属性

最佳做法

这些建议说明了如何实现设备,以便充分利用 IoT Central 中内置的高可用性、灾难恢复和自动缩放。

设备预配

随着应用程序中 IoT 中心数的更改,设备可能需要连接到其他中心。

在将设备连接到 IoT Central 之前,必须在基础服务中注册和预配设备。 将设备添加到 IoT Central 应用程序时,IoT Central 会向 DPS 注册组添加一个条目。 注册组中的信息(例如 ID 范围、设备 ID 和密钥)将显示在 IoT Central UI 中。

将设备首次连接到 IoT Central 应用程序时,DPS 会在其中一个链接到 IoT 中心的注册组中预配设备。 然后,该设备将与该 IoT 中心关联。 DPS 使用分配策略跨应用程序的 IoT 中心对预配进行负载均衡。 此过程确保每个 IoT 中心都具有类似数量的预配设备。

若要详细了解 IoT Central 中的注册和预配,请参阅 IoT Central 设备连接指南

处理连接失败

出于缩放或灾难恢复目的,IoT Central 可能会更新其底层 IoT 中心。 若要保持连接性,设备代码应通过建立与新 IoT 中心终结点的连接来处理特定连接错误。

如果设备在连接时收到以下任何错误,则应使用 DPS 重新预配设备来获取新的连接字符串。 这些错误意味着连接字符串不再有效:

  • 不可访问的 IoT 中心终结点。
  • 已过期的安全令牌。
  • 设备在 IoT 中心被禁用。

如果设备在连接时收到以下任何错误,则应使用回退策略重试连接。 这些错误意味着连接字符串仍然有效,但暂时性的情况阻止了设备连接:

  • 操作员阻止的设备。
  • 服务内部错误 500。

若要了解有关设备错误代码的详细信息,请参阅设备连接故障排除

若要详细了解如何实现自动重新连接,请参阅管理设备重新连接以创建可复原的应用程序

目前无法在 IoT 中心之间移动 IoT Edge 设备。

测试故障转移功能

通过 Azure CLI,可以测试设备代码的故障转移功能。 CLI 命令的工作原理是将设备注册临时切换到不同的内部 IoT 中心。 为了验证设备故障转移是否成功,请检查设备是否仍发送遥测数据并对命令做出响应。

若要为设备运行故障转移测试,请运行以下命令:

az iot central device manual-failover \
    --app-id {Application ID of your IoT Central application} \
    --device-id {Device ID of the device you're testing} \
    --ttl-minutes {How to wait before moving the device back to it's original IoT hub}

提示

若要查找“应用程序 ID”,请导航到 IoT Central 应用程序中的“应用程序”>“管理”

如果命令成功,则会看到类似于以下示例的输出:

Command group 'iot central device' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "hubIdentifier": "6bd4...bafa",
  "message": "Success! This device is now being failed over. You can check your device'’'s status using 'iot central device registration-info' command. The device will revert to its original hub at Tue, 18 May 2021 11:03:45 GMT. You can choose to failback earlier using device-manual-failback command. Learn more: https://aka.ms/iotc-device-test"
}

若要详细了解 CLI 命令,请参阅 az iot central device manual-failover

现在,可以检查设备中的遥测数据是否仍能到达 IoT Central 应用程序。

提示

若要查看以各种编程语言处理故障转移的示例设备代码,请参阅 IoT Central 高可用性客户端

后续步骤

一些建议的后续步骤如下: