はじめに
以下の記事で、LoRaWANゲートウェイである Dragino LPS8 をセットアップし、The Things Network(TTN) に接続する方法について確認しました。
本記事では、Dragino LPS8 を、AWS IoT Core for LoRaWAN に接続させ、デバイスからLoRaWANネットワークを介して、AWSにデータの送信を行ってみます。
構成
全体の構成は、以下のようになります。
ゲートウェイの要件
LoRaWANゲートウェイが、AWS IoT Core for LoRaWAN に接続するためには、以下のことに対応している必要があります。
- LoRa Basics Station(2.0.4以降)に対応
前準備
IAMロール/ポリシーの作成を行います。
IAMロール/ポリシーの関係を以下に示していますが、IAMポリシーを作成したら、対応するIAMロールでそのポリシーを許可してください。
LoRaWANゲートウェイに設定するロール/ポリシー
AWS IoT Core for LoRaWAN で、ゲートウェイに付与するロール/ポリシーを作成します。
IAMロール:IoTWirelessGatewayCertManagerRole
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {}
}
]
}
IAMポリシー:AWSIoTWirelessGatewayCertManager
こちらは既存で存在しているポリシーになります。
IoTWirelessGatewayCertManagerRole の「許可」でポリシーを追加してください。
LoRaWANメッセージ受信時の転送ロール
AWS IoT Core for LoRaWAN で、ゲートウェイでメッセージをAWSサービスに転送するためのロール/ポリシーを作成します。
IAMロール:LPWAN-DeviceDestinationRole
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iotwireless.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
IAMポリシー:LPWAN-DeviceDestinationPolicy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": "arn:aws:iot:<リージョン>:<AWSアカウントID>:topic/$aws/rules/*"
},
{
"Effect": "Allow",
"Action": [
"iot:DescribeEndpoint"
],
"Resource": "*"
}
]
}
LoRaWANメッセージ受信時の転送ロール
IoT Core Rules で、受信したメッセージに対してアクションを行うためのロール/ポリシーを作成します。
ここでは、IoT Core に Publish するための権限を設定していますが、用途に応じて変更してください。
IAMロール:LPWAN-IoTRuleRole
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "iot.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
IAMポリシー:LPWAN-IoTRulePolicy
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:<リージョン>:<AWSアカウントID>:topic/*"
}
}
AWS IoT Core for LoRaWAN の設定
AWS IoT Core for LoRaWAN での設定は、複数のコンポーネントが関係します。
以下はイメージですが、おおよそ、このような関係になります。
ゲートウェイの登録
ゲートウェイの登録を行います。
AWS側でのゲートウェイでの設定
ゲートウェイを登録するために必要なEUI(Extended Unique Identifier )を確認しておきます。
LPS8 では、「LoRaWAN」→「LoRaWAN -- Basic Station」の画面で確認できます。
次に、AWSコンソールにログインし、AWS IoT Core for LoRaWAN の画面を開き、ゲートウェイの追加を行います。
ゲートウェイの設定を入力します。
- 「ゲートウェイのEUI」は、先ほど確認したEUIを指定してください。
- 「周波数帯」は、「AS923-1」 を選択してください。
ゲートウェイの証明書やエンドポイントの情報を確認し、ダウンロードしておきます。
これらの情報は、失くさないように保存しておいてください。
- 「ゲートウェイ証明書」の内容で、「証明書を作成」 ボタンを押下し、ダウンロードします。
- 「認証情報のプロビジョニング」の内容で、「CUPSエンドポイント」「LNSのエンドポイント」 の情報を、コピーして保存しておきます。
- 「認証情報のプロビジョニング」の内容で、「サーバー信頼証明書をダウンロード」 ボタンを押下し、ダウンロードします。
- 「ゲートウェイのアクセス許可」では、前準備で作成した 「IoTWirelessGatewayCertManagerRole」 ロールを指定してください。
この内容で、ゲートウェイの登録を行います。
LSP8側での設定
次に、LSP8側で、AWS側と連携するための設定を行います。
LPS8 で、「LoRaWAN」→「LoRaWAN -- Basic Station」の画面を開いてください。
AWS側でダウンロードやコピーした情報を指定します。
- Service Provider の項目で、「Amazon IoT -- Basic Stion」 を選択してください(※「Stion」となっているのは「Station」の誤字だと思いますが)。
- 「CUPS URI」の項目は、AWS側でコピーした 「CUPSエンドポイント」 の値を指定してください。
- 「LNS URL」の項目は、AWS側でコピーした 「LNSのエンドポイント」 の値を指定してください。
- AWS側でダウンロードしたファイルを、それぞれ、アップロードします。
- CUPS strust ・・・ サーバー信頼証明書の「cups.trust」
- LNS trust ・・・ サーバー信頼証明書の「lns.trust」
- Private key ・・・ ゲートウェイ証明書の「xxxxxx.private.key」
- Cert pem ・・・ ゲートウェイ証明書の「xxxxxx.cert.pem」
この状態で、「Save&Apply」 ボタンを押下してください。
この設定に切り替わると、「Current Mode」の部分に 「Basic Station -- AWS」 と表示されます。
ゲートウェイの接続確認
両方のゲートウェイの設定が完了したら、AWSコンソールの以下の詳細画面で内容を確認できます。
ゲートウェイ本体の電源がONになっており、接続が確認できたら、接続ステータスの部分が 「Connected」 になっていることを確認してください。
プロファイルの設定
デバイス共通となる設定内容を、プロファイルとして設定することができます。
AWS IoT Core for LoRaWAN では、「デバイスプロファイル」と「サービスプロファイル」の2つが存在します。
デバイスプロファイル
まず最初に、デバイスプロファイルを登録します。
デバイスプロファイルでは、以下のように設定を行います。
- 「デフォルトのプロファイルを選択してカスタマイズ」で 「AS923-1 - A」 を選択します。
- これは日本において利用できる周波数帯であるAS923-1と、デバイス側がクラスAに対応しているプロファイルを示しています。
- 利用するデバイスによって、適宜指定してください。
- 「デバイスプロファイル名」は、任意の名前を指定してください。
- 「周波数帯」は、日本で利用する場合は、原則 「AS923-1」 を指定してください。
- 「MACバージョン」は、、デバイス側で対応しているLoRaWANのバージョンを指定してください。特に指定がない場合は 「1.0.3」 を指定してください。
- 「リージョン別パラメータバージョン」は、デバイス側で対応している内容を指定してください。特に指定がない場合は 「RP002-1.0.1」 を指定してください。
- 「MaxEIRP」は、デバイスの電波の電力の強さを示します。ここでは 「15」 を指定しておきます。
サービスプロファイル
次に、サービスプロファイルを登録します。
サービスプロファイルでは、以下のように設定を行います。
- 「サービスプロファイル名」は、任意の名前を指定してください。
- 「AddGWMetaData」が、ONになっていることを確認してください。
- このパラメータをONにすると、各デバイスのデータ受信時に、RSSIやSNRといった電波状況を示すメタデータも付与されます。
登録が完了すると、以下のようになります。
送信先の設定
デバイスから、メッセージが届いた際の送信先を登録します。
送信先では、以下のように設定を行います。
-
「送信先名」は、任意の名前を指定してください。ここでは 「LoRaWAN_TestDestination」 とします。
- 分かりやすい名前を付けておいてください。
-
「ルール名を入力」を選択し、任意の名前を指定してください。ここでは 「LoRaWAN_TestIoTRule」 とします。
- ただし、この名前は後でIoT Ruleで使用される名前になるため、ルールを想定した名前にしておくと良いです。
-
ロールは、前準備で作成した 「LPWAN-DeviceDestinationRole」 を選択します。
- 「ロールにポリシーをアタッチ」を選択すると、この送信先に応じたIAMポリシーが自動作成され、指定されたIAMロールに追加されます。
登録が完了すると、以下のようになります。
IoT Rule の設定
受信したメッセージの処理を行う、IoTルールの登録を行います。
IoTルール名を指定します。
※注意※
ここでは、送信先で指定したルール名と合わせてください。
IoTルールでは、SQL構文が利用できます。
ここでは、受信したメッセージに対して、タイムスタンプを追加するように、以下のSQLを指定します。
SELECT *, timestamp() as timestamp
IoTルールのアクションを設定します。
ここでは、IoT Core に、MQTTメッセージとして再Publishするようにします。
アクションは、複数定義することも可能です。
- アクションで、 「Republish to AWS IoT topic」 を選択します。
- 送信先のトピックは、 「test/lorawan/messages」 とします。
- ロールは、前準備で作成した 「LPWAN-IoTRuleRole」 を選択します。
定義内容を確認し、IoTルールを作成します。
LoRaデバイスの設定
LoRaWANゲートウェイに接続される、LoRaデバイスの登録を行います。
デバイスは、以下のように設定を行います。
-
LoRaWAN仕様とワイヤレスデバイス設定
- 「ワイヤレスデバイスの仕様」では、「OTAA v1.0.x」 を指定します。
- ABP方式の指定も可能です。デバイスに合わせて指定してください。
- 「DevEUI」「AppKey」「AppEUI」は、デバイスで指定されている固有のIDを指定してください。
- 「ワイヤレスデバイス名」は、任意の名前を指定してください。
- 「ワイヤレスデバイスの仕様」では、「OTAA v1.0.x」 を指定します。
-
プロファイル
- 事前に作成したプロファイルを指定します。
- 「ワイヤレスデバイスプロファイル」は、「AS923-1-A-OTAA」 を選択します。
- 「サービスプロファイル」は、「Default service profile」 を選択します。
-
送信先
- 事前に登録した送信先を指定します。
- 「送信先名」は、「LoRaWAN_TestDestination」 を選択します。
位置情報の管理も可能ですが、今回は行わないので、スキップします。
「デバイスを追加」ボタンを押下すると、デバイスの登録が完了します。
これで、LoRaWANデバイスの登録が完了しました。
デバイスの詳細画面を確認し、「デバイストラフィック」のタブで、ゲートウェイなどの情報が表示されていれば、接続できていることが確認できます。
接続が確認できない場合、LoRaWANデバイスとLoRaWANゲートウェイの接続状況や、AWS側での設定を確認してください。
デバイスからのメッセージ受信
今回、デバイスからメッセージを受信すると、IoT Core に、MQTTメッセージがPublishされる設定にしています。
そのため、IoT Core のMQTTテストクライアントから、メッセージを確認しています。
IoTルールで指定したMQTTトピック設定を確認し、メッセージをSubscribeできるように設定します。
デバイスからメッセージを送信すると、以下のように、メッセージが確認できました。
いろいろなパラメータが確認できますが、いくつか重要なパラメータを以下に示します。
パラメータ | 説明 |
---|---|
PayloadData | デバイスから送信されたデータ(ペイロード)をBase64でエンコードした値 |
WirelessMetadata.FPort | デバイスが使用する FPort |
WirelessMetadata.LoRaWAN.DevEui | 送信元のデバイスのEUI |
WirelessMetadata.LoRaWAN.Gateways | 送信元のゲートウェイの情報 |
まとめ
AWS IoT Core for LoRaWAN と LoRaWANゲートウェイ LPS8 を使って、LoRaWANネットワークの処理が確認できました。
設定項目は多いですが、複数デバイスも一括で管理することが可能です。
また、メッセージ受信時の処理は、IoTデバイスがMQTTでメッセージングするときと同様に、IoTルールに集約できるので、受信したメッセージの処理も、他のAWSサービスに簡単に連携することができます。