Slide 1

Slide 1 text

AWSで作るGPSトラッキングシステム KMiura(@k_miura_io)

Slide 2

Slide 2 text

自己紹介 • 三浦 耕生(こうき) • 三次元地図のスタートアップのエンジニア • JAWS UG名古屋運営 • 好きなAWSのサービス: AWS IoT、 Lambda、ECS @k_miura_io koki.miura05

Slide 3

Slide 3 text

はじめに • 本セッションはJAWSミート2023の続きです • 個人的な検証内容であり所属企業に関連するものではありません(超重要) https://bit.ly/3ZJkCQI

Slide 4

Slide 4 text

今日のアジェンダ • デバイスからAmazon Location Serviceに位置情報を登録する • 位置情報を可視化する • 更に旅の気分を上げる

Slide 5

Slide 5 text

サイクルコンピュータをつくりたい • ロングライドだと走行距離や速度を記録し ておきたくなる • ハンドルに固定するサイクルコンピュータ なるものが売られている • GPSを使ったナビ機能が搭載されたモデ ルもある(値段は7, 8万円ほど)

Slide 6

Slide 6 text

頑張れば自作できるんじゃないか?

Slide 7

Slide 7 text

システム構成 https://docs.aws.amazon.com/ja_jp/location/latest/ developerguide/tracking-using-mqtt.html

Slide 8

Slide 8 text

使用デバイス • マイコン:M5Stack Core2 powered by AWS • GPSセンサー:M5Stack用GPSユニット (AT6558 + MAX2659)

Slide 9

Slide 9 text

デバイスのプログラム • UI Flowで簡単にGPSの情報をAWSに送信 する • 画面のレイアウトが直感的にできて便利 • UI FlowならAWS IoTの接続に対応したブ ロックが存在する

Slide 10

Slide 10 text

AWS IoT Core→Amazon Location Service • AWS IoT Coreで受け取ったトピックはAWS IoT Ruleを使うことでローコードで Amazon Location Serviceに接続できる • Lambdaを使うケースも公式ドキュメントにはある (https://docs.aws.amazon.com/location/latest/developerguide//tracking- using-mqtt-with-lambda.html)

Slide 11

Slide 11 text

IoT Rules • SQLステートメントはデバイスから送信されるデータをすべて受け取る • アクションには予め用意したTrackerを指定する

Slide 12

Slide 12 text

Location Serviceの アクション • デバイスID、経度、緯度はデバイス から送信されるトピックのキーを指定 • タイムスタンプはAWS IoTの組み込 み関数「timestamp()」を指定

Slide 13

Slide 13 text

DEMO

Slide 14

Slide 14 text

CLIで確認 • マネジメントコンソールだと記録を閲覧できないのでCLI で確認 • 最大で30日以内のロケーション履歴を取得できる • ガッツリ実家の位置がバレるので位置情報は赤塗りw

Slide 15

Slide 15 text

ここまでがJAWSミートでやったこと

Slide 16

Slide 16 text

どうせなら地図 で可視化したい

Slide 17

Slide 17 text

参考になりそうなサンプル • ドンピシャなサンプルが公開されてた(Reactを使用) • ここまでやってきた IoT Rules → Location Serviceの連携部分と可視化用の地図を用 意するCloudformationのテンプレート付き https://github.com/aws-samples/amazon-location- samples/tree/main/maplibre-js-react-iot-asset-tracking

Slide 18

Slide 18 text

無事に地図で可視化できた

Slide 19

Slide 19 text

可視化できたが… 正確に位置情報を取得できてない状態だとゼロ地点がプロットされている

Slide 20

Slide 20 text

どうしてこうなった? • GPSセンサーで取得される値をそのままAWSにPublishしてることでこうなっている • GPSセンサーで取得できるパラメータの中にある「quality」の値で判断することで送信す る位置情報を選別すると解決

Slide 21

Slide 21 text

新幹線で検証 quality=1のとき quality=0の時(トンネル内)

Slide 22

Slide 22 text

可視化した結果

Slide 23

Slide 23 text

一見するとできてるように見えるが

Slide 24

Slide 24 text

やけに検索結果が少ない… フィルターを追加したものの指定した範囲のデータが全部表示できてない気がする

Slide 25

Slide 25 text

どうしてこうなった? • APIの仕様上、1回のリクエスト最大で100件の履歴しか取得できない • 100件を超える履歴はAPIのレスポンスに入っているNextTokenを使うことで取得すること ができる →NextTokenを更新しながら履歴を順次追加することで指定した日時の範囲内のトラッカー履 歴を取得することができた

Slide 26

Slide 26 text

検索履歴をすべて表示できた

Slide 27

Slide 27 text

DEMO

Slide 28

Slide 28 text

更に旅を楽しむために • 目的地に近づいたら何かしらデバイスでイベント起こしたい • M5StackのLED光らせたい

Slide 29

Slide 29 text

Geofenceが使えそう

Slide 30

Slide 30 text

動かしてみた

Slide 31

Slide 31 text

システム構成 • geojson.ioなどで用意した geojsonをジオフェンスコレクショ ンに登録しておく • 登録しておいたジオフェンスにト ラッカーデバイスが入ったことを トリガーにEventBridge経由で Lambdaを起動してデバイスに メッセージをPublishさせている • 本当はStepFunctions使ってノー コードでやりたかったけど StepFunctionsでメッセージを Pushできなさそうだった…

Slide 32

Slide 32 text

今回のソースコード https://github.com/Miura55/amazon-location-iot-app

Slide 33

Slide 33 text

まとめ • Amazon Location ServiceとIoT Coreを連携することでコードを書かなくてもデ バイスの位置情報を記録することができる • 位置情報の可視化はAmplify UIやAWS SDKを組み合わせて自分でUIを用意す る必要がある • ジオフェンシングイベントを活かすことでデバイスに通知を飛ばすことができる Amazon Location Service × AWS IoTで楽しい旅を!

Slide 34

Slide 34 text

END