azure-iot-hub - 如果那里已经有不同的记录,则用于报告孪生属性的 Azure IoT 设备更新会失败

标签 azure-iot-hub azure-iot-sdk azure-iot-hub-device-management

我有一个物联网板,它托管一个应用程序,并报告了一组属性。然后我将一个新的应用程序加载到该板上。现在,孪生属性更新失败并出现 400 错误。以下是先前应用程序的现有属性:

{
  "deviceId": "xxxxxx",
  "etag": "AAAAAAAAABI=",
  "deviceEtag": "ODkzNzc0Mjcx",
  "status": "enabled",
  "statusUpdateTime": "0001-01-01T00:00:00",
  "connectionState": "Connected",
  "lastActivityTime": "2019-07-25T14:49:57.9764857",
  "cloudToDeviceMessageCount": 0,
  "authenticationType": "sas",
  "x509Thumbprint": {
    "primaryThumbprint": null,
    "secondaryThumbprint": null
  },
  "version": 34,
  "properties": {
    "desired": {
      "pmt_mqttMon_sec": 120,
      "sup_badBootLimit": 5,
      "sup_badBootTimeout_sec": 1200,
      "sup_enabled": 1,
      "pmt_enabled": 1,
      "pub_enabled": 1,
      "pub_mqttMaxLen": 2500,
      "pub_maxWriteFails": 3,
      "ping_period": 60,
      "ping_state": 3,
      "storage_enabled": 1,
      "sys_pollPeriod_sec": 60,
      "sys_type": "2",
      "sys_numBatt": 0,
      "gen_manualControl": 0,
      "sys_rectStopChargeSoc_pct": "",
      "sys_genStartSoc_pct": 62.5,
      "sys_genStartVoltage_V": 44.5,
      "sys_rectFloatHigh_V": 57.7,
      "sys_rectFloatLow_V": 53.7,
      "sys_modbusBaudRate": "19200",
      "rlogger_level": 1,
      "$metadata": {
        "$lastUpdated": "2019-07-24T23:31:35.4433452Z",
        "$lastUpdatedVersion": 18,
        "pmt_mqttMon_sec": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sup_badBootLimit": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sup_badBootTimeout_sec": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sup_enabled": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "pmt_enabled": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "pub_enabled": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "pub_mqttMaxLen": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "pub_maxWriteFails": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "ping_period": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "ping_state": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "storage_enabled": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_pollPeriod_sec": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_type": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_numBatt": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "gen_manualControl": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_rectStopChargeSoc_pct": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_genStartSoc_pct": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_genStartVoltage_V": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_rectFloatHigh_V": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_rectFloatLow_V": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        },
        "sys_modbusBaudRate": {
          "$lastUpdated": "2019-07-24T23:31:35.4433452Z",
          "$lastUpdatedVersion": 18
        },
        "rlogger_level": {
          "$lastUpdated": "2019-07-24T23:22:14.8853676Z",
          "$lastUpdatedVersion": 17
        }
      },
      "$version": 18
    },
    "reported": {
      "sup_badBootLimit": 5,
      "sup_badBootTimeout_sec": 1200,
      "sup_enabled": 1,
      "rlogger_level": 1,
      "storage_enabled": 1,
      "pmt_enabled": 1,
      "pmt_mqttMon_sec": 180,
      "pub_enabled": 1,
      "pub_mqttMaxLen": 2500,
      "pub_maxWriteFails": 3,
      "ping_period": 60,
      "ping_state": 3,
      "sys_pollPeriod_sec": 60,
      "sys_type": 0,
      "sys_numBatt": 0,
      "gen_type": 1,
      "gen_manualControl": 0,
      "sys_rectStopChargeSoc_pct": 85,
      "sys_genStartSoc_pct": 62.5,
      "sys_genStartVoltage_V": 44.5,
      "sys_rectFloatHigh_V": 57.7,
      "sys_rectFloatLow_V": 53.7,
      "sys_modbusBaudRate": 9600,
      "sys_devices": "[{\"class\":\"ncu\",\"devId\":0,\"mbid\":1,\"ipAddr\":\"\",\"regOff\":0}]",
      "": "[{\"class\":\"ncu\",\"devId\":0,\"mbid\":1,\"ipAddr\":\"\",\"regOff\":0}]",
      "$metadata": {
        "$lastUpdated": "2019-04-25T00:13:19.9436642Z",
        "sup_badBootLimit": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sup_badBootTimeout_sec": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sup_enabled": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "rlogger_level": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "storage_enabled": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "pmt_enabled": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "pmt_mqttMon_sec": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "pub_enabled": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "pub_mqttMaxLen": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "pub_maxWriteFails": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "ping_period": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "ping_state": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_pollPeriod_sec": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_type": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_numBatt": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "gen_type": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "gen_manualControl": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_rectStopChargeSoc_pct": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_genStartSoc_pct": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_genStartVoltage_V": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_rectFloatHigh_V": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_rectFloatLow_V": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_modbusBaudRate": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "sys_devices": {
          "$lastUpdated": "2019-04-24T23:15:31.2402457Z"
        },
        "": {
          "$lastUpdated": "2019-04-25T00:13:19.9436642Z"
        }
      },
      "$version": 16
    }
  },
  "capabilities": {
    "iotEdge": false
  }
}

设备然后尝试通过此 JSON 更新报告的值:

{
    "sup_badBootLimit": 5,
    "sup_badBootReset_s": 1200,
    "sup_enabled": 1,
    "rlogger_level": 1,
    "storage_enabled": 1,
    "pmt_enabled": 1,
    "pmt_mqttMon_sec": 120,
    "pub_enabled": 1,
    "pub_mqttMaxLen": 2500,
    "pub_maxWriteFails": 3,
    "ping_period": 60,
    "ping_state": 3,
    "sys_modbusBaudRate": 19200,
    "sys_readSensors": 0,
    "sys_pollPeriod_sec": 60,
    "sys_type": 2,
    "sys_devices": "[{\"class\":\"gridmeter\",\"deviceId\":0,\"modbusId\":6,\"ipAddress\":\"\",\"regOff\":0},{\"class\":\"gridmeter\",\"deviceId\":1,\"modbusId\":5,\"ipAddress\":\"\",\"regOff\":0},{\"class\":\"sun2k\",\"deviceId\":0,\"modbusId\":7,\"ipAddress\":\"\",\"regOff\":0}]",
    "sys_limit_power_padding_W": 100,
    "controller_loop_sec": 10
}

但这会失败,并显示错误代码 400,根据某些注释,该代码表明属性名称无效。当我在没有现有孪生记录的新设备上加载应用程序时,一切正常。

我想到了几个问题:

  1. 如何在不取消注册并重新注册设备的情况下完全清除孪生记录?在节点 SDK 中,我只看到更新所需属性的方法。
  2. 我可以通过将属性的值设置为 null 来从所需的集合中删除该属性。但是,如果新的设备上应用程序不知道以前的应用程序使用了哪些属性,那么它如何删除这些属性呢?有没有办法清除所有报告的属性?
  3. 由于某种原因,报告的属性之一似乎有一个空字符串作为键(我认为这应该是一个无效的键)。我想知道这是否是导致问题的原因。

最佳答案

可以通过 ImportDevices 从服务端更新设备孪生属性(例如标签、所需和报告)批量作业。您可以使用 SDK 或 REST API

以下行显示了在导入文件中更新 Device23 上的设备孪生的示例:

{"id":"Device23", "importMode":"updateTwin", "status":"enabled", "tags":{},"properties":{"desired":{ "key1":123},"reported":{ "key2":null, "key3":"abcd"  } },"capabilities":{"iotEdge":false}}

如果报告的属性名称错误,我建议删除该设备并使用相同的身份验证 key 和正确的设备孪生属性导入回来。

关于azure-iot-hub - 如果那里已经有不同的记录,则用于报告孪生属性的 Azure IoT 设备更新会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57205139/

相关文章:

c++ - 5_4-2016q3\bin\arm-none-eabi-g++ 未找到 - Windows 10

azure - 使用 azure python/java sdk 在 IoT 中心创建 azure IoT 设备

c - 如何在Raspberry Pi上运行Azure IoT C SDK的端到端测试?

Azure IOT 中心预配错误 : AMQP transport exception IotHubUnauthorizedAccess 401002

azure - Terraform 创建 Azure IoT 设备配置服务注册组

Azure Iothub 的事件中心兼容连接字符串

azure-iot-hub - 如何使用流分析检测 IoT 中心设备中是否没有摄取数据?

c - 如何将MPU6050设备数据发送到IoT Hub

python - 如何在Python中获取从IoT Hub发送到设备的消息的(反馈)确认?

c# - 如何获取云到设备的待处理消息计数