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 mensaje MQTT cuando se reciba un mensaje MQTT 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 mensajes de MQTT.

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

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

Para completar este tutorial se necesitan aproximadamente 30 minutos.

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

Revise los temas y AWS IoT reglas de MQTT

Antes de hablar de AWS IoT las reglas, es útil entender el protocolo MQTT. En las soluciones de IoT, el protocolo MQTT ofrece algunas ventajas sobre otros protocolos de comunicación de red, como HTTP, 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 del MQTT aplicables a este tutorial. Para obtener información sobre la comparación entre MQTT y HTTP, consulte Elección de un protocolo para la comunicación entre dispositivos.

Protocolo MQTT

El protocolo MQTT utiliza un modelo de comunicación de publicación/suscripción con su host. Para enviar datos, los dispositivos publican los mensajes que se identifican por temas en el intermediario 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 reglas AWS IoT recibe los mensajes MQTT 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 reglas AWS IoT recibe un mensaje MQTT, estos elementos actúan sobre el mensaje de la siguiente manera.

  • Declaración de consulta de reglas

    La sentencia de consulta de la regla describe los temas de MQTT que se van a utilizar, interpreta los datos de la carga útil del mensaje y les da el formato que describe una sentencia SQL similar a las instrucciones utilizadas en las bases de datos SQL más conocidas. 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 regla Republish, que publica el resultado de la declaración de consulta como un mensaje MQTT con un tema específico.

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

La AWS IoT regla que crearás en este tutorial se basa en los temas de device/device_id/data MQTT, donde 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 los valores device_id y temperature como un nuevo mensaje MQTT con el tema device/data/temp.

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

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

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

{ "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 consola. AWS IoT

  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 la versión Uso de SQL, seleccione 2016-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 mensajes de MQTT con un tema que coincida con el filtro de temas device/+/data.

      • 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 tema MQTT 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. Seleccione 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á el cliente MQTT para publicar y suscribirse a los mensajes MQTT utilizados por esta regla.

Abra el cliente MQTT de la consola AWS IoT en una ventana nueva. Esto le permitirá editar la regla sin perder la configuración de su cliente MQTT. El cliente MQTT no conserva las suscripciones ni los registros de mensajes si lo abandona para ir a otra página de la consola.

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

    1. En el cliente MQTT, en Suscripciones, seleccione 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 puede publicar en MQTT temas que contengan caracteres comodín.

    1. En el cliente MQTT, en Suscripciones, seleccione Publicar en 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 su mensaje MQTT, seleccione Publicar en tema.

  4. Revise los mensajes que se enviaron.

    1. En el cliente de MQTT, en Suscripciones, hay un punto verde junto a los dos temas a los que se ha suscrito 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 ve el mensaje de entrada en el cliente MQTT

    Cada vez que publique su mensaje de entrada en el tema device/22/data, dicho mensaje debería aparecer en el cliente MQTT si se ha suscrito al filtro de temas device/+/data tal y 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 cliente MQTT, 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 ve su mensaje republicado 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
    • Compruebe la Región de AWS de su cliente MQTT y la regla que ha creado

      La consola en la que ejecuta el cliente MQTT debe estar en la misma región AWS 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 tema de la cláusula FROM 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 en el cliente MQTT. 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 sentencia SELECT.

      Compruebe la ortografía del campo temperature en la declaración de consulta de la regla con la de la carga útil del mensaje en el cliente MQTT. 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 documento JSON de la carga útil del mensaje tenga el formato correcto. Si el 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 volver a publicar la regla 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 consulta SQL sencilla y un par de funciones en una sentencia de consulta de reglas para generar un nuevo mensaje MQTT.

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

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

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.

  • Cambie 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: Envío de una notificación de Amazon SNS.

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.