Estado y conceptos de los comandos - AWS IoT Core

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:

  1. Cree un comando con una carga útil que contenga las configuraciones necesarias para ejecutarse en el dispositivo.

  2. Especifique el dispositivo de destino que recibirá la carga útil y realizará las acciones.

  3. 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-IoT nombres 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-FleetWise Para 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 especificado

  • NOT_EQUALS- El valor no debe ser igual al número especificado

  • GREATER_THAN- El valor debe ser mayor que el número especificado

  • GREATER_THAN_EQUALS- El valor debe ser mayor o igual al número especificado

  • LESS_THAN- El valor debe ser inferior al número especificado

  • LESS_THAN_EQUALS- El valor debe ser menor o igual al número especificado

  • IN_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 especificados

  • NOT_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 especificada

  • NOT_EQUALS- El valor no debe ser igual a la cadena especificada

  • IN_SET- El valor debe coincidir con una de las cadenas especificadas

  • NOT_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:

  1. Parámetros de la solicitud de ejecución: los valores proporcionados en la StartCommandExecution solicitud tienen la máxima prioridad

  2. Valores predeterminados del comando: si no se proporciona un parámetro en la solicitud de ejecución, defaultValue se utiliza el parámetro

  3. Sin 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 75

  • Si 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 y origen de la ejecución de los comandos
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

  • SUCCEEDED

  • ERROR

  • REJECTED

  • TIMED_OUT

IN_PROGRESS Dispositivo No
  • IN_PROGRESS

  • SUCCEEDED

  • ERROR

  • REJECTED

  • TIEMPO DE ESPERA

TIMED_OUT Dispositivo y nube No
  • SUCCEEDED

  • ERROR

  • REJECTED

  • TIEMPO DE ESPERA

SUCCEEDED Dispositivo No aplicable
FAILED Dispositivo No aplicable
REJECTED Dispositivo 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.

Imagen que muestra cómo el estado de ejecución de un comando pasa de un estado a otro
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 StartCommandExecution API, las solicitudes correctas cambian el estado a. CREATED A 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 aIN_PROGRESS. DesdeIN_PROGRESS, las ejecuciones pueden pasar a cualquier estado terminal o no terminal, exceptoCREATED.

    nota

    La UpdateCommandExecution API se puede invocar varias veces con el IN_PROGRESS estado. Especifique detalles de ejecución adicionales mediante el statusReason objeto.

  • TIMED_OUT

    Tanto la nube como el dispositivo pueden activar este estado. Las ejecuciones en CREATED nuestro IN_PROGRESS estado pueden cambiar a TIMED_OUT uno 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 aTIMED_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_OUT En este caso, el estado permaneceTIMED_OUT, pero los campos del StatusReason objeto 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 aFAILED. Utilice los reasonDescription campos reasonCode y del statusReason objeto, o CloudWatch los registros, para solucionar errores.

  • REJECTED

    Cuando un dispositivo recibe una solicitud no válida o incompatible, puede invocar la UpdateCommandExecution API con el estado. REJECTED Usa los reasonDescription campos reasonCode y del statusReason objeto, o CloudWatch los registros, para solucionar problemas.