azure 设备双属性更改后,IoTHub自动配置正在重新应用

khbbv19g  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(87)

我有一个带有目标条件的自动配置:'*',它正确地应用和更新所需的属性在双胞胎。
当我更新双设备中的一些属性时,这些属性不存在于自动配置中,我有下一个流程:

  • 属性在twin中更新
  • 设备接收所需的属性更新事件(包含所有属性)
  • (几分钟后)设备再次接收到所需的属性更新事件(仅包含自动配置中的 prop )

我在最后一步之后检查了双胞胎配置,属性值没有改变,但是版本增加了,并且在元数据中添加了$lastUpdatedBy属性,它引用了自动配置的ID。
到目前为止,还没有这个问题。为什么会出现最后一步?

UPD:下表为C2 DTwinOperationsD2CTwinOperations操作日志。正如您所看到的,从底部开始,我读取配置,并更新它,之后更新事件发生,设备读取配置。

然后读取了配置,虽然这是一个读取操作,但正是在这个时候,双胞胎更新了,版本增加了,你也可以看到这个操作发生在与我不同的SDK版本中。
然后,您可以看到设备已读取数据。他读了3035字节。这就是自动配置中的值占用的量。也就是说,我在tw n中单独更新的值没有被读取。
| 生成时间|分类|操作名称|消息大小|SdkVersion|
| - -----|- -----|- -----|- -----|- -----|
| 2023年6月9日下午4:45:43.000| C2DTwinOperations|读|0| 2020-09-30|
| 2023年6月9日下午4:45:43.000| D2CTwinOperations|读|三零三五|.NET/1.42.0(.NET 6.0.16; Microsoft Windows 10.0.19045 Windows产品:0x 0000030; X64;|
| 2023年6月9日,下午4:43:38.000| C2DTwinOperations|读|0| 2020-09-30|
| 2023年6月9日,下午4:41:27.000| D2CTwinOperations|读|三四六九|.NET/1.42.0(.NET 6.0.16; Microsoft Windows 10.0.19045 Windows产品:0x 0000030; X64;|
| 2023年6月9日,下午4:41:27.000| C2DTwinOperations|更新|三四三○| 2021-04-12 2021-04-12 2021-04-12|
| 2023年6月9日,下午4:41:27.000| C2DTwinOperations|读|0| 2021-04-12 2021-04-12 2021-04-12|

sxissh06

sxissh061#

我已经提到了这个SO从IOT Hub获取数据。

var query = registryManager.CreateQuery("SELECT * FROM devices", 100); 
while (query.HasMoreResults)
 { 
 var page = await query.GetNextAsTwinAsync();
  foreach (var twin in page) 
  {  
twin.Properties.Desired["temperature"] = 72; 
twin.Properties.Desired["humidity"] = 50;
 twin.Tags["location"] = "Building A";
 twin.Tags["temperature"] = "72F"; 
registryManager.UpdateTwinAsync(twin.DeviceId, twin, twin.ETag); 
Console.WriteLine($"Device ID: {twin.DeviceId}");
 Console.WriteLine($"Location: {twin.Tags["location"]}"); 
 Console.WriteLine($"Temperature: {twin.Tags["temperature"]}"); 
 Console.WriteLine($"Desired Temperature: {twin.Properties.Desired["temperature"]}"); 
 Console.WriteLine($"Desired Humidity: {twin.Properties.Desired["humidity"]}"); 
 Console.WriteLine();
  }
   }

控制台输出:

在Azure中:
标签:

理想属性:

对于值的连续变化:

Console.WriteLine("Do you want to change the values? (y/n)");
        var response = Console.ReadLine();

        if (response.Trim().ToLower() == "y")
        {
            Console.WriteLine("Enter the new desired temperature:");
            var newTemperature = Console.ReadLine();
            twin.Properties.Desired["temperature"] = newTemperature;

            Console.WriteLine("Enter the new desired humidity:");
            var newHumidity = Console.ReadLine();
            twin.Properties.Desired["humidity"] = newHumidity;

            Console.WriteLine("Enter the new location:");
            var newLocation = Console.ReadLine();
            twin.Tags["location"] = newLocation;

            Console.WriteLine("Enter the new temperature tag:");
            var newTemperatureTag = Console.ReadLine();
            twin.Tags["temperature"] = newTemperatureTag;

            registryManager.UpdateTwinAsync(twin.DeviceId, twin, twin.ETag);
        }

相关问题