GetTwinAsync() 未完全返回设备孪生

Device Twin not fully returned with GetTwinAsync()

我正在使用适用于 .NET Core 的 Azure IoT 设备客户端 SDK(1.17.0-preview-001,但也尝试过 1.7.0-stable)。调用 deviceClient.GetTwinAsync() 时,所有字段都是 NULL,除了 Properties(Desired 和 Reported 都在那里):

至少像 DeviceId 这样的东西我希望在那里。此外,当我在 DeviceTwin 中添加任何标签时,这些标签不会影响到设备。

这是一个错误还是我遗漏了什么?

您可以使用 Microsoft.Azure.Devices 获取设备 twin.It 是 Azure IoT 中心的服务客户端 SDK。

dynamic registryManager = RegistryManager.CreateFromConnectionString("{connectionString}");
var deviceTwin = await registryManager.GetTwinAsync("{device name}");

在这个article中,也许您会对 Azure IoT SDK 有更多的了解。

  • Device SDKs enable you to build apps that run on your IoT devices. These apps send telemetry to your IoT hub, and optionally receive messages from your IoT hub.
  • Service SDKs enable you to manage your IoT hub, and optionally send messages to your IoT devices.

标签属性(期望、报告)和元数据组成的设备孪生.而我们只能从device app中查询properties,如下图作为文档stated

您也可以参考Azure IoT hub endpoints Azure IoT hub 的具体操作支持如下图:

设备孪生管理。每个 IoT 中心公开一组 service-facing HTTPS REST 端点 以查询和更新设备孪生(更新标签和属性)。

这种行为也很容易通过使用 Fiddler 跟踪原始数据来验证。例如,这是一个通过 MQTTBOX 使用 MQTT 协议从 Azure IoT Hub 获取设备孪生的查询:

据我了解,设备应用很少需要该信息。您可以考虑从 service-endpoint 而不是客户端应用程序管理设备孪生。如果您确实有这种特殊情况,可以提交Azure IoT - UserVoice的反馈。