Crear reglas para procesar los mensajes del dispositivo LoRaWAN
Las reglas de AWS IoT envían mensajes del dispositivo a otros servicios. Las reglas de AWS IoT también pueden procesar los mensajes binarios recibidos desde un dispositivo LoRaWAN para convertirlos a otros formatos que faciliten su uso para otros servicios.
Los destinos de AWS IoT Core para LoRaWAN asocian un dispositivo inalámbrico a la regla que procesa los datos de los mensajes del dispositivo para enviarlos a otros servicios. La regla actúa sobre los datos del dispositivo en cuanto AWS IoT Core para LoRaWAN los recibe. Los destinos de AWS IoT Core para LoRaWAN pueden ser compartidos por todos los dispositivos cuyos mensajes tengan el mismo formato de datos y que envíen sus datos al mismo servicio.
Cómo procesa AWS IoT las reglas los mensajes de los dispositivos
La forma en que una regla de AWS IoT procesa los datos de los mensajes de un dispositivo depende del servicio que recibirá los datos, del formato de los datos de los mensajes del dispositivo y del formato de datos que requiera el servicio. Normalmente, la regla llama a una función de AWS Lambda para convertir los datos de los mensajes del dispositivo al formato que requiere un servicio y, a continuación, envía el resultado al servicio.
La siguiente ilustración muestra cómo se protegen y procesan los datos de los mensajes a medida que pasan del dispositivo inalámbrico a un servicio de AWS.
-
El dispositivo inalámbrico LoRaWAN cifra sus mensajes binarios mediante el modo CTR AES128 antes de transmitirlos.
-
AWS IoT Core para LoRaWAN descifra el mensaje binario y codifica la carga del mensaje binario descifrado como una cadena de base64.
-
El mensaje codificado en base64 resultante se envía como una carga de mensajes (sin el formato de un documento JSON) a la regla de AWS IoT descrita en el destino asignado al dispositivo.
-
La regla de AWS IoT dirige los datos del mensaje al servicio descrito en la configuración de la regla.
La carga binaria cifrada recibida desde el dispositivo inalámbrico no es alterada ni interpretada por AWS IoT Core para LoRaWAN. La carga descifrada del mensaje binario se codifica únicamente como una cadena de base 64. Para que los servicios accedan a los elementos de datos de la carga del mensaje binario, los elementos de datos deben ser extraídos de la carga mediante una función llamada por la regla. La carga del mensaje codificada en base64 es una cadena ASCII, por lo que podría almacenarse como tal para analizarla posteriormente.
Crear reglas para dispositivos LoRaWAN
AWS IoT Core para LoRaWAN utiliza reglas de AWS IoT para enviar de forma segura los mensajes del dispositivo directamente a otros servicios de AWS sin necesidad de utilizar el agente de mensajes. Al eliminar el agente de mensajes de la ruta de ingestión, se reducen los costes y se optimiza el flujo de datos.
Para que una regla de AWS IoT Core para LoRaWAN envíe mensajes de dispositivos a otros servicios de AWS, necesita un destino de AWS IoT Core para LoRaWAN y una regla de AWS IoT asignada a ese destino. La regla de AWS IoT debe contener una instrucción de consulta SQL y al menos una acción de regla.
Normalmente, la instrucción de consulta de la regla de AWS IoT se compone de:
-
Una cláusula SELECT de SQL que selecciona y formatea los datos de la carga del mensaje
-
Un filtro de tema (el objeto FROM de la instrucción de consulta de la regla) que identifica los mensajes que se van a utilizar
-
Una instrucción condicional opcional (una cláusula WHERE de SQL) que especifica las condiciones sobre las que actuar
A continuación, se muestra un ejemplo de una instrucción de consulta de regla:
SELECT temperature FROM iot/topic' WHERE temperature > 50
Al crear reglas de AWS IoT para procesar las cargas útiles de los dispositivos LoRaWAN, no es necesario especificar la cláusula FROM como parte de la cosa de consulta de reglas. La instrucción de consulta de la regla debe tener la cláusula SQL SELECT y, de forma opcional, puede tener la cláusula WHERE. Si la instrucción de consulta utiliza la cláusula FROM, se ignora.
A continuación, se muestra un ejemplo de una instrucción de consulta de reglas que puede procesar cargas de dispositivos LoRaWAN:
SELECT WirelessDeviceId, WirelessMetadata.LoRaWAN.FPort as FPort, WirelessMetadata.LoRaWAN.DevEui as DevEui, PayloadData
En este ejemplo, PayloadData
es una carga binaria codificada en base64 enviada por su dispositivo LoRaWAN.
Este es un ejemplo de instrucción de consulta de reglas que puede realizar una decodificación binaria de la carga entrante y transformarla en un formato diferente, como JSON:
SELECT WirelessDeviceId, WirelessMetadata.LoRaWAN.FPort as FPort, WirelessMetadata.LoRaWAN.DevEui as DevEui, aws_lambda("arn:aws:lambda:<region>:<account>:function:<name>", { "PayloadData":PayloadData, "Fport": WirelessMetadata.LoRaWAN.FPort }) as decodingoutput
Para obtener más información sobre el uso de las cláusulas SELECT Y WHERE, consulte https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-reference.html.
Para obtener información sobre cómo utilizar la las reglas de AWS IoT para crearlas y utilizarlas, consulte https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html y https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules-tutorial.html.
Para obtener información sobre cómo crear y utilizar destinos de AWS IoT Core para LoRaWAN, consulte Agregar destinos a AWS IoT Core para LoRaWAN.
Para obtener información sobre el uso de cargas de mensajes binarios en una regla, consulte https://docs.aws.amazon.com/iot/latest/developerguide/binary-payloads.html.
Para obtener más información sobre la seguridad y el cifrado de los datos utilizados para proteger la carga del mensaje durante su viaje, consulte Protección de datos en AWS IoT Wireless.
Para ver una arquitectura de referencia que muestre un ejemplo de decodificación binaria e implementación de reglas de IoT, consulte Ejemplos de soluciones en GitHub de AWS IoT Core para LoRaWAN