Cuando los mensajes llegan a AWS IoT estos son procesados por un servicio llamado Message Broker, el cual conecta los mensajes que llegan y permite el envío de estos a los dispositivos, todo esto mediante la suscripción o publicación a un tema o tópico.
El procesamiento de mensajes a través del agente permite la creación de reglas las cuales pueden iniciar acciones de acuerdo al contenido de los mensajes.
Estas acciones pueden ser interacciones con otros servicios de AWS como guardar los mensajes en un Amazon DynamoDB (una base de datos Llave Valor), publicar los mensajes en una cola de Amazon SQS, invocar una función Lambda para realizar alguna tarea, grabar los datos a Amazon Elasticsearch, guardar los mensajes en AWS IoT Analytics o un repositorio de S3 como parte de un lago de datos, etc. Como se puede ver el uso de las reglas ayuda a detonar acciones mas alla de solo guardar la información de IoT.
Para mas detalles puede consultar la siguiente liga sobre las Reglas en AWS IoT
Antes de crear las reglas en AWS IoT Core es necesario entrar a Amazon DynamoDB para crear una tabla a la cual se enviaran los mensajes que llegan.
En la consola de AWS, ingrese Dynamo en la parte superior en Servicios. Una vez en DynamoDB, seleccionar Panel en el menu de la izquierda y posteriormente clic en Crear tabla.
El nombre de la tabla puede ser Tcu-speed, en Clave principal, escribir trip_id y seleccionar la opción Añadir clave de ordenación y escribir timestamp. Ambos tipos deben ser tipo Cadena a continuación se muestra como debe quedar:
Y seleccione Crear, después de unos minutos esta estará disponible.
En IoT Core, en el menu de la izquierda, seleccionar Actuar y luego Reglas En la nueva pantalla seleccionar Crear una regla, e ingresar la siguiente información:
Nombre: tcuSpeedRule Descripcion: Regla para enviar datos a DynamoDb tabla TCU-SPEED Instrucciones de consulta de regla:
SELECT * FROM 'tcu/vehicle/#'
Así debe quedar la pantalla:
En la sección “Definir una o varias acciones” dar clic en Añadir acción y seleccionar la opción Dividir mensajes en varias columnas de una tabla de base de datos (DynamoDBv2) y dar clic en Configurar acción (Abajo en la pantalla).
En la siguiente pantalla seleccionar la tabla que previamente se creo en DynamoDB que debería tener el nombre Tcu-speed , dar clic en Crear un role, tecleamos: iot-dynamodb-rol y finalmente clic en Añadir acción .
Ahora, damos clic en Crear regla para terminar.
Veamos que se ha realizado. La regla que se ha creado esta asociada al tópico “tcu/vehicle” por lo que cualquier mensaje que llegue con ese tópico sera enviado a la tabla de DynamoDB. Al seleccionar la opción de “Dividir mensajes en varias columnas …” ayuda que toda la información que llegue en el documento JSON sea puesto en columnas. De lo contrario hubiera sido todo el documento en una sola columna
Regresamos a Cloud9 para ejecutar nuevamente el script:
En la linea 31, vamos a generar datos aleatorios en la velocidad y vamos a agregar la variable timestamp. El código original es:
def send():
message = {
"name": "speed",
"value": 87,
"id": ID,
"trip_id": trip_id
}
Pero ahora debe quedar de la siguiente forma:
def send():
message = {
"name": "speed",
"value": random.randint(0,120),
"vin": ID,
"trip_id": trip_id,
"timestamp": str(datetime.datetime.now())
}
Salvamos el archivo y ahora ejecutammos el siguiente codigo en la ventana de Terminal.
python device1.py
En esta vez, los mensajes llegaran directamente a la tabla de DynamoDB . En DynamoDB, en el tab Elementos se pueden ver los mensajes que llegan.
Regresemos a Cloud9 para detener el script con Ctrl+C
Ya se tiene la información guardada en Amazon DynamoDB, pero ¿qué sucede si se desea ejecutar alguna acción si una métrica sobre pasa un umbral determinado? Las reglas pueden ejecutar varias acciones al mismo tiempo, lo que a continuación se hará es agregar una nueva regla para ejecutar el servicio de Amazon Simple Notification Service (Amazon SNS). Cómo se verá SNS permite agregar muchas acciones, que ayudan a la integración de la solución de IoT con otros elementos en AWS.
A continuación se creará un Tema en SNS, se enrutarán los mensajes de IoT Core a SNS y se usara Amazon Simple Queue Service para ver los mensajes con fallas.
En la consola de AWS en Servicios, escribir “SNS“.
En la pantalla seleccionar el menu de la izquierda y dar clic en Temas y luego clic en el botón naranja Crear un tema
Ingresar los siguientes datos:
Como se muestra en la siguiente pantalla y dar clic en “Crear un tema“
Una vez creado el tema, en la siguiente pantalla dar clic en “Crear una suscripción”.
Para crear una suscripción se requiere ingresar los siguientes datos:
De clic en “Crear una suscripción”
Ahora se creara una cola en SQS. En la consola de AWS, en Servicios teclear “SQS” e ingresar al servicio. Dar clic en “Crear una Cola”
El tipo de cola sera Estándar. Se ingresa el nombre de la cola : ColaAlertasVelocidad Todos los otros valores se dejan sin cambio. Dar clic en Crear una cola
Una vez creada la cola se selecciona el botón naranja Suscribirse al tema de Amazon SNS
En la siguiente pantalla seleccionar el ARN creado en SNS. Si tiene varios, debe encontrarlo por el nombre que le dio. Y posteriormente clic en “Guardar”
En este punto, cualquier mensaje que llegue al Tema de SNS sera colocado en la cola de SQS.
Ahora viene el momento de unir lo que se ha creado con IoT. Para ellos se agregará una nueva regla que ejecutará la acción para enviar los datos al tema de SNS.
Ingresamos a IoT Core, en la consola de AWS. En la pantalla principal de AWS IoT, en el menu de la izquierda seleccionar Actuar y luego Reglas:
Si no hay reglas, dar clic en Crear regla al centro de la pantalla, de lo contrario seleccionar el botón azul arriba a la derecha Crear .
En la siguiente pantalla ingresar los siguientes valores: Nombre : ReglaAlertaVelocidad Instrucción de consulta de regla:
SELECT "Alerta: valocidad mayor a 80" as msg from "tcu/vehicle/#" WHERE value > 80
La pantalla se vera de esta forma:
Posteriormente en la sección Definir o una varias acciones dar clic en Añadir acción en la siguiente pantalla seleccionar Enviar un mensaje como notificación push SNS y bajar la pantalla hasta Configurar acción
En la siguiente pantalla seleccionar el SNS que se creo previamente, y el tipo de formato debe ser RAW. Dar clic en Crear un rol (en la ventana emergente, escribir Iot_SNS_Rol y dar clic en Crear rol). Verificar que la política quedo adjunta con en la siguiente pantalla y dar clic “Añadir acción”
Y dar clic en Crear regla en la parte baja de la pantalla.
Nuevamente en la interfaz de Cloud9, sera necesario volver a ejecutar el script:
python device1.py
Tan pronto se tenga un valor mayor a 80 en Speed, sera disparada la regla:
Ahora, para ver los mensajes en la cola de SQS regresar al servicio y dar clic en el botón de arriba a la izquierda para listar las colas:
En la lista de colas, marcar la linea : ColaAlertasVelocidad y posteriormente “Enviar y recibir mensajes”
En la siguiente pantalla, en medio dar clic en el botón : “Sondeo de mensajes“ para comenzar a ver los que están en la fila. También llegaran estas alertas via mensaje de SMS al celular suscrito.
Por último paso, detener el script en Cloud9 para dejar de generar mensajes.