Amazon Web Services ブログ
AWS IoT Device Management で位置情報を使用して IoT フリートを監視・管理する
IoT (Internet of Things: モノのインターネット) デバイスの数が指数関数的に増加するにつれ、企業では、さまざまな地理的地域にわたる IoT フリートを管理するために、位置情報を活用できる高度なツールが必要になります。デバイスの位置を知ることは、資産管理や盗難検出のためだけでなく、デバイスが動作していない場合にタイムリーな改善措置を講じるためにも重要です。さらに、位置情報とデバイス状態のメタデータを組み合わせることで、位置固有の接続問題を検出したり、位置別の利用の傾向を理解するなど、IoT フリートについてより深い洞察を得ることができます。例えば、自動販売機や広告キオスクを運営している場合は、ユーザーの利用が多い地理的位置に基づいて、フリートの拡大、アップグレード、広告を優先的に行うことができます。
AWS IoT Device Management の位置インデックス化とジオクエリ機能により、デバイスの最後に報告された位置に基づいてデバイスを検索できます。また、位置情報を活用して、IoT フリートの管理と監視活動を強化することもできます。この位置インデックス化とジオクエリ機能により、特定の地理的領域内に位置するデバイスをリストアップしたり、基準位置に対する近接検索を行ったり、ターゲットを絞った Over-The-Air (OTA) でのアップデートを実装したり、位置に応じたデバイスのパフォーマンス分析を行ったり、望ましい地理的境界外にあるデバイスを特定したりできます。
このブログでは、位置情報データのインデックス作成とジオクエリの使い方を学び、日々の IoT フリート管理業務をサポートする方法を解説します。
フリートインデックスとジオクエリの概要
AWS IoT Device Management は、大規模な IoT デバイスをリモートで監視・管理するためのフルマネージドクラウドサービスです。フリートインデックス機能を使って、AWS IoT レジストリ、AWS IoT Device Shadow、AWS IoT の接続性、AWS IoT Device Management ソフトウェアパッケージカタログ、AWS IoT Device Defender での違反 などの IoT データソースにまたがるメタデータに基づいてデバイスをインデックス化、検索、集約、グループ化できます。位置情報インデックスとジオクエリを使えば、特定の洞察や監視のために位置情報で絞り込めます。
図 1 は、AWS IoT サービスを使用して位置情報を取り込み、インデックスを作成し、活用するためのリファレンスアーキテクチャを示しています。検索で位置データを使用するには、デバイスの位置情報 (緯度と経度) を従来のシャドウまたは名前付きシャドウに保存し、AWS IoT Core Settings で位置データのインデックス作成を有効にする必要があります。位置情報は、4 つのサポートされている位置データフォーマットのいずれかに格納できます (詳細については、サポートされているデータフォーマットを参照してください)。グローバル ポジショニング システム (GPS) が組み込まれていないデバイスの場合は、AWS IoT Core の Device Location 機能を使用してデバイスの位置を解決できます。次に、AWS IoT Rules Engine を使用して、デバイスの位置を従来のシャドウまたは名前付きシャドウに格納できます。位置データが IoT デバイス管理サービスによってインデックスされると、Amazon CloudWatch でデバイスフリートの全体的な状態を監視したり、Amazon API Gateway を使用して近くのデバイスを照会したり、デバイスフリートの位置情報に基づく分析と洞察を生成するなどの複数のダウンストリームアプリケーションで使用できるようになります。
ジオクエリでは、フリートインデックスの既存の検索と集約のための API が使用され、さらに入力パラメータ geodistance が追加されています。この geodistance のパラメータは、指定された緯度と経度の座標からの検索半径の境界を指定します。ジオクエリは フリートメトリクス と Amazon CloudWatch と組み合わせることで、時間の経過に伴うトレンドを分析し、事前に定義された閾値に基づいてフリートの状態を監視するためのアラームを作成できます。他の例としては、需要の高い場所で特定の時間に利用可能な電動バイクの数を見つけること、EV 充電器の可用性 KPI を監視すること、デバイスが設置場所から移動したときに警告を受け取ること、規制機関に決済端末の場所を報告すること、太陽電池のパフォーマンスに関する位置に敏感な洞察を生成すること、温度や湿度などの地理的要素によるデバイスの故障を診断することなどが挙げられます。
ジオクエリの概要
次のセクションでは、地理空間クエリ機能の一部を紹介します。この手順では、EV 公共充電インフラのグローバルプロバイダー向けのシステムを開発します。この例では、異なる種類のコネクター、定格電力、充電速度を持つ EV 充電器を提供します。地理空間クエリを使用すると、次のビジネス要件に対応できます。
- 付近のロケーションにある充電器をニアリアルタイムで発見できる機能。
- 特定の SLA を維持できるよう、利用可能な充電器の数を監視する。
- 日々の取引量が一定の基準を超えるチャージャータイプ (レベル 1、レベル 2、レベル 3 – 異なる充電速度を表す) の分布を特定する。
前提条件
以下の手順を完了する前に、次の準備をしておく必要があります。
- AWS IoT Core と AWS IoT デバイス管理でアクションを実行するアクセス権と許可を持つ AWS アカウント。
- AWS IoT Core でロールを作成および割り当てる IAM (AWS Identity and Access Management) の権限。
- AWS CloudShell へのアクセス、および Linux とAWS コマンドラインインターフェイス (AWS CLI) の基本的な知識。
ウォークスルー
初期設定と構成
この節では、EV 充電器を表すための一連のモノを AWS IoT Core に作成します。スクリプトとコードは us-east-1
リージョンを使用します。スクリプトは、モノを作成し、充電器仕様に関連するメタデータを生成します。また、充電器の位置と使用状況に関するデータを含む chargerusage
という名前つきシャドウを生成します。最初のセットアップと地理クエリを実行するには、us-east-1
の CloudShell を使用してください。
- AWS Management コンソールにログインし、CloudShell を開いてください。
- 次のコマンドを実行して、スクリプトをダウンロードするため Git リポジトリをクローンします。
$ git clone https://github.com/aws-samples/aws-iot-device-management-geoquery.git
createResources.sh
スクリプトを実行して、EV 充電器のフリートを作成します。
以下のコマンドで指定されているパラメータを使用すると、AWS IoT Core に geoquery-test- という名前の 10 個のリソースができます。
このスクリプトは、後続のスクリプトで使用される一時ファイルもローカルディレクトリに生成します。
$ cd aws-iot-device-management-geoquery
$ bash createResources.sh geoquery-test 10
注: 出力でエラーが表示された場合は無視してください。
An error occurred (ResourceAlreadyExistsException) when calling the CreatePolicy operation: Policy cannot be created - name already exists (name=blog_fi_geoquery_policy)
updateShadows.sh
スクリプトを実行して、モノのシャドウドキュメントを更新します。
$ bash updateShadows.sh
フリートインデックスを設定する
- AWS マネジメントコンソールに移動し、AWS IoT Core を検索してください。
- AWS IoT Core (
us-east-1
リージョン) で、左ペインの 設定 を選択します。 - フリートのインデックス作成 セクションに移動し、インデックス作成の管理 を選択します。
- モノのインデックス作成 と モノの接続の追加 のチェックボックスを選択します。
- 画面の一番下に移動し、更新 を選択します。
- 次のコマンドを実行して、インデックスの状況を確認します。
$ aws iot describe-index --index-name "AWS_Things" --region us-east-1
indexStatus
がACTIVE
になるまで待ちます。- 再度 インデックス作成の管理 を選択します。
- 名前付きシャドウの追加 のチェックボックスを選択します。名前付きシャドウの選択 の下に
chargerusage
が表示されない場合は、モノでシャドウ名を参照 を選択します。 - 前のセクションで作成された、いずれかのモノを選択します。
- リストから
chargerusage
を選択し、シャドウ名の追加 を選択します。
- インデックスの位置データ に移動し、新しいフィールドの追加 を選択します。
- データパス に
shadow.name.chargerusage.reported.config.location
を追加します。 - シーケンス ドロップダウンリストから
Lat, long
を選択します。
- データパス に
- 集計用のカスタムフィールド に移動し、新しいフィールドの追加 を選択します。
- フィールド名 に
attributes.type
を追加し、フィールドタイプ ドロップダウンリストからString
を選択します。 - 画面の一番下に移動し、更新 を選択します。
- フィールド名 に
ユースケース 1: 近接検索
この節では、SearchIndex API を使用して、車両所有者が自身の EV に適した近くの充電スポットを見つける方法を実演します。この例では、次のことを前提としています。
- このクルマはレベル 1 とレベル 2 の EV 充電器に対応しています。
- このクルマは搭載の GPS モジュールにより、現在の緯度経度 (37.723028, -122.375811) を認識しています。
- クルマの所有者は、クルマの現在位置から半径 15 マイル以内の適切な充電器を探したいと考えています。
- 前のステップで使用した CloudShell に移動します。
- コマンドプロンプトで次のコマンドを実行します。
aws iot search-index \
--index-name "AWS_Things" \
--region us-east-1 \
--query-string "( \
attributes.type:Level_1 OR
attributes.type:Level_2) AND
shadow.name.chargerusage.reported.usage.isOnline:true AND
shadow.name.chargerusage.reported.config.location:geo_distance,37.723028,-122.375811,15miles"
- JSON 形式の出力には、クエリ条件を満たす全ての充電器のリストが表示されます。参考のために、出力を一部省略して示します。出力の値は変わる可能性があります。
ユースケース 2: 位置情報に基づくフリート監視
このステップでは、フリートインデックス機能のフリートメトリクスを使用して、関心のある地理的領域内の稼働中の EV 充電器の数を監視します。
- 前のステップで使用した CloudShell に移動します。
- 以下のコマンドをコマンドプロンプトで実行して、フリートメトリクスをセットアップします。一度作成されると、このフリートメトリクスは 60 秒ごとにデータポイントを生成し、サンフランシスコ (37.723028,-122.375811) から半径 50 マイル以内で電源が切断されている充電器の数をカウントします。
aws iot create-fleet-metric \
--metric-name "OfflineChargers" \
--region us-east-1 \
--query-string " shadow.name.chargerusage.reported.usage.isOnline:false AND \
shadow.name.chargerusage.reported.config.location:geo_distance,37.723028,-122.375811,50miles" \
--aggregation-type "name = Statistics,values = count" \
--aggregation-field "registry.version" \
--period 60
- フリートメトリクスをセットアップすると、OfflineChargers メトリクスが毎分 CloudWatch に送信されるため、それを確認できます。
- また、このメトリクスに対して CloudWatch アラームを設定できます。アラームの作成手順は CloudWatch でフリートメトリクスを表示する をご覧ください。
CloudWatch で設定したアラーム閾値を超えると、保守チームへの警告のために複数の通知とチケット作成アクションがトリガーされます。同じプロセスで、異なるクエリ基準を使用して追加のフリートメトリクスを作成できます。
ユースケース 3 : 位置情報に基づく集約情報/洞察
このセクションでは、GetBucketsAggregation API を使用して、一日あたりのトランザクション閾値を超える充電器の分布を、充電器タイプ (Level_1、Level_2、Level_3) に基づいて確認します。
- 前のステップで使用した CloudShell に移動してください。
- コマンドプロンプトで次のコマンドを実行します。このクエリは、サンフランシスコ (37.723028,-122.375811) の 50 マイル以内にあり、1 日に 25 件を超えるトランザクションがあった充電器を集計します。
aws iot get-buckets-aggregation \
--index-name AWS_Things \
--region us-east-1 \
--buckets-aggregation-type "termsAggregation={maxBuckets=5}" \
--query-string "shadow.name.chargerusage.reported.usage.dailySessions> 25 AND shadow.name.chargerusage.reported.config.location:geo_distance,37.723028,-122.375811,50miles" \
--aggregation-field "attributes.type"
- 出力は以下の図 4 のようになります。この図は、基準を満たす Level_1、Level_2、Level_3 の充電器の数を示しています。「数」は、デプロイ時によって異なる可能性があります。
クリーンアップ
これらの演習を完了したら、追加コストの発生を避けるために以下を行ってください。
- フリートインデックスを今後使用しない場合、機能をオフにします。
-
- AWS IoT Core (
us-east-1
リージョン) で、左側のメニューから 設定 を選択します。 - フリートインデックス作成 セクションに移動し、インデックス作成の管理 を選択します。
- モノのインデックス作成 のチェックボックスの選択を外します。
- 画面下部に移動し、更新 を選択します。
- AWS IoT Core (
cleanupResources.sh
スクリプトを実行して、作成した AWS IoT モノを削除します。
$ bash cleanupResources.sh
さいごに
このポストでは、AWS IoT Device Management を使用してデバイスフリートの位置情報データを検索および監視する方法を学びました。フリートのインデックス作成を構成してデバイスの位置データをインデックス化する方法、インデックス化された位置情報データから洞察を導き出す方法、フリートメトリクスを利用してデバイスフリートを監視し、そのトレンドを表示する方法を学びました。このサンプルを拡張して、クローンした GitHub プロジェクトの aws-iot-device-management-geoquery
ディレクトリにある ShadowClient.py
を変更することで、充電器のシャドウ (位置、使用状況、可用性データ) を動的に更新したり、フリートデータに位置ベースの分析を実行して位置ベースの接続切断パターンを特定したり、指定された地理的範囲内のデバイスに対して OTA アップデートの対象とすることができます。さらに、AWS IoT Core Device Location の位置解決機能を活用して、GNSS/Wi-Fi/セルラーメタデータから位置情報を解決し、その後位置情報データをインデックス化してジオクエリを利用できます。詳細については、AWS IoT Developer Guide の 位置情報データのインデックス化 を参照するか、コンソールにログインして利用を開始してください。
著者略歴
この記事は Use location data with AWS IoT Device Management to monitor and manage your IoT fleet の日本語訳です。エンタープライズ事業本部 ソリューションアーキテクトの中西 貴大が翻訳しました。