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.

1
  • Have you tried using an MQTT wildcard (I think it's the hash '#') in the device-id field? Commented Apr 27, 2019 at 13:45

1 Answer 1

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()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.