- 新しい順
- 投票が多い順
- コメントが多い順
なるほど、ではデバイスの送信先を作成する際に指定したIAM Roleの中身を確認してください。添付画像のように、デバイスのコンソール画面から「ロール名」をクリックすると表示されます。(英語画面ですみません)
正常に自動生成されていれば問題ないはずですが、ここで指定したルール(のBasic Ingest先)に対するiot:Publishアクションが許可されていることが必要です。例えばこんな感じ:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:Publish"
],
"Resource": "arn:aws:iot:ap-northeast-1:+++++++++++++:topic/$aws/rules/RuleName" <-- これ
},
{
"Effect": "Allow",
"Action": [
"iot:DescribeEndpoint"
],
"Resource": "*"
}
]
}
話は変わりますが、送信先としてルールを記述するとBasic Ingestになり、コストは下がりますが制約が増え、柔軟性が失われます。これが問題ないかどうか、確認しておく必要があるかもしれません。
- AWS IoT Core for LoRaWANの設定で、デバイスにdestinationを割り当てていると思います。このdestinationに記載されているmqtt topicが正しいかどうか、確認してください。
- 次に、MQTT test clientでトピック "#" をサブスクライブし、デバイスからデータが送信されるタイミングで正しくデータが届いているか確認してください。
- このとき、1.で定義されたトピックと、実際にデータが届いたトピックが一致しているかどうか確認してください。
ここまで問題がなければIoT Core for LoRaWAN側の設定には問題がないと思われます。並行して
- MQTT test clientから、topic ruleが見ているトピックに対してメッセージを送信してみてください。
設定に問題がなければruleが正常に起動され、所定の処理が行われるはずです。これにより問題の在りかが絞れますので、状況を教えてくだされば対応できるかもしれません。
回答くださりありがとうございます。 ・1についての返答 デバイスの送信先では「ルール名を入力」を選択しているため、トピック名は入力していません。 なお、ルール名は「メッセージのルーティング」のルールと同じものを入力しています。 公式の開発者ガイドを見る限り、こうすれば「メッセージのルーティング」で定義しているルールが実行される認識なのですが、もしかして誤りでしょうか。 ・2についての返答 #でサブスクライブしましたが、データは届いていないようでした。
AWS IoT Core for LoRaWANを使用している場合、IoT Ruleが実行されない問題には複数の原因が考えられます。以下の点を確認してみてください:
-
AWS IoT Core for LoRaWAN destinationの設定: LoRaWANデバイスのメッセージを処理するには、AWS IoT Core for LoRaWAN destinationとそれに割り当てられたAWS IoT ruleが必要です。destinationが正しく設定されているか確認してください。
-
Rule queryステートメントの確認: LoRaWANデバイスのペイロードを処理する場合、通常のMQTTトピックとは異なる方法でルールを設定する必要があります。FROMクエリは不要で、SELECTクエリでペイロードから必要なデータを抽出する必要があります。
-
ペイロードのデコード: LoRaWANデバイスは暗号化されたバイナリメッセージを送信します。AWS IoT Core for LoRaWANはこれを復号化し、base64エンコードされた文字列として送信します。ルール内でこのペイロードを正しくデコードしているか確認してください。
-
IAMロールの権限: ルールに関連付けられたIAMロールが、Lambda、DynamoDB、CloudWatchなどの設定したアクションを実行するための適切な権限を持っているか確認してください。
-
エラーアクションの設定: CloudWatchへのエラー転送が正しく設定されているか再確認してください。
-
Basic Ingestの使用: メッセージングコストを削減するためにBasic Ingestを使用している場合、ルールの動作に影響を与える可能性があります。設定を確認してください。
これらの点を確認しても問題が解決しない場合は、AWS IoT Core for LoRaWANのログやメトリクスを詳細に調査し、デバイスからのメッセージがどこまで到達しているかを確認することをお勧めします。また、AWS サポートに問い合わせて、より詳細な診断を受けることも検討してください。
Sources
Create rules to process LoRaWAN device messages - AWS IoT Wireless
Rules for AWS IoT - AWS IoT Core
自己解決しました。 原因はArduino MKR WAN 1310のライブラリでした。 公式のライブラリ「MKRWAN_V2」を使用していたのですが、「MKRWAN」に変更してファームウェアを書き換えたところ、IoTルールが実行されるようになりました。 なぜV2だとIoTルールが実行されないのかまでは分かりません。
関連するコンテンツ
- AWS公式更新しました 2年前
- AWS公式更新しました 1年前
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前
回答ありがとうございます。 また、Basic Ingestの制約についてご教示くださり、ありがとうございます。 この問題が解決したら検討いたします。
デバイスの送信先に指定しているロールですが、Resourceで正しいルールを指定していました。 このロールは送信先の作成時に新規で自動作成したロールとなります。
また、CloudWatchのAWSIotLogsV2を確認しました。 デバイスからデータを受信するとログは出力されていますが、調査に役立ちそうな情報はありませんでした。。。
ちなみに、デバイス(Arduino MKR WAN 1310)から送信しているデータは平文のバイナリとなります。 もしかして、暗号化する必要があるでしょうか。
もし知見がございましたら、ご教示いただけると助かります。
なるほど、ではArduinoデバイス側の問題かもしれませんね。他にLoRaWANデバイスがあればいいのですが…
デバイスに問題があるとすると、ひとつはアクティベーションかもしれません。現在、OTAAとABPのどちらを使っていますか? またデバイス側のログに、アクティベーション成功の記録は残っていますか? もし不明なら、コードを変更して成功 or NOTが分かるようにすると良いでしょう。 他には、デバイスが利用しているアクティベーションのバージョン(OTAAであれば1.0.x or 1.1)とAWS IoT側の設定が一致しているかどうか、AWS IoT側のデバイス設定とプロファイルの設定が一致するか、などを確認するといいと思います。
認証方法はOTAAを使用しており、デバイスのコンソールログでは認証に成功したと出ています。 また、デバイスがアップリンクするとAWSの「AWS IoT > 管理 > LPWAN デバイス デバイス」にある「前回のアップリンク受信日時」が変わります。 そのため、OTAAの認証は成功している認識です。
解決できそうにないので、AWSを使用するのはあきらめて、TTNを利用しようと思います。 親切に回答してくださり、誠にありがとうございました。