Azure IoT 中心 RegistryManager 更新许多双胞胎 - 仅当属性存在时
Azure IoT Hub RegistryManager update many twins - only if properties exist
如何确保 RegistryManager.UpdateTwins2Async()
只更新设备孪生的属性,如果它们不存在则从不添加它们?解释...
我正在 .NET Core 3.1 中开发 Azure IoT Web 应用程序。我需要使用补丁更新 IoT 中心中的多个设备设备孪生。到目前为止,我正在这样做
var updateTask = await mRegistryManager.UpdateTwins2Async(finalTwinList);
但是现在我们有一个包含额外属性的新版本的 IoT 设备,因此我只想更新具有这些属性的设备中的属性(即只有具有新版本的设备)。
我知道 UpdateTwins2Async()
方法会更改在设备中找到的属性,但我很确定如果它们不存在,它会添加它们。如果这些新属性被添加到旧设备上,那将是非常糟糕的。
那么如何确保 UpdateTwins2Async()
只更新属性而不添加它们?
我将 post 这个作为答案,但它可能不适合您的解决方案。如果您想确保只对正确的设备执行此操作,您可以先使用查询检索它们,然后再次检查您的 finalTwinList。
var list = new List<Twin>();
var sql = "SELECT * FROM devices WHERE is_defined(properties.desired.yourtaghere)";
var query = registryManager.CreateQuery(sql, 100);
while (query.HasMoreResults)
{
var page = await query.GetNextAsTwinAsync();
foreach (var twin in page)
{
list.Add(twin);
}
}
// now check your finalTwinList, any device ID that's not also in your newly created list can go!
如果您一次只更新少量设备并且您的集线器中有几千台设备,那么该查询就有些过分了。您可以将其更改为更具体:
SELECT * FROM devices
WHERE deviceId IN ['entries', 'from', 'your', 'list']
AND is_defined(properties.desired.yourtaghere)
如何确保 RegistryManager.UpdateTwins2Async()
只更新设备孪生的属性,如果它们不存在则从不添加它们?解释...
我正在 .NET Core 3.1 中开发 Azure IoT Web 应用程序。我需要使用补丁更新 IoT 中心中的多个设备设备孪生。到目前为止,我正在这样做
var updateTask = await mRegistryManager.UpdateTwins2Async(finalTwinList);
但是现在我们有一个包含额外属性的新版本的 IoT 设备,因此我只想更新具有这些属性的设备中的属性(即只有具有新版本的设备)。
我知道 UpdateTwins2Async()
方法会更改在设备中找到的属性,但我很确定如果它们不存在,它会添加它们。如果这些新属性被添加到旧设备上,那将是非常糟糕的。
那么如何确保 UpdateTwins2Async()
只更新属性而不添加它们?
我将 post 这个作为答案,但它可能不适合您的解决方案。如果您想确保只对正确的设备执行此操作,您可以先使用查询检索它们,然后再次检查您的 finalTwinList。
var list = new List<Twin>();
var sql = "SELECT * FROM devices WHERE is_defined(properties.desired.yourtaghere)";
var query = registryManager.CreateQuery(sql, 100);
while (query.HasMoreResults)
{
var page = await query.GetNextAsTwinAsync();
foreach (var twin in page)
{
list.Add(twin);
}
}
// now check your finalTwinList, any device ID that's not also in your newly created list can go!
如果您一次只更新少量设备并且您的集线器中有几千台设备,那么该查询就有些过分了。您可以将其更改为更具体:
SELECT * FROM devices
WHERE deviceId IN ['entries', 'from', 'your', 'list']
AND is_defined(properties.desired.yourtaghere)