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

En este tutorial se muestra cómo crear una AWS IoT regla que envíe datos de mensajes MQTT a un tema de Amazon SNS para que puedan enviarse como un mensaje de texto SMS.

En este tutorial, creará una regla que envíe datos de mensajes de un sensor meteorológico a todos los suscriptores de un tema SNS de Amazon, siempre que la temperatura supere el valor establecido en la regla. La regla detecta si la temperatura notificada supera el valor establecido por la regla y, a continuación, crea una nueva carga de mensajes que incluye únicamente el identificador del dispositivo, la temperatura notificada y el límite de temperatura que se ha superado. La regla envía la carga útil del mensaje nuevo como un documento JSON a un tema de SNS, que notifica a todos los suscriptores del tema de SNS.

Lo que aprenderá en este tutorial:
  • Cómo crear y probar una notificación de Amazon SNS

  • Cómo llamar a una notificación de Amazon SNS desde una regla AWS IoT

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

Crear un tema de Amazon SNS que envía un mensaje de texto SMS

Paso 1: Crear un tema de Amazon SNS que envía un mensaje de texto SMS
  1. Cree un tema de Amazon SNS.

    1. Inicie sesión en la consola de Amazon SNS.

    2. En el panel de navegación izquierdo, elija Topics (Temas).

    3. En la página Temas, elija Crear tema.

    4. En Detalles, elija el tipo Estándar. De forma predeterminada, la consola crea un tema FIFO.

    5. En Nombre, introduzca el nombre del tema de SNS. En este tutorial, escriba high_temp_notice.

    6. Desplácese hasta el final de la página y elija Crear tema.

      En la consola se abre la página Details (Detalles) del nuevo tema.

  2. Crear un una suscripción de Amazon SNS.

    nota

    Es posible que el número de teléfono que utilices en esta suscripción conlleve cargos por mensajería de texto debido a los mensajes que envíes en este tutorial.

    1. En la página de detalles del tema high_temp_notice, seleccione Crear suscripción.

    2. En Crear suscripción, en la sección Detalles, en la lista de protocolos, selecciona SMS.

    3. En punto de conexión, introduzca el número de teléfono que puede recibir mensajes de texto. Asegúrese de escribirlo de forma que comience con +, incluya el código de país y área y no incluya ningún otro carácter de puntuación.

    4. Seleccione Crear suscripción.

  3. Pruebe la notificación de Amazon SNS.

    1. En la consola de Amazon SNS, en el panel de navegación izquierdo, seleccione Temas.

    2. Para abrir la página de detalles del tema, en Temas, en la lista de temas, elija high_temp_notice.

    3. Para abrir la página Publicar mensaje en un tema, en la página de detalles de high_temp_notice, seleccione Publicar mensaje.

    4. En Publicar mensaje en un tema, en la sección Cuerpo del mensaje, en Cuerpo del mensaje para enviar al punto de conexión, introduzca un mensaje corto.

    5. Desplácese a la parte inferior de la página y seleccione Publicar mensaje.

    6. En el teléfono con el número que utilizó anteriormente al crear la suscripción, confirme que ha recibido el mensaje.

    Si no ha recibido el mensaje de prueba, vuelva a comprobar el número de teléfono y la configuración de su teléfono.

    Asegúrese de poder publicar los mensajes de prueba desde la consola de Amazon SNS antes de continuar con el tutorial.

Paso 2: Crea una AWS IoT regla para enviar el mensaje de texto

La AWS IoT regla que crearás en este tutorial se basa en los temas de device/device_id/data MQTT, donde device_id está 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. Esta regla también comprueba el valor del campo temperature en la carga útil del mensaje.

Cuando la regla recibe un mensaje de un tema coincidente, toma el device_id del nombre del tema, el valor temperature de la carga útil del mensaje y añade un valor constante para el límite que está probando, y envía estos valores como un documento JSON a un tema de notificación de Amazon SNS.

Por ejemplo, un mensaje MQTT del dispositivo sensor meteorológico número 32 utiliza el tema device/32/data y tiene una carga útil de mensajes similar a la siguiente:

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

La declaración de consulta de reglas de la regla toma el valor temperature de la carga útil del mensaje, el device_id del nombre del tema, y añade el valor max_temperature constante para enviar una carga útil de mensajes similar a la siguiente al tema de Amazon SNS:

{ "device_id": "32", "reported_temperature": 38, "max_temperature": 30 }
Para crear una AWS IoT regla que detecte un valor de temperatura superior al límite y crear los datos para enviarlos al tema Amazon SNS
  1. Abra el centro de reglas de la AWS IoT consola.

  2. Si esta es su primera regla, elija Crear o Crear una regla.

  3. En Crear una regla:

    1. En Name (Nombre), escriba temp_limit_notify.

      Recuerda que el nombre de una regla debe ser único en tu región Cuenta de AWS 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 hace que sea más fácil 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 as reported_temperature, 30 as max_temperature FROM 'device/+/data' WHERE temperature > 30

      Esta declaración:

      • Escucha los mensajes MQTT con un tema que coincida con el filtro de temas device/+/data y que tengan un valor temperature superior a 30.

      • 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 reported_temperature.

      • Crea un valor constante 30 para representar el valor límite y lo asigna al campo max_temperature.

  5. Para abrir la lista de acciones de la regla para esta regla, en Establecer una o más acciones, seleccione Añadir acción.

  6. En Seleccionar una acción, elija Enviar un mensaje como una notificación push SNS.

  7. Para abrir la página de configuración de la acción seleccionada, en la parte inferior de la lista de acciones, seleccione Configurar acción.

  8. En Acciones de configuración:

    1. En el objetivo SNS, elija Seleccionar, busque su tema SNS llamado high_temp_notice y elija Seleccionar.

    2. En Formato del mensaje, elija RAW.

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

    4. En Crear un nuevo rol, en Nombre, escriba un nombre único para el nuevo rol. Para este tutorial, escriba sns_rule_role.

    5. Elija Crear rol.

    Si va a repetir este tutorial o a reutilizar un rol existente, elija Actualizar rol antes de continuar. Esto actualiza el documento de política del rol para que funcione con el objetivo de SNS.

  9. Seleccione Añadir acción y vuelva a la página Crear una regla.

    En el icono de la nueva acción, debajo de Enviar un mensaje como notificación push de SNS, puede ver el tema de SNS al que se referirá su regla.

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

  10. Para crear la regla y completar este paso, en Crear una regla, desplácese hasta la parte inferior y seleccione Crear regla.

Paso 3: Probar la AWS IoT regla y la notificación de Amazon SNS

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. Si abandona el cliente MQTT para ir a otra página de la consola, no conservará ningún registro de suscripciones o mensajes.

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. Publique un mensaje en el tema de entrada con un identificador de dispositivo específico, device/32/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/32/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": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    4. Elija Publicar en tema para publicar su mensaje MQTT.

  3. Confirme que se envió el mensaje de texto.

    1. En el cliente de MQTT, en Suscripciones, hay un punto verde junto al tema al que se ha suscrito anteriormente.

      El punto verdes indica 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": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
    3. Compruebe el teléfono que utilizó para suscribirse al tema SNS y confirme que el contenido de la carga útil del mensaje tiene este aspecto:

      {"device_id":"32","reported_temperature":38,"max_temperature":30}

      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 la conversión del valor topic(2) a un valor numérico DECIMAL solo funcionará si esa parte del tema sólo contiene caracteres numéricos.

  4. Intente enviar un mensaje MQTT en el que la temperatura no supere el límite.

    1. En el cliente MQTT, en Suscripciones, seleccione Publicar en tema.

    2. En el campo Publicar, introduzca el nombre del tema de entrada,. device/33/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.

    Debería ver el mensaje que envió en la suscripción device/+/data. Sin embargo, como el valor de la temperatura está por debajo de la temperatura máxima en la sentencia de consulta de la regla, no debería recibir un mensaje de texto.

    Si no observa el comportamiento correcto, 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.

  • Si no recibe el mensaje SMS:

    Para que su regla funcione, debe tener la política correcta que la autorice a recibir un mensaje y enviar una notificación SNS, y debe recibir el mensaje.

    Cosas que debe comprobar
    • Compruebe el Región de AWS de su cliente MQTT y la regla que creó

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

    • Compruebe que el valor de temperatura de la carga útil del mensaje supera el umbral de prueba

      Si el valor de temperatura es inferior o igual a 30, tal como se define en la sentencia de consulta de la regla, la regla no realizará ninguna de sus acciones.

    • 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 4: Revisar los resultados y los siguientes pasos

En este tutorial:
  • Creó y probó una suscripción y un tema de notificación de Amazon SNS.

  • Utilizó una consulta SQL sencilla y funciones en una declaración de consulta de reglas para crear un mensaje nuevo para su notificación.

  • Creaste una AWS IoT regla para enviar una notificación de Amazon SNS que utilizaba tu carga de mensajes personalizada.

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

Siguientes pasos

Después de enviar unos cuantos mensajes de texto con esta regla, pruebe a experimentar con ella para ver cómo el cambio de algunos aspectos del tutorial afecta al mensaje y al momento en que se envía. He aquí algunos ejemplos para empezar.

  • Cambie el device_id en el tema del mensaje de entrada y observe el efecto en los contenidos del mensaje de texto.

  • Cambie los campos seleccionados en la sentencia de consulta de la regla y observe el efecto en el contenido del mensaje de texto.

  • Cambie la prueba en la declaración de consulta de reglas para probar una temperatura mínima en lugar de una temperatura máxima. ¡Recuerde cambiar el nombre de max_temperature!

  • Añada una acción de regla de republicación para enviar un mensaje MQTT cuando se envíe una notificación SNS.

  • Pruebe el siguiente tutorial de esta serie y aprenda cómo Tutorial: Almacenamiento de datos de dispositivos en una tabla de DynamoDB.