当我转到IOT核心注册表页面(在GCP控制台上)并选择一个设备时,我可以编辑它。那里有一个“设备元数据”部分,读取以下内容:
您可以为设备设置自定义元数据,如制造商、位置等。这些可以用于查询此注册表中的设备。了解更多
文档页中没有显示有关使用元数据查询设备的任何内容。这有可能吗?使用设备元数据可以做什么?
我之所以问这个问题,是因为我正在寻找带有设备双标签的Azure IOT集线器的以下特性:

发布于 2022-07-02 13:37:07
首先必须添加设备元数据,然后才能查询:
人们可以查询gcloud iot deviceslist (--registry=REGISTRY : --region=REGION)
--filter="metadata.items.key['test_metadata'][value]='test_value'"有关筛选表达式的更多信息,请参见gcloud topic filters。
或使用格式:--format='value[](metadata.items.test_metadata)'
发布于 2022-07-04 02:43:34
如果使用客户端库实现此功能,可能会更容易。使用@MartinZeitler list的建议,您的设备对每个设备执行get,然后对元数据进行检查。有关实现,请参见下面的Python代码:
from google.cloud import iot_v1
def sample_list_devices(meta_key_name,meta_val_name):
# Create a client
client = iot_v1.DeviceManagerClient()
project_id="your-project-id"
location="asia-east1" #define your device location
registry="your-registry-id"
parent=f"projects/{project_id}/locations/{location}/registries/{registry}"
# Initialize request argument(s)
list_request = iot_v1.ListDevicesRequest(
parent=parent,
)
# Make the request
list_result = client.list_devices(request=list_request)
# Handle the response
for response in list_result:
device=response.num_id
get_request = iot_v1.GetDeviceRequest(
name=f"{parent}/devices/{device}",
)
get_response = client.get_device(request=get_request)
if get_response.metadata[meta_key_name]==meta_val_name:
print(get_response)
return get_response
#define metadata key and metadata value that you want to use for filtering
sample_list_devices(meta_key_name="test_key",meta_val_name="test_val")过滤响应:

请参见设备配置:

发布于 2022-07-05 04:02:30
不,不可能以您想要的方式查询元数据。医生介绍了关于服务器的以下内容。
云IoT核心不解释或索引设备元数据。
正如您已经知道的,作为客户端模拟查询搜索的解决方案,我们可以首先列出所有设备,然后通过元数据过滤输出。
https://stackoverflow.com/questions/72839393
复制相似问题