你当前正在访问 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 即插即用约定的支持。

设备型号

设备模型是使用 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 Central 可能会更新其底层 IoT 中心。 若要保持连接性,设备代码应通过建立与新 IoT 中心终结点的连接来处理特定连接错误。

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

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

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

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

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

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

测试故障转移功能

通过 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 高可用性客户端

后续步骤

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