Google Cloud IoT-注册表中所有设备的单个MQTT客户端实例



我能够通过这样创建的MQTT客户端(使用paho python(将事件发布到我的云IOT注册表中的设备:

self.__client = mqtt.Client(client_id='projects/{}/locations/{}/registries/{}/devices/{}'.format(project_id,
                           cloud_region,
                           registry_id,
                           device_id))

现在我想知道我是否可以创建一个MQTT客户端,通过在注册表级别设置客户端id(即不指定设备id(来将事件发布到多个设备:

self.__client = mqtt.Client(client_id='projects/{}/locations/{}/registries/{}'.format(project_id,
                               cloud_region,
                               registry_id))

即使我已将CA证书添加到注册表,此客户端也无法连接。

我的问题是:单个MQTT客户端实例能否将事件发布到注册表中定义的一组设备?我应该使用网关吗?

不,不能像这样向注册表发送消息。

你想要做到这一点的方法是: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客户端,并将您想要的消息发送到指定的设备。

最新更新