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

#python #iot #google-cloud-iot

#python #iot #google-cloud-iot

Вопрос:

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

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

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

Комментарии:

1. Вы пробовали использовать подстановочный знак MQTT (я думаю, это хэш ‘#’) в поле device-id?

Ответ №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()