首页 > 解决方案 > IoT Central - 状态值错误:已存在具有相同 ID 的另一个实例

问题描述

我只是不明白。

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

传感器值为占用,值为 0(空闲)或 1(占用)。所以我有2个状态,但我只能在名称中使用“占用”一次......

问候, 马蒂亚斯

在此处输入图像描述

标签: azure-iot-central

解决方案


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

以下屏幕片段显示了它的声明,其中 Occupancy 状态属性有两个状态,例如FreeOccupied(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。


推荐阅读