Puedes usar Cloud IoT Core para enviar comandos a dispositivos. Los comandos son directivas transitorias y únicas que se envían a dispositivos conectados a Cloud IoT Core y suscritos al tema de los comandos.
En comparación con las configuraciones de los dispositivos, los comandos son más rápidos, se pueden enviar con más frecuencia y son independientes de otras funciones de Cloud IoT Core. Cuando elijas entre comandos y configuraciones, considera si necesitas persistencia o conocimiento a lo largo del tiempo (configuraciones) o prefieres la velocidad o las directivas limitadas al tiempo (comandos).
Los comandos pueden ser útiles cuando quieres realizar las siguientes acciones:
- Enviar mensajes rápidamente a muchos dispositivos en un momento específico
- Enviar mensajes de gran volumen a muchos dispositivos a la vez
- Enviar directivas con límite de tiempo que venzan
- Enviar configuración incremental de dispositivo
Los comandos tienen las siguientes características:
- Se envían directamente a dispositivos suscritos y conectados
- No se conservan en Cloud IoT Core
- Se descartan para dispositivos que no están suscritos y conectados cuando se envía el comando
- No son únicos (se pueden enviar duplicados, aunque esto es poco probable)
- No se envían en ningún orden en particular (pero se entregan aproximadamente en el orden de envío)
- En cualquier formato (BLOB de datos)
En la actualidad, Cloud IoT Core solo admite comandos en MQTT (no HTTP).
Comandos en comparación con los parámetros de configuración
Cloud IoT Core también admite configuraciones de dispositivos. Las configuraciones son más coherentes y permanentes que los comandos. La configuración persiste en Cloud IoT Core y, cuando se usa MQTT, la configuración más reciente se entrega finalmente a todos los dispositivos suscritos, incluso a los que se suscriben después.
La siguiente tabla puede ayudarte a decidir si usarás un comando o una configuración:
Configuraciones | Comandos |
---|---|
Se reintenta la configuración más reciente hasta que se entrega (MQTT) | Se reintenta para QoS 1, pero no se garantiza que se entregue |
Es persistente, por lo que si un dispositivo se conecta (MQTT) o sondea (HTTP) más tarde, se entregará la configuración más reciente | No persistente. Se entrega solo a los dispositivos conectados en el momento en que se envía el comando |
Cada versión nueva reemplaza a la versión anterior | No hay relación ni orden entre los comandos |
Le indica a un dispositivo qué debe "ser"; corresponde al estado en Cloud IoT Core | Le indica a un dispositivo qué "hacer" en un momento específico |
Mayor latencia | Menor latencia |
Por lo general, es de tamaño pequeño (máx. 64 KB) | Hasta 256 KB |
BLOB arbitrario definido por el usuario | BLOB arbitrario definido por el usuario |
1 actualización por segundo por dispositivo | 1,000 por segundo, por proyecto (configurable) 2,500 por segundo, por registro |
Debido a que los comandos no persisten en Cloud IoT Core y no se reintentan de forma indefinida, no debes esperar que los datos de estado o telemetría del dispositivo reflejen un comando en particular. Es posible que el dispositivo no haya recibido el comando o que haya recibido comandos o configuraciones posteriores. Los comandos están diseñados para ser transitorios y no son parte de los datos del dispositivo a largo plazo.
Para administrar el orden y los duplicados de comandos, usa la lógica del dispositivo o las aplicaciones cliente.
Cómo enviar un comando
Para enviar un comando a un dispositivo, usa Google Cloud Console, gcloud o la API de Cloud IoT Core.
Consola
Para enviar un comando a un dispositivo, haz lo siguiente:
- Ve a la página Registros de Google Cloud Console.
- Haz clic en el ID del registro del dispositivo.
- En el menú de registro a la izquierda, haz clic en Dispositivos.
- Haz clic en el ID del dispositivo al que deseas enviar el comando.
- En la parte superior de la página, haz clic en Enviar comando.
Selecciona el formato del comando:
- Texto
- Base64
En el campo Datos de comando, ingresa el comando.
En el campo opcional Subcarpeta, ingresa el nombre de una subcarpeta para este comando. Los dispositivos que están suscritos al tema comodín recibirán comandos que se enviarán a las subcarpetas.
Haz clic en Enviar comando.
gcloud
Para enviar un comando a un dispositivo, ejecuta el comando gcloud iot devices commands send
:
gcloud iot devices commands send \ { --command-file=COMMAND_FILE | --command-data=COMMAND_DATA } \ --region=REGION \ --registry=REGISTRY_ID \ --device=DEVICE_ID \ [--subfolder=SUBFOLDER]\
Si los datos del comando contienen caracteres especiales, usa --command-file
en lugar de --command-data
.
API
Usa el método SendCommandToDevice para enviar un comando.
C#
Go
Java
Node.js
PHP
Python
Ruby
Recibe un comando
Para recibir un comando, el dispositivo debe:
- Estar conectado a Cloud IoT Core con el protocolo MQTT
- Estar suscrito al tema MQTT
/devices/{device-id}/commands/#
(el # comodín es obligatorio)
Cuando se suscriba al tema comodín, el dispositivo recibirá comandos enviados a devices/{device-id}/commands
, así como comandos enviados a subcarpetas (como devices/{device-id}/commands/{subfolder}
). No se admite la suscripción a una subcarpeta específica.
Los comandos se entregan a los dispositivos que están conectados y suscritos en ese momento específico. No están en cola ni se conservan para dispositivos que se conectan y se suscriben más adelante.
Calidad del servicio (QoS)
La entrega de comandos depende del nivel de QoS que uses:
Nivel de QoS | Garantía |
---|---|
0 | No se garantiza (solo el mejor esfuerzo), incluso cuando la solicitud muestra OK |
1 | Entrega al menos una vez garantizada si la solicitud sendCommandtoDevice muestra OK |
En otras palabras, en QoS 0, un mensaje se considera exitoso en cuanto se envía, sin importar la respuesta del dispositivo. En QoS 1, el éxito significa que el dispositivo confirmó la entrega del mensaje. Ten en cuenta que la entrega “al menos una vez” significa que el dispositivo puede recibir el comando varias veces. Cloud IoT Core no realiza un seguimiento de cuántas veces se recibió el comando.
Errores
Si se alcanza el tiempo de espera del comando (60 s, como se indica en Cuotas y límites), se muestra
DEADLINE_EXCEEDED
.Si el dispositivo no está conectado, o está conectado, pero no está suscrito al tema comodín de MQTT, se muestra
FAILED_PRECONDITION
.
Registros
Los comandos que se envían a los dispositivos, así como las confirmaciones por dispositivo, se registran en Cloud Logging.
Precios
Los comandos se facturan como todos los demás mensajes enviados mediante MQTT. Para obtener más detalles, consulta Precios.