如何解决Google Cloud IoT-注册表中所有设备的单个MQTT客户端实例
我能够通过以这种方式创建的MQTT客户端(使用paho python)将事件发布到我的Cloud IOT注册表中的设备:
self.__client = mqtt.Client(client_id='projects/{}/locations/{}/registries/{}/devices/{}'.format(project_id,cloud_region,registry_id,device_id))
现在,我想知道是否可以通过在注册表级别设置客户端ID(即未指定设备ID)来创建能够将事件发布到多个设备的MQTT客户端:
self.__client = mqtt.Client(client_id='projects/{}/locations/{}/registries/{}'.format(project_id,registry_id))
即使我在注册表中添加了CA证书,该客户端也无法连接。
我的问题是:单个MQTT Client实例可以将事件发布到注册表中定义的一组设备吗? 我应该改用网关吗?
解决方法
不,您不能将邮件发送到这样的注册表。
您要执行的操作是:1)使用您所说的网关,发送一条消息,然后将其传播到本地设备。或2)使用DeviceManagerClient()
来获取注册表中的设备列表,并在每个设备上循环循环向每个设备发送消息。
查看以下内容:https://cloud.google.com/iot/docs/samples/device-manager-samples#list_devices_in_a_registry
用于获取注册表中的设备列表。 python代码段:
# project_id = 'YOUR_PROJECT_ID'
# cloud_region = 'us-central1'
# registry_id = 'your-registry-id'
print("Listing devices")
client = iot_v1.DeviceManagerClient()
registry_path = client.registry_path(project_id,cloud_region,registry_id)
devices = list(client.list_devices(request={"parent": registry_path}))
for device in devices:
print("Device: {} : {}".format(device.num_id,device.id))
return devices
因此,在该for device in devices
循环中,您可以调用代码以获取MQTT客户端并将所需的消息发送到指定的设备。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。