IoT Central - State values error: Another instance with the same id already exists

IoT Central - State values error: Another instance with the same id already exists

我就是不明白。

如果我要定义一个状态,我必须能够多次引用一个值,对吗?

传感器值为占用,值为 0(空闲)或 1(占用)。所以我有 2 个状态,但我只能在 Name it once 中使用 "occupancy" ...

此致, 马蒂亚斯

enter image description here

为了更好地理解,我们将状态 属性(例如报告的设备孪生 属性)称为 Occupancy

以下屏幕片段显示了它的声明,其中占用状态 属性 有两个状态,例如 空闲已占用(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 数组中的名称必须是唯一的,这就是您在使用相同的枚举名称时出现错误的原因。

请注意,设备可以在空闲 (0) 和已占用 (1) 等值之间更改占用 属性 的状态。

出于测试目的,可以使用 Azure IoT Hub Tester,请参见以下屏幕片段:

以下屏幕片段显示了在连接到 IoTC 应用程序的 PnP 设备(传感器 3)上报告的 属性 占用状态的更改:

发布占用状态:

获取设备孪生属性:

Occupancy 状态 属性:

的 IoTC 应用仪表板

如您所见,about 状态的值为 Free。