我只是不明白。
如果我想定义一个状态,我必须能够多次引用一个值,对吧?
传感器值为占用,值为 0(空闲)或 1(占用)。所以我有2个状态,但我只能在名称中使用“占用”一次......
问候, 马蒂亚斯
我只是不明白。
如果我想定义一个状态,我必须能够多次引用一个值,对吧?
传感器值为占用,值为 0(空闲)或 1(占用)。所以我有2个状态,但我只能在名称中使用“占用”一次......
问候, 马蒂亚斯
为了更好地理解,我们将 State 属性(例如设备孪生报告的属性)称为Occupancy。
以下屏幕片段显示了它的声明,其中 Occupancy 状态属性有两个状态,例如Free和Occupied(Occupancy.Free 和 Occupancy.Occupied):
及其在能力模型的接口实例中的声明(在我的示例中):
{
"@id": "urn:rigado:interfaces:S1_Sensor:Occupancy:3",
"@type": [
"Property",
"SemanticType/State"
],
"displayName": {
"en": "Occupancy"
},
"name": "Occupancy",
"schema": {
"@id": "urn:rigado:interfaces:S1_Sensor:Occupancy:xkuwdf9p:3",
"@type": "Enum",
"valueSchema": "integer",
"enumValues": [
{
"@id": "urn:rigado:interfaces:S1_Sensor:Occupancy:xkuwdf9p:Free:3",
"@type": "EnumValue",
"displayName": {
"en": "Free"
},
"enumValue": 0,
"name": "Free"
},
{
"@id": "urn:rigado:interfaces:S1_Sensor:Occupancy:xkuwdf9p:Occupied:3",
"@type": "EnumValue",
"displayName": {
"en": "Occupied"
},
"enumValue": 1,
"name": "Occupied"
}
]
}
}
正如您在上面的架构中看到的, enumValues 数组中的名称必须是唯一的,这就是当您使用相同的枚举名称时出现错误的原因。
请注意,设备可以在 Free (0) 和 Occupied (1) 等值之间更改 Occupancy 属性的状态。
出于测试目的,可以使用Azure IoT Hub Tester,请参阅以下屏幕片段:
以下屏幕片段显示更改连接到 IoTC 应用程序的 PnP 设备 (sensor3) 上的占用报告属性中的状态:
发布占用状态:
获取设备孪生属性:
和 IoTC App Dashboard for Occupancy State 属性:
如您所见,about 状态的值是 Free。