Amazon Location Service入門ワークショップ-トラッカー
トラッカーでデバイスの位置や移動履歴を追跡できます。
目次
関連記事
- Amazon Location Service入門ワークショップの前提環境準備
- Amazon Location Service入門ワークショップ-マップの操作
- Amazon Location Service入門ワークショップ-ジオコーディング
- Amazon Location Service入門ワークショップ-ルート計算
- Amazon Location Service入門ワークショップ-ジオフェンス
GetDevicePosition
デバイスの位置を取得できます。
1 2 |
aws location get-device-position --device-id Vehicle-1 --tracker-name WorkshopAssets |
ワークショップアプリで[Trackers]を押下して、マップ上をクリックすると、車アイコンのデバイスが追加されます。
これがVehicle-1なので上記のようなコマンドで位置情報が得られます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "DeviceId": "Vehicle-1", "Position": [ 135.50136786073773, 34.6693451694434 ], "PositionProperties": { "DriverId": "321", "VehicleSpeed": "22 km/h" }, "ReceivedTime": "2023-02-04T23:45:51.418000+00:00", "SampleTime": "2023-02-04T23:45:51+00:00" } |
GetDevicePositionHistory
ワークショップアプリでマップを数回クリックしてデバイスを複数地点に移動させて、[View History]ボタンを押下すると移動履歴が表示できます。
GetDevicePositionHistoryアクションで情報が取得できています。
1 2 |
aws location get-device-position-history --device-id Vehicle-1 --tracker-name WorkshopAssets |
CLIの場合、このようなコマンドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
{ "DevicePositions": [ { "DeviceId": "Vehicle-1", "Position": [ 135.50240395254173, 34.66936701898287 ], "PositionProperties": { "DriverId": "321", "VehicleSpeed": "44 km/h" }, "ReceivedTime": "2023-02-04T23:32:45.676000+00:00", "SampleTime": "2023-02-04T23:32:45+00:00" }, { "DeviceId": "Vehicle-1", "Position": [ 135.50136786073773, 34.6693451694434 ], "PositionProperties": { "DriverId": "321", "VehicleSpeed": "22 km/h" }, "ReceivedTime": "2023-02-04T23:45:51.418000+00:00", "SampleTime": "2023-02-04T23:45:51+00:00" }, ~省略~ ] } |
位置情報のリストが取得できます。
この情報は30日間Amazon Location Serviceに保存されています。
30日間以上保存が必要な場合は定期的に出力してS3などに保存します。
BatchUpdateDevicePosition
デバイスを移動させます。
1 2 3 4 5 6 7 |
aws location batch-update-device-position \ --tracker-name WorkshopAssets \ --updates Accuracy={Horizontal=24},\ DeviceId=Vehicle-1,\ Position=135.527926,34.687185,\ SampleTime=$(date +%s) |
大阪城に移動させるコマンドです。
このコマンドではドライバーIDや速度といった属性をもたせることができていません。
パラメータにPositionPropertiesを追加することでもたせられます。
1 2 3 4 5 6 7 8 |
aws location batch-update-device-position \ --tracker-name WorkshopAssets \ --updates Accuracy={Horizontal=24},\ DeviceId=Vehicle-1,\ Position=135.492302,34.700360,\ SampleTime=$(date +%s),\ PositionProperties='{DriverId=321,VehicleSpeed="14 km/h"}' |
IoT CoreとMQTTを使ったトラッキング
IoT CoreルールからLambda関数を呼び出してトラッカーを更新します。
IAMロールの作成
Lambda関数用のIAMロールを作成しました。
ポリシーは、AWS管理ポリシーAWSLambdaBasicExecutionRoleと、次のインラインポリシーを追加しました。
1 2 3 4 5 6 7 8 9 10 11 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "geo:BatchUpdateDevicePosition", "Resource": "arn:aws:geo:us-east-1:123456789012:tracker/WorkshopAssets" } ] } |
Lambda関数の作成
ワークショップ手順に用意されている次のコードでPython3.9ランタイムのLambda関数を作成しました。
IoT Coreイベントから渡されるlocation情報などでトラッカーを更新するコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
from datetime import datetime import json import os import boto3 TRACKER_NAME = "WorkshopAssets" def lambda_handler(event, context): update = { "DeviceId": event["payload"]["deviceid"], "SampleTime": datetime.fromtimestamp(event["payload"]["timestamp"]).strftime("%Y-%m-%dT%H:%M:%SZ"), "Position": [ event["payload"]["location"]["long"], event["payload"]["location"]["lat"] ] } if "accuracy" in event["payload"]: update["Accuracy"] = event["payload"]['accuracy'] if "positionProperties" in event["payload"]: update["PositionProperties"] = event["payload"]['positionProperties'] client = boto3.client("location") response = client.batch_update_device_position(TrackerName=TRACKER_NAME, Updates=[update]) return { "statusCode": 200, "body": json.dumps(response) } |
AWS IoT Coreルールの作成
IoT Coreにアクセスして、[メッセージのルーティング]-[ルール]でルールの作成をしました。
SQLステートメントは手順通りSELECT * FROM ‘devices/Vehicle-1’にしました。
作成したLambda関数を指定しました。
テスト
AWS Iot Coreコンソールの[MQTT テストクライアント]-[トピックに公開する]で、トピック名devices/Vehicle-1として、次を設定しました。
timestampは過去30日以内が必要なので、ターミナルでdate +%sで求めました。
1 2 3 4 5 6 7 8 9 10 |
{ "payload": { "deviceid": "Vehicle-1", "timestamp": 1675584473, "location": { "lat": 34.652523, "long": 135.506286 }, "accuracy": { "Horizontal": 20.5 }, "positionProperties": { "DriverId": "321", "VehicleSpeed": "28 km/h" } } } |
トラッカーが更新された車が通天閣に移動しました。
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。
【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。
【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
AD Connectorを作成してシームレスにドメイン参加する
VPN接続先のADで管理されているドメインにEC2 Windowsインスタンスか …
-
-
AWS Organizationsで組織全体のAWS CloudTrailを有効にしました
Organizationsのサービスメニューから、CloudTrailを選択して …
-
-
AWS Lambdaで Unable to import module エラーが発生したときは
そもそも、Pycharmのナビゲーションペインでディレクトリごとドラッグ& …
-
-
静的と動的って何ですか?と営業さんに聞かれたので端的に説明してみました
AWS認定クラウドプラクティショナーの勉強をしている営業さんに、「S3で静的オブ …
-
-
EC2インスタンスが到達不能になって復旧してMackerelで監視し始めた
きっとばりばり使っておられる方ならよくある事なんだろうけど、はじめて体験したので …
-
-
AWSアカウント内のすべてのS3バケットを削除するLambda(Python)
やりたいこと 特定アカウント内のS3バケットを全部削除したいです。 バケット内の …
-
-
Amazon CloudWatch クロスリージョンクロスアカウントダッシュボードを作成
本ブログのCloudFrontとWAFのアカウントと、EC2、RDS、S3などオ …
-
-
ヤマムギ vol.10 (AWS)EC2モニタリングハンズオン 手順
このブログは2020/5/6に開催しました、「ヤマムギ vol.10 (AWS) …
-
-
Amazon Connect 発信イベントをEventBridgeで確認
Amazon Connectから発信した電話に出たのか、出なかったのかを確認した …
-
-
AWS Organizations組織の移動
AWS Organizations組織の移動 やりたいことは、Organizat …