Tutorial: Volver a publicar un mensaje MQTT - 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.

Tutorial: Volver a publicar un mensaje MQTT

En este tutorial se muestra cómo crear una AWS IoT regla que publique un MQTT mensaje cuando se reciba un MQTT mensaje específico. La regla puede modificar la carga útil de los mensajes entrantes antes de que se publique. Esto permite crear mensajes que se adapten a aplicaciones específicas sin necesidad de modificar el dispositivo o su firmware. También puede utilizar el aspecto de filtrado de una regla para publicar mensajes sólo cuando se cumpla una condición específica.

Los mensajes que se vuelven a publicar mediante una regla actúan como los mensajes enviados por cualquier otro AWS IoT dispositivo o cliente. Los dispositivos pueden suscribirse a los mensajes republicados del mismo modo que pueden suscribirse a cualquier otro tema de MQTT mensajes.

Lo que aprenderá en este tutorial:
  • Cómo utilizar SQL consultas y funciones sencillas en una declaración de consulta de reglas

  • ¿Cómo usar el MQTT cliente para probar una AWS IoT regla

Para completar este tutorial se necesitan aproximadamente 30 minutos.

Antes de empezar este tutorial, asegúrese de que tiene:

Revise MQTT los temas y AWS IoT las reglas

Antes de hablar de AWS IoT las reglas, es útil entender el MQTT protocolo. En las soluciones de IoT, el MQTT protocolo ofrece algunas ventajas sobre otros protocolos de comunicación de red, por ejemploHTTP, lo que lo convierte en una opción popular para su uso en dispositivos de IoT. En esta sección se analizan los aspectos clave MQTT que se aplican a este tutorial. Para obtener información sobre cómo MQTT se compara conHTTP, consulteElegir un protocolo de aplicación para la comunicación de su dispositivo.

MQTTprotocolo

El MQTT protocolo utiliza un modelo de comunicación de publicación/suscripción con su anfitrión. Para enviar datos, los dispositivos publican los mensajes que se identifican por temas en el agente de AWS IoT mensajes. Para recibir mensajes del agente de mensajes, los dispositivos se suscriben a los temas que van a recibir enviando filtros de temas en las solicitudes de suscripción al agente de mensajes. El motor de AWS IoT reglas recibe MQTT los mensajes del agente de mensajes.

AWS IoT reglas

AWS IoT las reglas constan de una declaración de consulta de reglas y una o más acciones de regla. Cuando el motor de AWS IoT reglas recibe un MQTT mensaje, estos elementos actúan sobre el mensaje de la siguiente manera.

  • Declaración de consulta de reglas

    La instrucción de consulta de la regla describe los MQTT temas que se van a utilizar, interpreta los datos de la carga útil del mensaje y da formato a los datos tal y como se describe en una SQL declaración similar a las que se utilizan en las bases de datos popularesSQL. El resultado de la sentencia de consulta son los datos que se envían a las acciones de la regla.

  • Acción de regla

    Cada acción de una regla actúa sobre los datos que resultan de la declaración de consulta de la regla. AWS IoT admite muchas acciones de regla. Sin embargo, en este tutorial se concentrará en la acción de la Republish regla, que publica el resultado de la declaración de consulta como un MQTT mensaje con un tema específico.

Paso 1: Crea una AWS IoT regla para volver a publicar un mensaje MQTT

La AWS IoT regla que crearás en este tutorial se refiere a los temas donde device/device_id/data MQTT device_id es el ID del dispositivo que envió el mensaje. Estos temas se describen mediante un filtro de temas como device/+/data: donde + es un carácter comodín que coincide con cualquier cadena entre los dos caracteres de barra diagonal.

Cuando la regla recibe un mensaje de un tema coincidente, vuelve a publicar temperature los valores device_id y los valores como un MQTT mensaje nuevo con el device/data/temp tema.

Por ejemplo, la carga útil de un MQTT mensaje con el device/22/data tema tiene el siguiente aspecto:

{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }

La regla toma el temperature valor de la carga útil del mensaje y el device_id del tema, y los vuelve a publicar como un MQTT mensaje con el device/data/temp tema y una carga útil del mensaje con el siguiente aspecto:

{ "device_id": "22", "temperature": 28 }

Con esta regla, los dispositivos que solo necesitan el identificador del dispositivo y los datos de temperatura se suscriben al tema device/data/temp para recibir únicamente esa información.

Para crear una regla que vuelva a publicar un mensaje MQTT
  1. Abre el centro de reglas de la AWS IoT consola.

  2. En Reglas, elija Crear y comience a crear su nueva regla.

  3. En la parte superior de Crear una regla:

    1. En Nombre, introduzca el nombre de la regla. Para este tutorial, llámela republish_temp.

      Recuerde que el nombre de una regla debe ser único en su cuenta y región, y no puede tener espacios. Hemos utilizado un carácter de subrayado en este nombre para separar las dos palabras del nombre de la regla.

    2. En Descripción, describa la regla.

      Una descripción significativa le ayuda a recordar lo que hace esta regla y por qué la creó. La descripción puede ser tan larga como sea necesario, por lo que debe ser lo más detallada posible.

  4. En Declaración de consulta de la regla de Crear una regla:

    1. En Usar SQL la versión, selecciona2016-03-23.

    2. En el cuadro de edición de la declaración de consulta de reglas, introduzca la siguiente declaración:

      SELECT topic(2) as device_id, temperature FROM 'device/+/data'

      Esta declaración:

      • Escucha los MQTT mensajes con un tema que coincida con el filtro de device/+/data temas.

      • Selecciona el segundo elemento de la cadena de temas y lo asigna al campo device_id.

      • Selecciona el campo temperature de valor de la carga útil del mensaje y lo asigna al campo temperature.

  5. En Establecer una o más acciones:

    1. Para abrir la lista de acciones de regla para esta regla, seleccione Añadir acción.

    2. En Selecciona una acción, selecciona Volver a publicar un mensaje en un AWS IoT tema.

    3. En la parte inferior de la lista de acciones, seleccione Configurar acción para abrir la página de configuración de la acción seleccionada.

  6. En Acciones de configuración:

    1. En Tema, escriba device/data/temp. Este es el MQTT tema del mensaje que publicará esta regla.

    2. En Calidad de servicio, elija 0: el mensaje se entrega cero o más veces.

    3. En Elegir o crear un rol para conceder AWS IoT acceso para realizar esta acción:

      1. Elija Crear rol. Se abre el cuadro de diálogo Crear un rol de IAM.

      2. Especifique un nombre que describa el recurso. Para este tutorial, use republish_role.

        Al crear un rol nuevo, se crean las políticas correctas para realizar la acción de la regla y se asocian al nuevo rol. Si cambia el tema de esta acción de regla o utiliza este rol en otra acción de regla, debe actualizar la política de ese rol para autorizar el nuevo tema o acción. Para actualizar un rol existente, seleccione Actualizar rol en esta sección.

      3. Seleccione Crear rol para crear el rol y cerrar el cuadro de diálogo.

    4. Seleccione Añadir acción para añadir la acción a la regla y volver a la página Crear una regla.

  7. La acción Volver a publicar un mensaje en un AWS IoT tema ahora aparece en Establecer una o más acciones.

    En el icono de la nueva acción, debajo de Volver a publicar un mensaje en un tema AWS IoT , puede ver el tema en el que se publicará la acción de volver a publicar.

    Esta es la única acción de regla que añadirá a esta regla.

  8. En Crear una regla, desplácese hasta la parte inferior y seleccione Crear regla para crear la regla y completar este paso.

Paso 2: Probar su nueva regla

Para probar la nueva regla, utilizarás el MQTT cliente para publicar y suscribirte a los MQTT mensajes que utiliza esta regla.

Abre el MQTTcliente en la AWS IoT consola en una ventana nueva. Esto le permitirá editar la regla sin perder la configuración de su MQTT cliente. El MQTT cliente no conserva ningún registro de suscripciones o mensajes si lo deja para ir a otra página de la consola.

Para usar el MQTT cliente para probar tu regla
  1. En el MQTTcliente de la AWS IoT consola, suscríbase a los temas de entrada, en este caso,device/+/data.

    1. En el MQTT cliente, en Suscripciones, selecciona Suscribirse a un tema.

    2. En el tema de suscripción, introduzca el tema del filtro de temas de entrada, device/+/data.

    3. No cambie el resto de los valores predeterminados de los demás ajustes.

    4. Elija Suscribirse al tema.

      En la columna Suscripciones, aparece device/+/data en Publicar en un tema.

  2. Suscríbase al tema que publicará su regla: device/data/temp.

    1. En Suscripciones, elija Suscribirse nuevamente a un tema, y en Tema de suscripción, ingrese el tema del mensaje republicado, device/data/temp.

    2. No cambie el resto de los valores predeterminados de los demás ajustes.

    3. Elija Suscribirse al tema.

      En la columna Suscripciones, aparece device/data/temp en device/+/data.

  3. Publique un mensaje en el tema de entrada con un identificador de dispositivo específico, device/22/data No puedes publicar en MQTT temas que contengan caracteres comodín.

    1. En el MQTT cliente, en Suscripciones, selecciona Publicar en un tema.

    2. En el campo Publicar, introduzca el nombre del tema de entrada,. device/22/data

    3. Copie los datos de ejemplo que se muestran aquí y, en el cuadro de edición situado debajo del nombre del tema, péguelos.

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Para enviar el MQTT mensaje, selecciona Publicar en el tema.

  4. Revise los mensajes que se enviaron.

    1. En el MQTT cliente, en Suscripciones, hay un punto verde junto a los dos temas a los que te suscribiste anteriormente.

      Los puntos verdes indican que se han recibido uno o más mensajes nuevos desde la última vez que los consultó.

    2. En Suscripciones, seleccione device/+/data para comprobar que la carga útil de los mensajes coincide con la que acaba de publicar y tiene este aspecto:

      { "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. En Suscripciones, seleccione device/data/temp para comprobar que la carga útil de su mensaje republicado tiene este aspecto:

      { "device_id": "22", "temperature": 28 }

      Observe que el valor device_id es una cadena entre comillas y el valor temperature es numérico. Esto se debe a que la función topic() extrajo la cadena del nombre del tema del mensaje de entrada, mientras que el valor temperature utiliza el valor numérico de la carga útil del mensaje de entrada.

      Si desea convertir el valor device_id en un valor numérico, sustituya topic(2) en la declaración de consulta de reglas por:

      cast(topic(2) AS DECIMAL)

      Tenga en cuenta que convertir el valor topic(2) en un valor numérico solo funcionará si esa parte del tema contiene solo caracteres numéricos.

  5. Si ve que el mensaje correcto se publicó en el tema device/data/temp, entonces su regla funcionó. Vea qué más puede aprender sobre la acción Regla de republicación en la siguiente sección.

    Si no ve que se ha publicado el mensaje correcto en los temas device/+/data o device/data/temp, consulte los consejos para la solución de problemas.

Solución de problemas con la regla de volver a publicar mensajes

He aquí algunas cosas que debe comprobar en caso de que no esté viendo los resultados que espera.

  • ¿Tiene un mensaje de error

    Si apareció un error al publicar el mensaje de entrada, corrija primero ese error. Los siguientes pasos pueden ayudarle a corregir ese error.

  • No ves el mensaje de entrada en el cliente MQTT

    Cada vez que publique el mensaje de entrada en el device/22/data tema, dicho mensaje debería aparecer en el MQTT cliente si se ha suscrito al filtro de device/+/data temas, tal como se describe en el procedimiento.

    Cosas que debe comprobar
    • Compruebe el filtro de temas al que se ha suscrito

      Si se ha suscrito al tema del mensaje de entrada como se describe en el procedimiento, debería ver una copia del mensaje de entrada cada vez que lo publique.

      Si no ve el mensaje, compruebe el nombre del tema al que se suscribió y compárelo con el tema en el que lo publicó. Los nombres de los temas distinguen entre mayúsculas y minúsculas y el tema al que te suscribiste debe ser idéntico al tema en el que publicaste la carga útil del mensaje.

    • Compruebe la función de publicación de mensajes

      En el MQTT cliente, en Suscripciones, elija device/+/data, marque el tema del mensaje de publicación y, a continuación, elija Publicar en tema. Debería ver la carga útil del mensaje en el cuadro de edición situado debajo del tema en la lista de mensajes.

  • No ves el mensaje que has vuelto a publicar en el cliente MQTT

    Para que su regla funcione, debe tener la política correcta que la autorice a recibir y volver a publicar un mensaje, y debe recibir el mensaje.

    Cosas que debe comprobar
    • Comprueba el Región de AWS de tu MQTT cliente y la regla que has creado

      La consola en la que ejecuta el MQTT cliente debe estar en la misma AWS región que la regla que creó.

    • Compruebe el tema del mensaje de entrada en la declaración de consulta de la regla

      Para que la regla funcione, debe recibir un mensaje con el nombre del tema que coincida con el filtro de temas de la FROM cláusula de la declaración de consulta de la regla.

      Compruebe la ortografía del filtro de temas de la declaración de consulta de reglas con la del tema del MQTT cliente. Los nombres de los temas distinguen mayúsculas de minúsculas y el tema del mensaje debe coincidir con el filtro de tema de la declaración de consulta de reglas.

    • Compruebe el contenido de la carga útil del mensaje de entrada

      Para que la regla funcione, debe encontrar el campo de datos en la carga útil del mensaje que se declara en la SELECT declaración.

      Compruebe la ortografía del temperature campo de la declaración de consulta de la regla con la de la carga útil del mensaje en el MQTT cliente. Los nombres de los campos distinguen mayúsculas de minúsculas y el campo temperature de la declaración de consulta de la regla debe ser idéntico al campo temperature de la carga útil del mensaje.

      Asegúrese de que el JSON documento de la carga útil del mensaje tenga el formato correcto. Si JSON contiene algún error, como la falta de una coma, la regla no podrá leerlo.

    • Compruebe el tema del mensaje que se ha vuelto a publicar en la acción de la regla

      El tema en el que la acción de la regla Volver a publicar publica el nuevo mensaje debe coincidir con el tema al que se suscribió en el cliente. MQTT

      Abra la regla que creó en la consola y seleccione el tema en el que la acción de la regla volverá a publicar el mensaje.

    • Compruebe el rol que utiliza la regla

      La acción de la regla debe tener permiso para recibir el tema original y publicar el tema nuevo.

      Las políticas que autorizan a la regla a recibir datos de los mensajes y volver a publicarlos son específicas de los temas utilizados. Si cambia el tema utilizado para volver a publicar los datos del mensaje, debe actualizar la función de la acción de regla para actualizar su política y que coincida con el tema actual.

      Si sospecha que este es el problema, edite la acción Volver a publicar la regla y cree un nuevo rol. Los nuevos roles creados por la acción de regla reciben las autorizaciones necesarias para realizar estas acciones.

Paso 3: Revisar los resultados y los siguientes pasos

En este tutorial:
  • Ha utilizado una SQL consulta sencilla y un par de funciones en una declaración de consulta de reglas para generar un mensaje nuevoMQTT.

  • Creó una regla que volvió a publicar ese nuevo mensaje.

  • Utilizó el MQTT cliente para probar la AWS IoT regla.

Siguientes pasos

Después de volver a publicar algunos mensajes con esta regla, intente experimentar con ella para ver cómo los cambios en algunos aspectos del tutorial afectan al mensaje que se ha vuelto a publicar. He aquí algunos ejemplos para empezar.

  • Cambia el device_id en el tema del mensaje de entrada y observe el efecto en la carga útil del mensaje republicado.

  • Cambie los campos seleccionados en la declaración de consulta de la regla y observe el efecto en la carga útil del mensaje republicado.

  • Pruebe el siguiente tutorial de esta serie y aprenda cómo Tutorial: Enviar una SNS notificación a Amazon.

La acción Volver a publicar la regla utilizada en este tutorial también puede ayudarle a depurar las sentencias de consulta de reglas. Por ejemplo, puede añadir esta acción a una regla para ver cómo su sentencia de consulta de regla formatea los datos utilizados por sus acciones de regla.