Отправьте команду на несколько устройств в Google Cloud IoT Core с помощью MQTT

Как я могу отправить команду на все устройства в реестре с помощью MQTT и Google Cloud IoT Core?

Все примеры, которые я видел до сих пор, просто отправить команду на одно устройство. Должен ли я зацикливаться на своих устройствах и отправлять сообщение каждому из них?

Заранее спасибо.


person Sergio Morstabilini    schedule 20.03.2019    source источник
comment
Вы пробовали использовать подстановочный знак MQTT (я думаю, это хеш '#') в поле идентификатора устройства?   -  person Carl Rossman    schedule 27.04.2019


Ответы (1)


Вам потребуется список устройств. в реестре, а затем вызовите sendCommandToDevice в цикле, как вы предложили.

Для справки это будет выглядеть примерно так (на 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()
person Alex Hong    schedule 20.03.2019