gpt4 book ai didi

azure - 如何更新 Azure DeviceTwin NESTED 所需属性? ( java )

转载 作者:行者123 更新时间:2023-12-03 02:35:19 25 4
gpt4 key购买 nike

我正在使用 com.microsoft.azure.sdk.iot:iot-service-client:1.16.0用于使用 Azure IoT 设备的库 (Java)。我正在尝试“更新”一些属性,但是它们是嵌套的,并且我在更新它们时遇到了问题。

我的 DeviceTwin Json 如下所示:

enter image description here

Azure 库附带 setDesiredProperties函数需要 HashSet<Pair>作为其论点。因此,我可以轻松更新“firmwareVersionToDownload”、“serverConfigurationVersion”或“webContentDataType”键,因为它们是顶级实体,如下所示(如上图所示):

myIotDeviceObjectInJava.setDesiredProperties(new HashSet<Pair>() {{
add(new Pair("myKey", "myNewValueForKey"));
}});

我需要将键“object1”和“object2”的值设置为“null”,但它们的深度为 2/3。谁能帮我做到这一点?

我尝试使用其他嵌套的 HashSet 创建一个新的 HashSet,直到达到级别(第三),然后传入一个新的 Pair("object1","null") 对象以设置为 null,但最终结果是只是删除我的整个"serverConfiguration"代码块(下面的示例):

updateProperties(new HashSet<Pair>() {{
add(new Pair("serverConfiguration", new HashSet<Pair>() {{
add(new Pair("nestedIpData1",new HashSet<Pair>() {{
add(new Pair("object1","null"));
}}));
}}));
}}
);

我是否需要迭代顶级对象并获取 serverConfiguration 的值对象然后以某种方式设置它?

最佳答案

我继续尝试使用示例 Get started with device twins (Java) 自己做。在服务应用程序中进行一些调整。

注意:我使用了com.microsoft.azure.sdk.iot:iot-service-client:1.25.0

为了了解使用嵌套 Json 对象读取所需属性时返回的对象类型,我首先直接在 Azure 门户中编辑孪生,然后调试代码以检查对象的类型:

DeviceTwin twinClient = DeviceTwin.createFromConnectionString(iotHubConnectionString);
DeviceTwinDevice device = new DeviceTwinDevice(deviceId);
Set<Pair> currentDesired = device.getDesiredProperties();

enter image description here

您可以注意到“ServerConfiguration”和“Object3”值的类型为 TwinCollection(查看 TwinCollection.java 代码注释以更好地理解它)

因此,为了将 object1 和 object 2 设置为 null :

        TwinCollection nestedIpData1 = new TwinCollection();
TwinCollection object1 = new TwinCollection();
TwinCollection object2 = new TwinCollection();
TwinCollection object3 = new TwinCollection();

object1.putFinal("hostname", "my.host.name1");
object1.putFinal("netmask", "1.1.1.1");
object1.putFinal("ip", "1.1.1.1");
object1.putFinal("cloudIp", "1.1.1.1");
object1.putFinal("gateway", "1.1.1.1");

object2.putFinal("hostname", "my.host.name2");
object2.putFinal("netmask", "2.2.2.2");
object2.putFinal("ip", "2.2.2.2");
object2.putFinal("cloudIp", "2.2.2.2");
object2.putFinal("gateway", "2.2.2.2");

object3.putFinal("hostname", "my.host.name3");
object3.putFinal("netmask", "3.3.3.3");
object3.putFinal("ip", "3.3.3.3");
object3.putFinal("cloudIp", "3.3.3.3");
object3.putFinal("gateway", "3.3.3.3");

nestedIpData1.putFinal("object1", null);
nestedIpData1.putFinal("object2", null);
nestedIpData1.putFinal("object3", object3);

Set<Pair> desiredProperties = new HashSet<Pair>();
desiredProperties.add(new Pair("serverConfiguration", nestedIpData1));

device.setDesiredProperties(desiredProperties);

// Update the device twin in IoT Hub
System.out.println("Updating device twin with nestedobject");
twinClient.updateTwin(device);

关于azure - 如何更新 Azure DeviceTwin NESTED 所需属性? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63385093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com