Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Estado y conceptos de los comandos
Utilice AWS IoT los comandos para enviar instrucciones desde la nube a los dispositivos conectados. Para usar esta característica:
-
Cree un comando con una carga útil que contenga las configuraciones necesarias para ejecutarse en el dispositivo.
-
Especifique el dispositivo de destino que recibirá la carga útil y realizará las acciones.
-
Ejecute el comando en el dispositivo de destino y recupere la información de estado. Para solucionar problemas, consulte los CloudWatch registros.
Para obtener más información acerca de este flujo de trabajo, consulte Flujo de trabajo de comandos de.
Conceptos clave de los comandos
Los siguientes conceptos clave le ayudan a entender la función de comandos. Los términos se utilizan de forma coherente en toda esta documentación:
Comando: plantilla reutilizable que define las instrucciones del dispositivo
Ejecución: instancia de un comando que se ejecuta en un dispositivo
Nombre de la cosa: identificador de dispositivos registrados en el registro de IoT
ID de cliente: identificador MQTT para dispositivos no registrados
Carga útil: los datos de instrucciones que se envían a los dispositivos
Tema: Canal MQTT para la comunicación de comandos
- Comandos
-
Los comandos son instrucciones que se envían desde la nube a sus dispositivos de IoT como mensajes MQTT. Tras recibir la carga útil, los dispositivos procesan las instrucciones y toman las medidas correspondientes, como modificar los ajustes de configuración, transmitir las lecturas de los sensores o cargar los registros. Luego, los dispositivos devuelven los resultados a la nube, lo que permite la supervisión y el control remotos.
- Namespace
-
Al crear un comando, especifique su espacio de nombres. Para AWS IoT Device Management los comandos, utilice el espacio de
AWS-IoTnombres predeterminado y proporcione una carga útil o una plantilla de carga útil. Para los AWS IoT FleetWise comandos, usa el espacio de nombres.AWS-IoT-FleetWisePara obtener más información, consulte Comandos remotos en la Guía para AWS IoT FleetWise desarrolladores. - Carga útil
-
Al crear un comando, proporcione una carga estática que defina las acciones que debe realizar el dispositivo. La carga útil puede utilizar cualquier formato compatible. Para garantizar que los dispositivos interpreten correctamente la carga útil, recomendamos especificar el tipo de formato de la carga útil. Los dispositivos que utilizan el MQTT5 protocolo pueden seguir el estándar MQTT para identificar el formato. Los indicadores de formato para JSON o CBOR están disponibles en el tema de solicitud de comandos.
- Plantilla de carga útil
-
Una plantilla de carga útil define una carga útil de comandos con marcadores de posición que generan diferentes cargas útiles en tiempo de ejecución en función de los valores de los parámetros que proporciones. Por ejemplo, en lugar de crear cargas útiles independientes para diferentes valores de temperatura, crea una plantilla con un marcador de temperatura y especifica el valor durante la ejecución. Esto elimina el mantenimiento de varias cargas útiles similares.
- Dispositivo de destino
-
Para ejecutar un comando, especifique un dispositivo de destino utilizando su nombre (en el caso de los dispositivos registrados AWS IoT) o el ID de cliente MQTT (en el caso de los dispositivos no registrados). El ID de cliente es un identificador único definido en el MQTT protocolo utilizado para conectar los dispositivos. AWS IoT Para obtener más información, consulte Consideraciones sobre los dispositivos de destino.
- Temas de comandos
-
Antes de ejecutar un comando, los dispositivos deben suscribirse al tema de solicitud de comandos. Al ejecutar un comando, la carga útil se envía al dispositivo relacionado con este tema. Tras la ejecución, los dispositivos publican los resultados y el estado en el tema de respuesta al comando. Para obtener más información, consulte Temas de comandos.
- Ejecución de comandos
-
Una ejecución es una instancia de un comando que se ejecuta en un dispositivo de destino. Al iniciar una ejecución, la carga útil se entrega al dispositivo y se genera un identificador de ejecución único. El dispositivo ejecuta el comando e informa a. AWS IoT La lógica del dispositivo determina el comportamiento de ejecución y los informes sobre el estado de los temas reservados.
Condiciones de valor de los parámetros
Al crear comandos con plantillas de carga útil, defina las condiciones de valor para validar los valores de los parámetros antes de la ejecución. Las condiciones de valor garantizan que los parámetros cumplan los requisitos, lo que evita las ejecuciones no válidas.
Operadores compatibles por CommandParameterValuetipo
- Tipos numéricos (INTEGER, LONG, DOUBLE, UNSIGNEDLONG)
-
EQUALS- El valor debe ser igual al número especificadoNOT_EQUALS- El valor no debe ser igual al número especificadoGREATER_THAN- El valor debe ser mayor que el número especificadoGREATER_THAN_EQUALS- El valor debe ser mayor o igual al número especificadoLESS_THAN- El valor debe ser inferior al número especificadoLESS_THAN_EQUALS- El valor debe ser menor o igual al número especificadoIN_RANGE- El valor debe estar dentro del rango especificado (incluido)NOT_IN_RANGE- El valor debe estar fuera del rango especificado (incluido)IN_SET- El valor debe coincidir con uno de los números especificadosNOT_IN_SET- El valor no debe coincidir con ninguno de los números especificados
- Tipo de cadena (STRING)
-
EQUALS- El valor debe ser igual a la cadena especificadaNOT_EQUALS- El valor no debe ser igual a la cadena especificadaIN_SET- El valor debe coincidir con una de las cadenas especificadasNOT_IN_SET- El valor no debe coincidir con ninguna de las cadenas especificadas
- Tipo booleano
-
No se admiten condiciones de valores
- Tipo binario
-
No se admiten condiciones de valor
Ejemplo: comando de control de temperatura
{ "commandId": "SetTemperature", "namespace": "AWS-IoT", "payloadTemplate": "{\"temperature\": \"${aws:iot:commandexecution::parameter:temperature}\"}", "parameters": [ { "name": "temperature", "type": "INTEGER", "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": { "numberRange": { "min": "60", "max": "80" } } } ] } ] }
En este ejemplo, el temperature parámetro debe estar entre 60 y 80 (ambos incluidos). Las solicitudes de ejecución con valores fuera de este rango no se validan.
nota
Las condiciones de los valores se evalúan al invocar la StartCommandExecution API. Las validaciones fallidas devuelven un error e impiden la creación de la ejecución.
Prioridad y evaluación del valor del parámetro
Al iniciar la ejecución de comandos con plantillas de carga útil, los valores de los parámetros se resuelven con la siguiente prioridad:
Parámetros de la solicitud de ejecución: los valores proporcionados en la
StartCommandExecutionsolicitud tienen la máxima prioridadValores predeterminados del comando: si no se proporciona un parámetro en la solicitud de ejecución,
defaultValuese utiliza el parámetroSin valor: si no se proporciona ninguno, se produce un error en la ejecución, ya que es el parámetro necesario para generar la solicitud de ejecución
Las condiciones de valor se evalúan en función del valor final del parámetro obtenido anteriormente en función de la prioridad y antes de la creación de la ejecución. Si la validación falla, la solicitud de ejecución devuelve un error.
Ejemplo: SetTemperature comando con defaultValue
{ "parameters": [ { "name": "temperature", "type": "INTEGER", "defaultValue": {"I": 72}, "valueConditions": [ { "comparisonOperator": "IN_RANGE", "operand": {"numberRange": {"min": "60", "max": "80"}} } ] } ] }
Al iniciar la ejecución:
Si proporciona
"temperature": {"I": 75}la solicitud, se utiliza 75Si omite el parámetro de temperatura, se utilizará el valor predeterminado 72
Ambos valores se validan con respecto a la condición de rango [60,80]
Estados de comando
Los comandos de su Cuenta de AWS ordenador pueden estar en uno de estos tres estados: disponibles, obsoletos o pendientes de eliminación.
- Disponible
-
Una vez creado correctamente, un comando pasa al estado Disponible y se puede ejecutar en los dispositivos.
- Obsoleto
-
Marque los comandos como obsoletos cuando ya no sean necesarios. Los comandos obsoletos no pueden iniciar nuevas ejecuciones, pero las ejecuciones pendientes siguen completándose. Para habilitar nuevas ejecuciones, restaure el comando al estado Disponible.
- Eliminación pendiente
-
Al marcar un comando para su eliminación, se elimina automáticamente si está obsoleto durante más tiempo que el tiempo de espera máximo (predeterminado: 12 horas). Esta acción es permanente. Si no está en desuso o ha pasado menos del tiempo de espera, el comando pasa al estado de eliminación pendiente y se elimina una vez transcurrido el tiempo de espera.
Estado de la ejecución del comando
Al iniciar una ejecución en un dispositivo de destino, entra en CREATED estado y puede pasar a otros estados en función de los informes del dispositivo. Puede recuperar la información de estado y realizar un seguimiento de las ejecuciones.
nota
Puede ejecutar varios comandos simultáneamente en un dispositivo. Utilice el control de simultaneidad para limitar las ejecuciones por dispositivo y evitar la sobrecarga. Para ver el número máximo de ejecuciones simultáneas por dispositivo, consulta las cuotas de AWS IoT Device Management comandos.
La siguiente tabla muestra los estados de ejecución y sus transiciones en función del progreso de la ejecución.
| Estado de la ejecución del comando | ¿Iniciado por un dispositivo o la nube? | ¿Ejecución final? | Transiciones de estado permitidas |
|---|---|---|---|
CREATED |
Cloud | No |
|
IN_PROGRESS |
Dispositivo | No |
|
TIMED_OUT |
Dispositivo y nube | No |
|
SUCCEEDED |
Dispositivo | Sí | No aplicable |
FAILED |
Dispositivo | Sí | No aplicable |
REJECTED |
Dispositivo | Sí | No aplicable |
Los dispositivos pueden publicar actualizaciones de estado y resultados en cualquier momento mediante comandos reservados a los temas de MQTT. Para proporcionar un contexto adicional, los dispositivos pueden usar reasonCode reasonDescription campos del statusReason objeto.
El siguiente diagrama muestra las transiciones del estado de ejecución.
nota
Cuando no AWS IoT detecta ninguna respuesta del dispositivo dentro del período de tiempo de espera, se establece TIMED_OUT como un estado temporal que permite reintentos y cambios de estado. Si el dispositivo informa de forma explícitaTIMED_OUT, se convierte en un estado terminal sin más transiciones. Para obtener más información, consulte Ejecuciones de comandos no finales.
En las siguientes secciones se describen las ejecuciones terminales y no terminales y sus estados.
Ejecuciones de comandos no finales
Una ejecución no es terminal si puede aceptar actualizaciones de dispositivos. Las ejecuciones que no son terminales se consideran activas. Los siguientes estados no son terminales:
-
CREATED
Cuando inicias una ejecución desde la AWS IoT consola o utilizas la
StartCommandExecutionAPI, las solicitudes correctas cambian el estado a.CREATEDA partir de este estado, las ejecuciones pueden pasar a cualquier otro estado terminal o no terminal. -
IN_PROGRESS
Tras recibir la carga útil, los dispositivos pueden empezar a ejecutar instrucciones y realizar acciones específicas. Durante la ejecución, los dispositivos pueden publicar las respuestas al tema de respuesta de los comandos y actualizar el estado a
IN_PROGRESS. DesdeIN_PROGRESS, las ejecuciones pueden pasar a cualquier estado terminal o no terminal, exceptoCREATED.nota
La
UpdateCommandExecutionAPI se puede invocar varias veces con elIN_PROGRESSestado. Especifique detalles de ejecución adicionales mediante elstatusReasonobjeto. -
TIMED_OUT
Tanto la nube como el dispositivo pueden activar este estado. Las ejecuciones en
CREATEDnuestroIN_PROGRESSestado pueden cambiar aTIMED_OUTuno por los siguientes motivos:-
Tras enviar el comando, se inicia un temporizador. Si el dispositivo no responde dentro del tiempo especificado, la nube cambia de estado a
TIMED_OUT. En este caso, la ejecución no es terminal. -
El dispositivo puede cambiar el estado a cualquier estado de terminal o informar de un tiempo de espera y establecer el estado en.
TIMED_OUTEn este caso, el estado permaneceTIMED_OUT, pero los campos delStatusReasonobjeto cambian en función de la información del dispositivo. La ejecución pasa a ser terminal.
Para obtener más información, consulte Valor de tiempo de espera y estado de ejecución de TIMED_OUT.
-
Ejecuciones de comandos finales
Una ejecución se convierte en terminal cuando ya no acepta actualizaciones de los dispositivos. Los siguientes estados son finales. Las ejecuciones pueden pasar a estados de terminal desde cualquier estado no terminal:CREATED,IN_PROGRESS, o. TIMED_OUT
-
SUCCEEDED
Si el dispositivo completa la ejecución correctamente, puede publicar una respuesta en el tema de respuesta del comando y actualizar el estado a.
SUCCEEDED -
ERROR
Cuando un dispositivo no completa la ejecución, puede publicar una respuesta en el tema de respuesta al comando y actualizar el estado a
FAILED. Utilice losreasonDescriptioncamposreasonCodey delstatusReasonobjeto, o CloudWatch los registros, para solucionar errores. -
REJECTED
Cuando un dispositivo recibe una solicitud no válida o incompatible, puede invocar la
UpdateCommandExecutionAPI con el estado.REJECTEDUsa losreasonDescriptioncamposreasonCodey delstatusReasonobjeto, o CloudWatch los registros, para solucionar problemas.