你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:在 Azure IoT Central 应用程序中定义新的 IoT 网关设备类型
在本教程中,你将创建一个“智能建筑物”网关设备模板。 “智能建筑物”网关设备与其他下游设备发生关系。
网关设备还可以:
- 发送自身的遥测数据,例如温度。
- 响应操作员做出的可写属性更新。 例如,操作员可能会更改遥测数据的发送间隔。
- 响应命令,例如重新启动设备。
在本教程中,你将了解:
- 创建下游设备模板
- 创建网关设备模板
- 发布设备模板
- 创建模拟设备
先决条件
完成本教程中的步骤需要具备以下各项:
一个有效的 Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
根据自定义应用程序模板创建的 IoT Central 应用程序。 若要了解详细信息,请参阅创建 IoT Central 应用程序和关于你的应用程序。
创建下游设备模板
本教程使用“Onset Hobo MX-100 温度传感器”设备和“RS40 占位传感器”设备的设备模板来生成模拟的下游设备。
若要创建“Onset Hobo MX-100 温度传感器”设备的设备模板,请执行以下操作:
在左窗格中选择“设备模板” 。 然后选择“+新建”,开始添加模板。
向下滚动,直到看到“Onset Hobo MX-100 温度传感器”设备的磁贴。 选择该磁贴,然后选择“下一步: 复查”。
在“复查”页上,选择“创建”将该设备模板添加到应用程序。
若要创建“RS40 占位传感器”设备的设备模板:
在左窗格中选择“设备模板” 。 然后选择“+新建”,开始添加模板。
向下滚动,直到看到“Rigado RS40 占位传感器”设备的磁贴。 选择该磁贴,然后选择“下一步: 复查”。
在“复查”页上,选择“创建”将该设备模板添加到应用程序。
现已创建两个下游设备类型的设备模板:
创建网关设备模板
在本教程中,你将从头开始创建网关设备的设备模板。 稍后将使用此模板在应用程序中创建模拟的网关设备。
若要将新的网关设备模板添加到应用程序:
在左窗格中选择“设备模板” 。 然后选择“+新建”,开始添加模板。
在“选择模板类型”页上选择“IoT 设备”磁贴,然后选择“下一步: 自定义”。
在“自定义设备”页面上,选中“这是网关设备”复选框 。
输入“智能建筑物网关设备”作为模板名称,然后选择“下一步: 查看” 。
在“查看”页上,选择“创建” 。
在“创建模型”页面上,选择“自定义模型”磁贴 。
选择“+添加功能”,添加一个功能。
输入“发送数据”作为显示名称,然后选择“属性”作为功能类型 。
选择“布尔”作为架构类型,将“可写入”设置为开启,然后选择“保存”。
添加关系
接下来,将关系添加到下游设备模板中:
在“智能建筑物网关设备”模板中,选择“关系”。
选择“+ 添加关系”。 输入“环境传感器”作为显示名称,选择“Hobo MX-100”作为目标。
再次选择“+ 添加关系”。 输入“占位传感器”作为显示名称,选择“RS40 占位传感器”作为目标。
选择“保存”。
添加云属性
网关设备模板可以包含云属性。 云属性仅存在于 IoT Central 应用程序中,永远不会与设备相互发送和接收信息。
若要将云属性添加到“智能建筑物网关设备”模板:
在“智能建筑网关设备”模板中,选择“智能建筑网关设备”模型。
使用下表中的信息将两个云属性添加到网关设备模板。
显示名称 功能类型 语义类型 架构 最后维修日期 云属性 无 日期 客户名称 云属性 无 字符串 选择“保存”。
创建视图
构建人员可将应用程序自定义为向操作员显示有关环境传感器设备的信息。 完成自定义后,操作员可以管理连接到应用程序的环境传感器设备。 可为操作员创建两种类型的视图来让他们与设备交互:
- 用于查看和编辑设备与云属性的窗体。
- 用于可视化设备的视图。
若要为“智能建筑物网关设备”模板生成默认视图:
在“智能建筑物网关设备”模板中,选择“视图”。
选择“生成默认视图”磁贴,并确保选择所有选项。
选择“生成默认仪表板视图”。
发布设备模板
需要先发布设备模板,然后才能创建模拟的网关设备或连接真实的网关设备。
若要发布网关设备模板:
在“设备模板”页中选择“智能建筑物网关设备”模板。
选择“发布” 。
在“发布设备模板”对话框中,选择“发布” 。
发布设备模板后,它将显示在“设备”页上,操作员可以看到它。 操作员可以使用模板创建设备实例或建立规则和监视。 编辑已发布的模板可能会影响整个应用程序中的行为。
若要详细了解在发布设备模板后如何对其进行修改,请参阅编辑现有设备模板。
创建模拟设备
本教程使用模拟的下游设备和模拟的网关设备。
若要创建模拟的网关设备:
在“设备”页上的设备模板列表中,选择“智能建筑物网关设备”。
选择“+新建”,开始添加新设备。
保留生成的“设备 ID”和“设备名称”。 确保“模拟”切换开关为“是”。 选择“创建” 。
若要创建模拟的下游设备:
在“设备”页上的设备模板列表中,选择“RS40 占位传感器”。
选择“+新建”,开始添加新设备。
保留生成的“设备 ID”和“设备名称”。 确保“模拟”切换开关为“是”。 选择创建。
在“设备”页上的设备模板列表中,选择“Hobo MX-100”。
选择“+新建”,开始添加新设备。
保留生成的“设备 ID”和“设备名称”。 确保“模拟”切换开关为“是”。 选择“创建” 。
将下游设备关系添加到网关设备
在应用程序中创建模拟设备后,接下来可以在下游设备与网关设备之间创建关系:
在“设备”页上的设备模板列表中选择“Hobo MX-100”,然后选择模拟的“Hobo MX-100”设备。
选择“附加到网关”。
在“附加到网关”对话框中,选择“智能建筑物网关设备”模板,然后选择之前创建的模拟实例 。
选择“附加”。
在“设备”页上的设备模板列表中选择“RS40 占位传感器”,然后选择模拟的“RS40 占位传感器”设备。
选择“附加到网关”。
在“附加到网关”对话框中,选择“智能建筑物网关设备”模板,然后选择之前创建的模拟实例 。
选择“附加”。
这两个模拟的下游设备现在都已连接到模拟的网关设备。 如果导航到网关设备的“下游设备”视图,可以看到相关的下游设备:
连接真实的下游设备
在创建客户端应用程序并将其连接到 Azure IoT Central 应用程序教程中,示例代码将演示如何在设备发送的预配有效负载中包含设备模板中的模型 ID。
连接下游设备时,你可以修改预配有效负载,使其包含网关设备的 ID。 模型 ID 允许 IoT Central 将设备分配到正确的下游设备模板。 网关 ID 允许 IoT Central 在下游设备及其网关之间建立关系。 在这种情况下,设备发送的预配有效负载类似于以下 JSON:
{
"modelId": "dtmi:rigado:HoboMX100;2",
"iotcGateway":{
"iotcGatewayId": "gateway-device-001"
}
}
网关可以注册和预配下游设备,并将下游设备与网关关联,如下所示:
var crypto = require('crypto');
var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
var SymmetricKeySecurityClient = require('azure-iot-security-symmetric-key').SymmetricKeySecurityClient;
var ProvisioningDeviceClient = require('azure-iot-provisioning-device').ProvisioningDeviceClient;
var provisioningHost = "global.azure-devices-provisioning.net";
var idScope = "<The ID scope from your SAS group enrollment in IoT Central>";
var groupSymmetricKey = "<The primary key from the SAS group enrollment>";
var registrationId = "<The device ID for the downstream device you're creating>";
var modelId = "<The model you're downstream device should use>";
var gatewayId = "<The device ID of your gateway device>";
// Calculate the device key from the group enrollment key
function computeDerivedSymmetricKey(deviceId, masterKey) {
return crypto.createHmac('SHA256', Buffer.from(masterKey, 'base64'))
.update(deviceId, 'utf8')
.digest('base64');
}
var symmetricKey = computeDerivedSymmetricKey(registrationId, groupSymmetricKey);
var provisioningSecurityClient = new SymmetricKeySecurityClient(registrationId, symmetricKey);
var provisioningClient = ProvisioningDeviceClient.create(provisioningHost, idScope, new ProvisioningTransport(), provisioningSecurityClient);
// Use the DPS payload to:
// - specify the device capability model to use.
// - associate the device with a gateway.
var provisioningPayload = {modelId: modelId, iotcGateway: { iotcGatewayId: gatewayId}}
provisioningClient.setProvisioningPayload(provisioningPayload);
provisioningClient.register(function(err, result) {
if (err) {
console.log("Error registering device: " + err);
} else {
console.log('The registration status is: ' + result.status)
}
});
清理资源
如果不打算完成更多 IoT Central 快速入门或教程,则可删除 IoT Central 应用程序:
- 在 IoT Central 应用程序中,导航到“应用程序”“管理”。
- 选择“删除”,然后确认操作。
下一步
接下来,你可以学习如何执行以下操作:
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈