LW01-NWPをAWS IoTで試す

 

はじめに

LW01-NWPのセンシングデータをAWS IoTに送信し、AWS IoTからLW01-NWPの出力を制御することができます。LW01-NWPでなくてもLoRaWANデバイスなら、AWS IoTと連動することができます。

AWS IoTと連動するためにThe Things Network(無料)を利用します。有料なのはAWSだけになります。

AWS IoTにまで届けば、後はAWSサービスを使って、センシングデータを保存・分析・制御することができます。

 

用意するもの

LoRaWANゲートウェイは、The Things Networkと通信できるタイプであれば何でも構いません。

 

全体の流れ

The Things Networkから動画で詳しい手順が公開されています。https://www.thethingsnetwork.org/docs/applications/aws/

動画で説明されていますが、連携するためのテンプレート(AWS CloudFormation)を実行します。このテンプレートを実行すると下記のことが行われます。

テンプレートの実行が成功すれば、いきなりAWS IoTでセンシングデータを確認できます。

 

AWS EC2キーペアの作成

テンプレートの入力の時にEC2のキーペアを選択する必要があるので、事前にAWS EC2キーペアの作成を行っておきます。既存のEC2のキーペアを使用する場合は作成する必要はありません。

AWS コンソール(https://aws.amazon.com/jp/console/)にログインし、EC2のサービスを選択します。

キーペア

左のメニューからキーペアを選択します。右上のキーペアの作成を押します。

AWSは、キーペアを使って暗号鍵を2つ作成します。作成した2つの内AWSが1つを保管し、もう一つを自分で厳重に保管します(流出禁止、ダウンロードも1回しかできない仕様です)。

キーペアが流出してもAWS以外で暗号鍵を作り出せません。インターネット網からEC2にアクセスするときには、ダウンロードした暗号鍵を使用してアクセスします。

実際には暗号鍵自体を送信はせずに、AWSが用意したデータを暗号化したものを送り、AWSは保管している暗号鍵でそれを復号して検証しています。

AWSサービス間であれば、キーペアだけを使って関連性を設定できます。

キーペア作成

名前を入力して、右下のキーペアを作成を押すとキーペアが作成され、自分の暗号鍵がダウンロードされます。

キーペア完了

 

The Things Networkのテンプレートを実行

Quick Startページ(https://www.thethingsnetwork.org/docs/applications/aws/quick-start.html)を開きます。

QuickStart

赤枠のus us-west-2を選択します。その後のeu-west-1でもap-southeast-1でもかまいません。どちらにせよリージョンが違うので、次のページで東京リージョンに変更します。

リージョン変更

右上のオレゴンを選択して、リージョンをアジアパシフィック(東京) ap-northeast-1に変更します。正確には使いたいAWS IoTがあるリージョンを選択します。

 

まずは、App IDを設定します。The Things Networkのコンソール(https://console.thethingsnetwork.org/)にログインして、アプリケーションの項目を開きます。

アプリケーションID

アプリケーションIDに表示されているものをApp IDの項目に入力します。

 

次にApp Access Keyを設定します。TTNの同じページの一番下にアクセスキーがあります。

アクセスキー

クリップボードにコピーボタンを押してから、App Access Keyの項目で貼り付けを実行してください。文字数が多いのでCopy&Pasteの方が安全です。

 

次に追加されるEC2インスタンスの設定をします。

EC2追加

Enviroment Nameの項目は自由です。Instance Typeの項目にはt3.microを選択します。

そして、SSH Keyの項目で先ほど作成したEC2のキーペアを選択します。

 

次にLW01-NWPのセンサ情報の送受信先ポート番号を設定します。要は、LoRaWANデバイスのダウンリンクのポート番号を設定します。

ポート番号

LW01-NWPとパソコンをUSBケーブルで接続し、下記のコマンドを実行すると

LW01-NWPの現在の設定情報が出力されます。

Lora-DataPortNoの項目がここで設定するLoRaWAN FPortの番号になります。

 

最後にAWS CloudFormationによってIAMリソースが作成される場合があることを承認しますに✓を付けてスタックの作成を実行します。成功すると、

テンプレート成功

スタックに追加された2つのステータスがCREATE_COMPLATEになります。

変更された内容は、

になります。

この段階で、LoRaWANデバイスから送信されたデータがAWS IoTに届くようになっています。

 

LW01-NWPのデータフォーマットを変換

LW01-NWPは、送信データ量を少なくするためにフォーマットがバイナリデータになっています。バイナリデータのままAWS IoTに送ると後の処理が難しくなるので、The Things Networkのスクリプト機能でJSONフォーマットに変換します。

The Things NetworkのPayload Formatsを開きます。

フォーマット

decoderの項目に下記のコードを貼り付けます。

encoderの項目に下記のコードを貼り付けます。

右下のペイロード機能を保存を押すと登録されます。

 

AWS IoTで確認

AWS IoTサービスを開いて、左メニューのテストを選択します。

テスト

赤枠の中はApp IDになります(The Things NetworkのアプリケーションID)。

トピックへのサブスクライブを実行し、LW01-NWP(LoRaWANデバイス)からセンシングデータが送信されるのを待ちます。

受信データ

受信に成功すると、データがJSONフォーマットで表示されます。この中のpayload_fieldsの項目がLW01-NWPから上がってきたセンシングデータになります。

また、LW01-NWPの出力を制御するには、

左メニューでモノを選択して、シャドウを選択します。

シャドウ

編集を選択して、シャドウステータスを編集することでLW01-NWPの出力を制御できます。

"desired" : {}の項目内に記述します。

"output" : "on"を記述すると、LW01-NWPの出力端子がONします。また、"output" : "off"を記述すると逆に出力端子がOFFします。

"rs232" : "012345"と記述すると、LW01-NWPのRS-232C出力端子から012345と出力されます。また、"rs485" : "ABCD"と記述すると、LW01-NWPのRS-485出力端子からABCDと出力されます。

記述した後に保存を押して確定してください。

 

終わりに

The Things Networkの動画には、この後AWS DynamoDBに保存するまで紹介されています。データベースに保存するのであれば、グラフを表示するまで紹介したいので、これ以降については別のノートに記載したいと思います。

AWS IoTから出力の制御までできるのでアプリケーションの幅が広がります。

センシングデータをビジネスに展開できるかどうか検証するために、まずはデータを蓄積して分析したいというお話はよく聞きます。商用のIoT Platformも便利ですが、最初はシンプルな機能をAWSサービスで開発して、その結果を元に機能を充実させていくのも良いかもしれません。

AWSは固定額ではなく従量課金なので、数台の検証から始める場合にはありがたいです。ちなみに今回のノートを作成している間の費用は1日1ドル以下でした。


(2020/12/25 記載)