理解设备标识(Device Identity)
分类: Azure物联网 ◆ 标签: #Azure #IoT Hub # #指南 #入门 ◆ 发布于: 2023-06-13 22:40:56

在Azure IoT Hub
的设计中,针对设备和模块有一个概念是Identity
, 即设备或者模块的标识(Identity
), 在任何设备或者模块接入Azure IoT Hub
之前,必须先创建一个合法的Identity
, 它包含设备或者模块本身的一些基本信息:
- 设备或者模块的
ID
, 需要注意的是它是区分大小写的,因此TestDevice
和testdevice
代表的是两个设备标识。 - 设备或者模块的认证方式,例如是通过对称
key
还是证书。 - 设备或者模块认证的详细值,例如对称
Key
的值,证书的指纹。 - 设备或者模块的状态:这里的状态不是在线状态,而是指该设备或者模块是不是可用。
- 其他的一些基本信息,例如
Azure IoT Hub
自动生成的etags
或者generate id
等。
以上的这些标准信息也是存储在Azure IoT Hub
中,我们有一个标准的名称命名该存储:Identity registry
, 为了用户能够操作Identity Registry
, 支持下述操作:
- 创建
Identity
- 更新
Identity
- 根据设备
ID
取回Identity
信息 - 删除
Identity
- 取得最大1000个设备或者模块
Identity
: 注意是最大1000个,不是所有的。 - 导出所有的
Identity
到Azure Storage Blob
- 从
Azure Storage Blob
里导入所有的设备Identity
如上是Identity Registry
支持的所有的动作,用户可以通过Identity Registry
提供的rest API
或者Azure IoT Hub
提供的Service SDK
进行操作。
Identity
长什么样?
Identity
看上去是一个json
文档,如下是一个实例:
{ "id": "testdevice1", "eTag": "Nzk5NzE1NDQ5", "status": "enabled", "authentication": { "symmetricKey": { "primaryKey": "{Key value}", "secondaryKey": "{Key Value}" }, "x509Thumbprint": { "primaryThumbprint": null, "secondaryThumbprint": null }, "type": "sas" }, "twinETag": "AAAAAAAAAAM=", "tags": {}, "properties": { "desired": { "testvar1": "testvalue1", "testvar2": "testvalue2" }, "reported": { "testvar1": "testvalue1", "testvar2": "testvalue2" } }, "capabilities": { "iotEdge": false } }
需要注意的是在Identity
的数据中从twinETag
开始到结束都是是Device Twin
的数据,而这之前的才是Identity
数据。
根据官方的文档,一个Identity
可以有如下的一些字段:
id
: 指定设备或者模块的id
, 该id
区分大小写。eTag
: 由Azure IoT Hub
自动生成,对用户是只读的属性,另外需要注意的是,可以利用eTag
实现乐观锁。status
: 代表该设备或者模块的状态。authentication
: 代表该设备的认证方法
以上几项是一个设备或者模块Identity
必选的属性,还有一些其他的属性属于可选的项目:
capabilities
deviceScope
parentScope
connectionState
statusReason
statusUpdateTime
Identity registry
里记录的标识信息主要还是用于设备或者模块的接入,如果需要作为应用对设备或者模块赋予更多的数据能力,例如状态信息等等,Azure IoT Hub
还提供了另外一个概念Device Twin
, 我们下一节来学习它。
监控设备或者模块Identity
的变化
指当我们创建了新的Identity
或者删除了一个旧的Identity
, 关于这个部分我们可以采用如下的步骤来监控。
登录到
Azure Portal
, 找到IoT Hub
的资源,从左侧菜单里找到Event
, 如下图:
点击
+ Event Subscription
, 如下图,可以选择事件:
选择事件的输出
Endpoint
:
通过如上的步骤即可监控Identity
的变化。
导出所有的设备标识
根据我们之前的提示,通过代码列出最多1000个设备的标识,如果想全部导出自己的设备标识并备份,可以使用Service SDK
的方法直接导出设备的标识到Azure Storage Blob
。
我们可以快速的测试一下:
创建项目:
dotnet new console -o ExportAndImportIdentity
cd ExportAndImportIdentity
dotnet add package Microsoft.Azure.Devices
code .
使用VS Code
打开项目之后,编辑Program.cs
, 代码非常简单:
using Microsoft.Azure.Devices; RegistryManager registryManager = RegistryManager.CreateFromConnectionString( @"您的Azure IoT Hub连接字符串" ); JobProperties exportJob = await registryManager.ExportDevicesAsync( @"您的Azure Storage Blob的SAS Key连接字符串,记得要给予该字符串足够的权限(读写,list等等)", false ); while(true) { exportJob = await registryManager.GetJobAsync(exportJob.JobId); if (exportJob.Status == JobStatus.Completed || exportJob.Status == JobStatus.Failed || exportJob.Status == JobStatus.Cancelled) { // Job has finished executing break; } await Task.Delay(TimeSpan.FromSeconds(5)); }
运行该代码片段,即可在对应的Azure Storage Blob
里看到所有的设备标识导出结果。
下一节,我们来学习Device Twin
。