LoRaWAN デバイスメッセージを処理するルールを作成する - AWS IoT Wireless

LoRaWAN デバイスメッセージを処理するルールを作成する

AWS IoT ルールは、デバイスメッセージを他のサービスに送信します。AWS IoT は、LoRaWAN デバイスから受信したバイナリメッセージを処理して、メッセージを他の形式に変換して、他のサービスで使用しやすくすることもできます。

AWS IoT Core for LoRaWAN の送信先は、デバイスのメッセージデータを処理して他のサービスに送信するルールにワイヤレスデバイスを関連付けます。このルールは、AWS IoT Core for LoRaWAN がデバイスのデータを受信するとすぐに、そのデータに対して機能します。AWS IoT Core for LoRaWAN の送信先は、メッセージが同じデータ形式で、データを同じサービスに送信するすべてのデバイスで共有できます。

AWS IoT ルールがデバイスメッセージを処理する方法

AWS IoT ルールがデバイスのメッセージデータを処理する方法は、データを受信するサービス、デバイスのメッセージデータの形式、およびサービスが必要とするデータ形式によって異なります。通常、このルールは AWS Lambda 関数を呼び出して、デバイスのメッセージデータをサービスが必要とする形式に変換し、その結果をサービスに送信します。

次の図は、メッセージデータがワイヤレスデバイスから AWS のサービスに移動するときに、メッセージデータがどのように保護および処理されるかを示しています。

AWS IoT Core for LoRaWAN データがワイヤレスデバイスから AWS IoT およびその他のサービスにどのように渡されるかを示す画像。
  1. LoRaWAN ワイヤレスデバイスは、バイナリメッセージを送信する前に AES128 CTR モードを使用して暗号化します。

  2. AWS IoT Core for LoRaWAN は、バイナリメッセージを復号し、復号されたバイナリメッセージペイロードを base64 文字列としてエンコードします。

  3. 結果として生じる base64 でエンコードされたメッセージは、メッセージペイロード (JSON ドキュメントとしてフォーマットされていない) として、デバイスに割り当てられた送信先に記載されている AWS IoT ルールに送信されます。

  4. AWS IoT ルールは、ルールの設定に記載されているサービスにメッセージデータを送信します。

ワイヤレスデバイスから受信した、暗号化されたバイナリペイロードは、AWS IoT Core for LoRaWAN によって変更および解釈されません。復号されたバイナリメッセージペイロードは、base64 文字列としてのみエンコードされます。サービスがバイナリメッセージペイロードのデータ要素にアクセスするためには、ルールによって呼び出される関数によってデータ要素をペイロードから解析する必要があります。base64 でエンコードされたメッセージペイロードは ASCII 文字列であるため、後で解析するために保存することができます。

LoRaWAN デバイスのルールを作成する

AWS IoT Core for LoRaWAN は、メッセージブローカーを使用することなく、AWS IoT ルールを使用して、デバイスメッセージを他の AWS のサービスに直接安全に送信します。取り込みパスからメッセージブローカーを削除することで、コストを削減し、データフローを最適化します。

デバイスメッセージを他の AWS のサービスに送信するための AWS IoT Core for LoRaWAN ルールには、AWS IoT Core for LoRaWAN 送信先と、その送信先に割り当てられた AWS IoT ルールが必要です。AWS IoT ルールには、SQL クエリステートメントと少なくとも 1 つのルールアクションが含まれている必要があります。

通常、AWS IoT ルールクエリステートメントは、次のもので構成されます。

  • メッセージペイロードからデータを選択してフォーマットする SQL SELECT 句

  • 使用するメッセージを識別するトピックフィルター (ルールクエリステートメントの FROM オブジェクト)

  • アクションを実行する条件を指定するオプションの条件文 (SQL WHERE 句)

ルールクエリステートメントの例を以下に示します。

SELECT temperature FROM iot/topic' WHERE temperature > 50

LoRaWAN デバイスからのペイロードを処理するために AWS IoT ルールを構築する場合、ルールクエリオブジェクトの一部として FROM 句を指定する必要はありません。ルールクエリステートメントには SQL SELECT 句が含まれている必要があり、オプションで WHERE 句を含めることができます。クエリステートメントで FROM 句が使用されている場合は、無視されます。

LoRaWAN デバイスからペイロードを処理できるルールクエリステートメントの例を次に示します。

SELECT WirelessDeviceId, WirelessMetadata.LoRaWAN.FPort as FPort, WirelessMetadata.LoRaWAN.DevEui as DevEui, PayloadData

この例では、PayloadData は、LoRaWAN デバイスによって送信される base64 でエンコードされたバイナリペイロードです。

受信ペイロードのバイナリデコードを実行し、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

SELECT AND WHERE 句の使用の詳細については、「https://docs.aws.amazon.com/iot/latest/developerguide/iot-sql-reference.html」を参照してください。

AWS IoT ルールとその作成方法および使用方法については、https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.htmlhttps://docs.aws.amazon.com/iot/latest/developerguide/iot-rules-tutorial.html を参照してください。

AWS IoT Core for LoRaWAN 送信先の作成と使用については、「AWS IoT Core for LoRaWAN に送信先を追加する」を参照してください。

ルールでのバイナリメッセージペイロードの使用については、https://docs.aws.amazon.com/iot/latest/developerguide/binary-payloads.html を参照してください。

送信中のメッセージペイロードを保護するために使用されるデータセキュリティと暗号化の詳細については、AWS IoT Wireless でのデータ保護 を参照してください。

IoT ルールのバイナリデコードと実装例を示すリファレンスアーキテクチャについては、GitHub の 「AWS IoT Core for LoRaWAN Solution Samples」 を参照してください。