1

How can I send a command to all the devices in a registry using MQTT and Google Cloud IoT Core?

All the examples I've seen till now just send the command to a single device. Do I have to loop on my devices and send a message to each of them?

Thanks in advance.

Misha Brukman
  • 12,938
  • 4
  • 61
  • 78
Sergio Morstabilini
  • 2,035
  • 21
  • 28

1 Answers1

2

You would need to list devices in a registry, and then call the sendCommandToDevice method in a loop as you suggested.

For reference, it would look something like this (in Python):

command = '{ "state": "off" }'
registry_path = 'projects/{}/locations/{}/registries/{}'.format(
    project_id, cloud_region, registry_id)

client = get_client(service_account_json)
devices = client.projects().locations().registries().devices(
    ).list(parent=registry_path).execute().get('devices', [])

for device in devices:
  device_path = 'projects/{}/locations/{}/registries/{}/devices/{}'.format(
      project_id, cloud_region, registry_id, device.get('id'))

  config_body = {
    'binaryData': base64.urlsafe_b64encode(
      command.encode('utf-8')).decode('ascii')
  }

  client.projects().locations().registries().devices().sendCommandToDevice(
      name=device_path, body=config_body).execute()
Misha Brukman
  • 12,938
  • 4
  • 61
  • 78
Alex Hong
  • 301
  • 1
  • 6