使用GetTwinAsync()未完全返回Device Twin

时间:2018-03-21 13:02:19

标签: c# .net-core azure-iot-hub azure-iot-sdk

我正在使用适用于.NET Core的Azure IoT设备客户端SDK(1.17.0-preview-001,但也试过1.7.0-stable)。致电deviceClient.GetTwinAsync()时,所有字段均为NULL,但Properties除外(需要以及已报告): enter image description here

至少像DeviceId这样的东西我希望能在那里。此外,当我在DeviceTwin中添加任何标签时,这些标签都没有到达设备。

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

2 个答案:

答案 0 :(得分:1)

设备双胞胎由标签属性(所需,已报告)和元数据组成。我们只能查询设备应用中的属性,如下图所示为文档statedenter image description here

您还可以参考Azure IoT hub endpoints获取Azure IoT中心的特定操作支持,如下图所示:

enter image description here

设备双重管理 。每个物联网中心都会公开一组面向服务的HTTPS REST端点,以查询和更新设备双胞胎(更新标签和属性)。

使用Fiddler跟踪原始数据也很容易验证此行为。例如,以下是通过MQTTBOX使用MQTT协议从Azure IoT Hub获取设备twin的查询: enter image description here

根据我的理解,设备应用很少需要这些信息。您可以考虑从服务端点而不是客户端应用程序管理设备双胞胎。如果您确实有这种特殊情况,可以从Azure IoT - UserVoice提交反馈。

答案 1 :(得分:-1)

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

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

在这个article中,您可能会对Azure IoT SDK有更多了解。

  
      
  • 设备SDK 可让您构建在IoT设备上运行的应用。这些应用程序将遥测发送到您的IoT中心,并可选择从您的IoT中心接收消息。
  •   
  • 服务SDK 使您可以管理您的IoT中心,并可选择向您的IoT设备发送消息。
  •