AWS IoT Coreの 新ルール Location Action を試してみる
こちらの記事は、
AWS Community Builders Advent Calendar 2022
12/13分の記事です。すみません。1日遅れました。
今回は、10月に出たAWS IoT Coreでルールを指定して、Amazon Location Serviceにデータを投入する機能、聞いた時にやってみないーと思いつつ、やっていなかったので、こちらをやってみました。
ちなみに、こっちとは違うのでご注意を。(ちょっと触って、自分がやりたいのとは違うと思った人(ドキュメントちゃんと読め事案))
AWS IoT Coreにデータを送信する
データの送信元のデバイスには、
SORACOMさんが発売しているGPSマルチユニットを利用します。
個人的には2022年12月現在、位置情報を最も簡単に取得できるデバイスだと思っています(異論は認めます)
元々、検証がてら、Amazon Location Serviceには、以下のような構成で、データを投入しています。
SORACOM Funkというサービスを使って、AWS Lambdaを呼び出して、Lambda関数内で、AWS Location Serviceにデータを投入するという構成です。
これをAWS IoT Coreにデータを送信するように変えます。
まず、SORACOM側で利用するサービスをAWS IoTアダブターのあるSORACOM Funnelに変更します。
この辺の変更方法は、SORACOM側の設定なので、割愛します。
以下のドキュメントの通りの手順で行いました。
設定に問題なければ、IoT Core側に以下のような感じで、データが送信されてます。
{
"credentialsId": "soracom-funnel-iot-core",
"operatorId": "OP1234567890",
"destination": {
"provider": "aws",
"service": "aws-iot",
"resourceUrl": "xxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com/funnelTopic/#{imei}",
"payloadsOnly": false,
"sendPayloadsAsBinary": false
},
"sourceProtocol": "udp",
"payloads": {
"lat": 35.111111,
"lon": 139.222222,
"bat": 3,
"rs": 2,
"temp": 22.2,
"humi": 24.3,
"x": 0,
"y": 896,
"z": -576,
"type": 0
},
"timestamp": 1671026100175,
"imsi": "123456789012345",
"imei": "987654321012345"
}
緯度、経度以外にも、温湿度のデータも送られてきますが、今回は利用しません。
Rule設定
データが来たことを確認できたので、Ruleの設定を行います。
Ruleの名前を設定します。
続いて、SQLステートメントを設定します。
とりあえず、受信したデータを全て送るようにします(改善したい)
次の画面でルールアクションを設定します。「場所(Locationそのまま日本語になってますね)」を選択します。
選択すると、送信するトラッカーや送信する項目を入力するフィールドが出てくるので入力します。
デバイスIDですが、文字列を埋め込むこともできますが、複数デバイス送信となると、そうもいかないので、
受信データのうち、IMEI(International Mobile Equipment Identity)という端末個別の番号を使うことにしました。${imei}
という感じでセットします。
気づかず、設定できねーと悩んだ人です。
緯度、経度は、payload.lat と payload.lon にセットされてくるので、
それらを${payload.lat}
${payload.lon}
と指定します。
timestampも渡ってくる値をそのまま使えるので、同じように ${timestamp}
で指定します。
IAMロールも適切なのがなければここで作成できます。
なお、作成されるロールは、選択したトラッカーにデータを投入(BatchUpdateDevicePosition)できるものでした。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "geo:BatchUpdateDevicePosition",
"Resource": "arn:aws:geo:ap-northeast-1:123456789012:tracker/necklaceOfArtemisSystemMapTracker"
}
]
}
あとは登録すればOKです。
動作確認
さて、持ち歩いてみて、自宅のそばのモールにGeoFenceを設定してあるので位置情報が送信されて、GeoFenceで検知するのを確認します。
こんな感じで、全く問題なしでした。(位置バレするのでめっちゃ隠してすみません)
※通知の内容、SORACOM UGの勉強会で設定したままでしたorz
まとめ
SQLの部分、まだまだ改善の余地ありますが、
ルールの設定だけでAmazon Location Serviceへデータ投入ができ、GeoHenceでの検知もできました。
AWS Lambda好きとしては、Lambdaからデータで投入の方が・・・と思うんですが、
AWS IoT CoreのRule設定だけで投入できるのは楽ですね。
しばらくはこっちの構成にしておこうかなと思います。
今回久々にIoT Core触ってみて、Rule色々あることに改めて気づいたので、他のも試してみようかなと思います。
Discussion