本記事はソラコムが提供する「SORACOM公式ブログ」に掲載された「SORACOM Beam SigV4によるAWS Location Serviceへのデータ連携とジオフェンシング」を再編集したものです。
目次
Amazon Location Serviceとは?ジオフェンスをやってみる
1.Amazon Location Service Trackingへ位置情報の送信
2.Geofence Collection作成
3.Amazon Simple Notification Serviceの作成
4.Amazon EventBridgeとAmazon SNSの連携
5.IAMロール権限の編集
6.TrackersとGeofenceの関連付け
7.デバイスから位置情報の送信と通知
さいごに
皆様、こんにちは。ソリューションアーキテクトの松永(ニックネーム:taketo)です。
今回は先日AWS Signature V4へ対応したデータ転送サービス「SORACOM Beam」(以下、Beam)を使ったAmazon Location Serviceへの連携についてご紹介致します。
これにより、デバイスに認証情報と SigV4 生成ロジックを持たずともAmazon Location ServiceのAPIを呼び出すことが可能になります。例えば、デバイスの位置情報を送信しAmazon Location Serviceに保管したり、Amazon Location ServiceのGeofence機能で送信された位置情報を元に特定のエリアに入ったことを検知し通知などのアクションを実行するといったことが可能になります。AWS Location Serviceの位置情報を保管するサービスTrackingへの連携方法は「SORACOMユーザードキュメント:IAM 認証を利用して Amazon Location Service の Tracking にリクエストを送信する」を参照ください。本ブログでは、そもそもAmazon Location Serviceとはなにか?ジオフェンスを利用するにはどうするのかなど説明をさせて頂きます。
Amazon Location Serviceとは?
公式サイトには下記のように記載されていますね。Amazon Location Serviceを利用することにより、位置情報を利用したアプリケーションを容易に開発することができます。
Amazon Location Service は、デベロッパーが地理空間データと位置情報機能をアプリケーションに追加するために使用できる位置情報ベースのサービスです。お客様は、マップ上でデータを視覚化し、ルートを推奨できるほか、ジオコーディングを使用してプレーンテキストの住所を地理座標に変換したり、リバースジオコーディングを使用して緯度と経度の座標を住所に変換したりすることもでき、さらに車両フリートなどのアセットをモニタリングおよび追跡できます。
Amazon Location Serviceには「AWS公式サイト:Amazon Location overview」に記載されている通り、5つ機能が存在します。それぞれどのような機能か簡単に解説します。
- Maps:お客様のカスタムアプリケーションに地図を表示する機能を追加することができます。
- Place indexes:施設の位置情報などを検索することができ、例えば「東京スカイツリー」というテキストから実際の東京スカイツリーの緯度経度や住所を取得することができます。
- Route:2つの緯度経度情報から経路を割り出すAPIで、リアルタイムの混雑状況を考慮した上で移動における経路情報や所要時間を計算します。車での移動経路やその所要時間を表示することができるようになります。
- Trackers:デバイスの位置情報を保管することができMapsと合わせてデバイスの所在を表示するなどが可能になります。
- Geofence:Trackersの移動において事前に指定したエリアへ入る・出る挙動をした際にイベントを発行しAmazon EventBridgeに連携することができます。Amazon EventBridgeを返して通知など処理が可能になります。
Amazon Location Service機能(出典:AWS公式サイト:Amazon Location overview)
ジオフェンスをやってみる
デバイスが特定のエリアに出入りしたことを検知するジオフェンスをやってみましょう。実装に関しては、Amazon Location Serviceの「AWS公式ドキュメント:Geofencing an area of interest using Amazon Location」も参考にしてみてください。
本ブログの例では、ジオフェンスへのデバイスが出入りしたタイミングでメールを送信する例をご紹介します。
1.Amazon Location Service Trackingへ位置情報の送信
まずは、「SORACOMユーザードキュメント:IAM 認証を利用して Amazon Location Service の Tracking にリクエストを送信する」の通り設定し、デバイスからAmazon Location Serviceへ位置情報を送信する仕組みを構築してください。
2.Geofence Collection作成
Amazon Location ServiceからGeofence Collectionを作成します。この時、EventBridgeのルールを有効にしておくと、通知サービスへの連携が簡単にできます。作成したGeofence Collectionに検知対象のエリアの緯度経度情報を登録します。エリア情報はgeojson.ioを利用すると、様々な形のジオフェンスを定義できJsonのファイルをダウンロードできます。「AWS公式ガイド:add geofence」を参考に、ダウンロードしたGeofence Collectionへ登録してください。
本ガイドの例では、SORACOMの赤坂オフィス周辺にジオフェンスを登録し、このエリアに出入りするデバイスを検知します。
3.Amazon Simple Notification Serviceの作成
Amazon Simple Notification Service(以降、Amazon SNS)を利用して、Emailを送信する仕組みを構築します。Amazon SNSのトピックにイベントが入ったら、SubscriptionがEmailを送信する仕組みを例としております。
4.Amazon EventBridgeとAmazon SNSの連携
Amazon Location ServiceのGeofence CollectionのEventBridgeのルールを編集し、前ステップで作成したAmazon SNSのTopicを連携先として指定します。この作業によりAmazon Location Serviceがジオフェンスのイベントを検知した際に、Amazon SNSを通じてEmailが送信される仕組みができます。
5.IAMロール権限の編集
ステップ1で参照した「ガイド:ステップ 1: IAM ロールを作成して SORACOM の AWS アカウントに割り当てる」で作成したIAMロールを編集して、「geo:AssociateTrackerConsumer」権限を付与してください。デバイスの位置情報をジオフェンスと関連付けするAPIを実行するのに必要となります。
*編集後のIAMロール権限の例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "geo:GetDevicePositionHistory", "geo:AssociateTrackerConsumer", "geo:TagResource", "geo:UpdateTracker", "geo:BatchUpdateDevicePosition" ], "Resource": "arn:aws:geo:ap-northeast-1:***:tracker/*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "geo:CreateTracker", "Resource": "*" } ] }
6.TrackersとGeofenceの関連付け
デバイスから、下記のようにリクエストを送信して、デバイスの位置情報をGeofence Collectionに登録したジオフェンスの監視対象として登録します。
#Link tracker with geo fence import requests import json geofence_arn_akasakaoffice = "{ステップ2で作成したGeofence CollectionのARN}" ls_trackers_consumer_url = "http://beam.soracom.io:18080/tracking/v0/trackers/" + tracker_id + "/consumers" consumer_request = { "ConsumerArn": geofence_arn_akasakaoffice } linked_tracker = requests.post(ls_trackers_consumer_url, data=json.dumps(consumer_request)).json() print(linked_tracker)
7.デバイスから位置情報の送信と通知
それでは、早速デバイスから位置情報を送信し、Emailが来ることを確認します。
「ガイド:データを送信する」を参考に、ジオフェンスの外から中、もしくは中から外へ移動するように位置情報を送信してみましょう。
例として、新橋駅から虎ノ門、SORACOMの赤坂オフィスと移動する緯度経度をサンプルとして2秒間隔で送信しています。
すると、ほぼ遅延なくEmailが受信できました。良くみるとEventTypeに「Enter」とあることからジオフェンスに入ったことが検知できたことがわかります。
#Update device positions import requests import json import datetime import time ls_trackers_positions_url = "http://beam.soracom.io:18080/tracking/v0/trackers/" + tracker_id + "/positions" locations = [[139.7583, 35.6664], [139.7501, 35.6701], [139.744207, 35.669823]] for location in locations: update_location = { "Updates": [ { "Accuracy": { "Horizontal": 1 }, "DeviceId": device_id, "Position": location, "SampleTime": datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%fZ') } ] } updated_tracker = requests.post(ls_trackers_positions_url, data=json.dumps(update_location))#.json() print(updated_tracker) time.sleep(2)
さいごに
いかがだったでしょうか?IoTプロジェクトの中でデバイスのトラッキングは非常に多くの事例があります。Amazon Location Serviceを利用することで、位置情報を扱うカスタムアプリケーションが構築できますが、SORACOM Beamを経由することでよりセキュアで簡単にデータ連携ができることがわかりますね。
是非、お客様のプロジェクトでご活用ください!
― ソラコム松永 (taketo)
投稿 SORACOM Beam SigV4によるAWS Location Serviceへのデータ連携とジオフェンシング は SORACOM公式ブログ に最初に表示されました。
この連載の記事
-
第489回
デジタル
業界別に学べる、IoT・デジタル化の課題と解決策の動画を公開 -
第488回
デジタル
M5StackからSORACOM、そしてAWSを体験!北陸のIoTイベント ― IoT Get Started Day レポート -
第487回
デジタル
ソラコムサンタより愛をこめて 2024 -
第486回
デジタル
SORACOMをもっと便利に!無料機能フル活用&SIMの選び方 -
第485回
デジタル
省電力通信LTE-M対応の小型マイコンボードをSORACOM IoTストアで提供開始、ローコードIoTアプリケーションビルダー「SORACOM Flux」の料金プランを発表 takuyaのほぼ週刊ソラコム 11/30-12/13 -
第484回
デジタル
AWS re:Invent 2024に見る、IoTの成熟と生成AIとの融合 -
第483回
デジタル
二歳半の子供を持つエンジニアの一日の働き方 -
第482回
デジタル
VPN 対応の産業用 LTE ルーターの価格改定【30%オフ】 -
第481回
デジタル
時間帯に応じたメール通知の構築方法 : SORACOM LTE-M Button と SORACOM Flux の活用 -
第480回
デジタル
SORACOM Flux 料金プランを発表しました