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 comandos.
En comparación con las configuraciones del dispositivo, 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 perseverancia o conocimiento en el tiempo (configuraciones) o prefieres la velocidad o las directivas con límites de tiempo (comandos).
Los comandos pueden ser útiles en los siguientes casos:
- 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)
Actualmente, Cloud IoT Core es compatible con los comandos solo en MQTT (no HTTP).
Comandos en comparación con parámetros de configuración
Cloud IoT Core también es compatible con las configuraciones de los dispositivos. Los parámetros de configuración son más coherentes y permanentes que los comandos. La configuración se conserva en Cloud IoT Core y, cuando se usa MQTT, la configuración más reciente se entrega a todos los dispositivos suscritos, incluso a los que se suscriben después.
La siguiente tabla puede ayudarte a decidir si usar 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 |
Por lo tanto, 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. | Sin relación o 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, son pequeños (tamaño máximo: 64 KB). | Hasta 256 KB |
BLOB arbitrario y definido por el usuario | BLOB arbitrario y 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 indefinidamente, no debes esperar que la telemetría del dispositivo o los datos de estado 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 forman parte de datos de dispositivos a largo plazo.
Para administrar el orden de los comandos y los duplicados, usa la lógica del dispositivo o las aplicaciones cliente.
Envía un comando
Para enviar un comando a un dispositivo, usa la consola de Google Cloud, 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 en la consola de Google Cloud.
- Haga clic en el ID del registro del dispositivo.
- En el menú de registro ubicado a la izquierda, haga 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 comandos, 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 cumplir estos requisitos:
- Estar conectado a Cloud IoT Core con el protocolo MQTT
- Estar suscrito al tema MQTT
/devices/{device-id}/commands/#
(se requiere el comodín #)
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 se ponen en cola ni se conservan para dispositivos que se conectan y se suscriben más adelante.
Calidad de 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, la ejecución correcta indica 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 hace 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 y las confirmaciones de estos se registran en Cloud Logging.
Precios
Los comandos se facturan como todos los otros mensajes que se envían a través de MQTT. Para obtener más información, consulta Precios.