MicrosoftAzureGlobalEdition技术文档网站访问Microsoft中国技术网站
您当前正在访问 Microsoft Azure 全球版技术文档网站。如需访问21Vianet运营的微软Azure中国技术文档网站,请访问。
了解和使用 IoT 中心的设备配对
设备孪生是存储设备状态信息(例如元数据、配置和条件)的 JSON 文档。Azure IoT 中心为连接到 IoT 中心的每个设备维护一个设备孪生。
注意
本文中描述的功能仅在 IoT 中心的标准层中可用。有关 IoT 中心基本层和标准/免费层的详细信息,请参阅选择正确的 IoT 中心层。
本文介绍:
使用设备配对来:
有关使用报告属性、设备到云消息或文件上传的指南,请参阅设备到云通信指南。
有关使用所需属性、直接方法或云到设备消息的指南,请参阅云到设备通信指南。
若要了解设备孪生与 Azure IoT 即插即用设备使用的设备模型之间的关系,请参阅了解 IoT 即插即用数字孪生。
设备孪生
设备孪生出于以下目的存储设备相关信息:
设备孪生的生命周期与相应的设备标识相关联。在 IoT 中心创建或删除设备标识时,会隐式创建和删除设备孪生。
设备孪生是一个 JSON 文档,其中包含:
以下示例显示了一个设备孪生 JSON 文档:
{
"deviceId": "devA",
"etag": "AAAAAAAAAAc=",
"status": "enabled",
"statusReason": "provisioned",
"statusUpdateTime": "0001-01-01T00:00:00",
"connectionState": "connected",
"lastActivityTime": "2015-02-30T16:24:48.789Z",
"cloudToDeviceMessageCount": 0,
"authenticationType": "sas",
"x509Thumbprint": {
"primaryThumbprint": null,
"secondaryThumbprint": null
},
"version": 2,
"tags": {
"deploymentLocation": {
"building": "43",
"floor": "1"
}
},
"properties": {
"desired": {
"telemetryConfig": {
"sendFrequency": "5m"
},
"$metadata" : {...},
"$version": 1
},
"reported": {
"telemetryConfig": {
"sendFrequency": "5m",
"status": "success"
},
"batteryLevel": 55,
"$metadata" : {...},
"$version": 4
}
}
}
根对象包含设备标识属性,以及标签、报告和所需属性的容器对象。该容器包含并部分描述了一些只读元素($metadata 和 $version)。
报告属性示例
在上面的示例中,设备孪生包含设备应用报告的属性。使用此属性可根据上次报告的电池电量查询和操作设备。其他示例包括让设备应用程序报告设备功能或连接选项。
注意
报告的属性如何简化解决方案后端获取属性的最后一个已知值的场景。当解决方案后端需要以时间戳事件序列(例如时间序列)的形式处理设备遥测数据时,可以使用设备到云消息。
所需属性的示例
在上面的示例中,解决方案后端和设备应用程序使用设备孪生的所需属性和报告属性来同步此设备的遥测配置。例如:
解决方案后端使用所需的配置值设置所需的属性。以下是包含所需属性集的文档的一部分:
"desired": {
"telemetryConfig": {
"sendFrequency": "5m"
},
...
},
设备连接后,设备应用程序会立即收到更改通知。如果设备未连接,则设备应用程序将在连接时跟随。然后设备应用程序报告更新的配置(或使用 status 属性报告错误状态)。以下是报告属性的一部分:
"reported": {
"telemetryConfig": {
"sendFrequency": "5m",
"status": "success"
}
...
}
解决方案后端可以通过查询设备孪生来跟踪多个设备上的配置操作结果。
注意
上面的代码片段示例已针对可读性进行了优化,并演示了一种对设备配置及其状态进行编码的方法。IoT 中心不会对设备孪生中的所需属性和报告属性强加特定架构。
重要的
IoT Plug and Play 定义了一种体系结构,该体系结构使用几个附加属性来同步对所需属性和报告属性的更改。如果解决方案使用 IoT 即插即用,则更新孪生属性时必须遵循即插即用约定。有关详细信息和示例,请参阅。
孪生可用于同步长时间运行的操作,例如固件更新。有关如何使用属性跨设备同步和跟踪长时间运行的操作的更多信息,请参阅使用所需属性配置设备。
后端操作
解决方案后端使用通过 HTTPS 公开的以下原子操作对设备孪生执行操作:
以上所有操作均受支持,并且需要控制对 IoT 中心的访问中定义的权限。
除了上述之外,解决方案后端还可以:
设备操作
设备应用程序使用以下原子操作对设备孪生执行操作:
上述所有操作都需要控制对 IoT 中心的访问中定义的权限。
借助 Azure IoT Device SDK,可以轻松实现多语言多平台的上述操作。有关用于同步所需属性的 IoT 中心原语的详细信息,请参阅 。
标记和属性格式
标签、必需的属性和报告的属性是具有以下限制的 JSON 对象:
深度:标签、所需属性和报告属性中 JSON 对象的最大深度为 10 级。例如数字孪生设备,以下对象是有效的:
{
...
"tags": {
"one": {
"two": {
"three": {
"four": {
"five": {
"six": {
"seven": {
"eight": {
"nine": {
"ten": {
"property": "value"
}
}
}
}
}
}
}
}
}
}
},
...
}
设备孪生的大小
IoT 中心分别对标记值实施 8 KB 大小限制,对 /desired 和 /reported 值实施 32 KB 大小限制。这些总数不包括只读元素,例如 $version 和 $metadata/$。
双胞胎尺寸计算如下:
IoT 中心拒绝任何将增加标签、/desired 或 /reported 文档的大小超出限制的操作并返回错误。
设备孪生元数据
IoT 中心将每个 JSON 对象的最后更新时间戳保存在设备孪生所需属性和报告属性中。时间戳采用 UTC,以 ISO8601 格式 YYYY-MM-DDTHH:MM:SS.mmmZ 编码。
例如:
{
...
"properties": {
"desired": {
"telemetryConfig": {
"sendFrequency": "5m"
},
"$metadata": {
"telemetryConfig": {
"sendFrequency": {
"$lastUpdated": "2016-03-30T16:24:48.789Z"
},
"$lastUpdated": "2016-03-30T16:24:48.789Z"
},
"$lastUpdated": "2016-03-30T16:24:48.789Z"
},
"$version": 23
},
"reported": {
"telemetryConfig": {
"sendFrequency": "5m",
"status": "success"
},
"batteryLevel": "55%",
"$metadata": {
"telemetryConfig": {
"sendFrequency": {
"$lastUpdated": "2016-03-31T16:35:48.789Z"
},
"status": {
"$lastUpdated": "2016-03-31T16:35:48.789Z"
},
"$lastUpdated": "2016-03-31T16:35:48.789Z"
},
"batteryLevel": {
"$lastUpdated": "2016-04-01T16:35:48.789Z"
},
"$lastUpdated": "2016-04-01T16:24:48.789Z"
},
"$version": 123
}
}
...
}
此信息在每个级别进行维护,而不仅仅是在 JSON 结构的叶级别,以便保留删除对象键的更新。
乐观并发
标志、必需属性和报告属性都支持乐观并发。如果需要保证孪生属性更新的顺序数字孪生设备,可以考虑在应用层实现同步,等待上报属性回调后再发送下一次更新。
根据 RFC7232数字孪生设备VR开发,设备孪生具有 ETag(etag 属性),它代表孪生的 JSON 表示。etag 属性可用于解决方案后端的条件更新操作,以确保一致性。如果您想确保涉及标签容器的操作的一致性,这是唯一的解决方案。
设备孪生的必需和报告属性还包含保证的可递增 $version 值。更新程序可以使用类似于 ETag 的版本来强制更新一致性。例如,报告属性的设备应用程序或所需属性的解决方案后端。
当监控代理(例如数字孪生设备,监控所需属性的设备应用程序)必须协调检索操作结果和更新通知之间的资源争用时,版本也很有用。部分提供详细信息。
设备重新连接流程
IoT 中心不会保留断开设备所需属性更新的通知。它遵循的原则是,除了订阅更新通知外,连接的设备还必须检索整个所需的属性文档。如果更新通知和完全检索之间存在资源争用的可能性数字孪生,则必须确保遵循以下流程:
设备应用程序连接到 IoT 中心。设备应用程序订阅所需属性更新的通知。设备应用程序检索所需属性的完整文档。
设备应用程序可以忽略 $version 小于或等于完全检索到的文档版本的所有通知。这种方法是可行的,因为 IoT 中心保证版本始终递增。
其他参考
IoT 中心开发人员指南中的其他参考主题包括:
下一步
了解设备配对后,您可以参考以下感兴趣的 IoT 中心开发人员指南主题:
若要尝试本文中介绍的一些概念,请参阅以下 IoT 中心教程: