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" } } } |
トラッカーが更新された車が通天閣に移動しました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
S3バケットにWebフォントをアップロードしてCORSを設定する
Webフォントファイルは、モジワク研究さんのマメロンを使用させていただきました。 …
-
AWS Control TowerにOUを追加する
AWS Control TowerにOUを追加する 管理アカウントでAWS Co …
-
ブログ画像のシンガポールリージョンへのレプリケーションはじめました
このブログの画像はS3バケットに保存して、CloudFront経由で配信していま …
-
AWS AmplifyでTodoアプリを作るハンズオンをやってみました
【お手軽ハンズオンで AWS を学ぶ】AWS Amplify で Todo アプ …
-
RDS + VPC + Lambda + API Gateway + CloudFront + WAF + ACMでAPIを構築する
RDSのMySQLの情報を与えられたリクエストをキーにしてjsonで返すAPIを …
-
Elastic BeanstalkでflaskアプリケーションデプロイのチュートリアルをCloud9で
Elastic Beanstalk への flask アプリケーションのデプロイ …
-
Amazon LinuxのNginx+RDS MySQLにレンタルWebサーバーからWordPressを移設する(失敗、手戻りそのまま記載版)
勉強のためブログサイトを長らくお世話になったロリポップさんから、AWSに移設する …
-
AWS Lambda KMSを使って環境変数を暗号化、復号化する(Python)
Lambda内で外部APIを使用する場合などをユースケースとして、環境変数をKM …
-
共有AMIのコピー時にエラー「You do not have permission to access the storage of this ami」
他アカウントから共有されたAMIをコピーする際に、「You do not hav …
-
Developers Summit 2018 「AWSのフルマネージドな環境でCI/CDをやってみよう!AWS Cloud9からAWS Fargateへの継続的デプロイをご紹介」を聞きました
※写真は展示のAmazon Echoです。 以下は、思ったことや気になったことを …