今回は、IoT センサーなどからのリアルタイム データの取り込み、およびリアルタイムの解析処理を Python で定期的に監視し、動作していない場合は Microsoft Teams へ通知する方法をご紹介します。リアルタイム データは ArcGIS Velocity で作成したフィードを利用して取り込み、そのデータを使ってリアルタイム解析を実施している前提とします。一方、フィードやリアルタイム解析を監視する Python の実行環境には、ArcGIS Notebooks を利用します。
ArcGIS Velocity は、リアルタイム データの解析やビッグデータの解析を行うことができる ArcGIS Online のエクステンション製品で、SaaS (Software-as-a-Service) として提供しています。
フィードやリアルタイム解析の作成、利用方法については、過去のブログ ( ArcGIS Velocity でリアルタイム データをマップに表示してみよう ) を合わせてご覧ください。
ArcGIS Notebooks ( 以降、ノートブック と表記します ) は、Web ベースの対話形式のコンピューティング環境で、ノートブック エディターと呼ばれるインターフェースを提供しています。ノートブックは、Python コードの実行を行い、データ操作や分析、可視化などの様々な作業を行うことができます。
ArcGIS Online の組織のバナー上部にある [ノートブック] タブから利用することが可能です ( 表示されていない場合は組織の管理者へ連絡し、ノートブックへのアクセスを有効にしてください ) 。
ノートブックの使い方については、過去のブログ ( はじめてのArcGIS API for Python : Notebook の紹介 ) を合わせてご覧ください。
それでは、監視対象となるフィードやリアルタイム解析を確認するところから始めていきましょう。
ArcGIS Online へログインし、組織のバナー上部にある [コンテンツ] タブから監視対象となるアイテムの詳細ページを表示します。
ArcGIS Velocity で作成したフィードの 詳細ページから ID を取得しておきます。この ID は後ほど使用するため、コピーして控えておきます。
同じように、リアルタイム解析の詳細ページを表示して、ID を取得して控えておきます。
次に、通知先となる Microsoft Teams の設定を行っていきます ( Microsoft Teams のご利用には Microsoft アカウントが必要となります ) 。Microsoft Teams との連携については、過去のブログ ( Microsoft Teams の Webhook と ArcGIS API for Python を連携してみる ) を合わせてご覧ください。
Microsoft Teams へサインインし、通知を送信したい Microsoft Teams のチャネルを選択します。チャネルのコンテキスト メニューから [コネクタ] を選択します。
コネクタの中から Incoming Webhook を探し、[構成] をクリックします。
Incoming Webhook の設定画面では、Webhook の名前を入力し、[作成] をクリックします ( 必要に応じてアイコン画像も設定します ) 。
URL は後ほど使用するため、コピーして控えておきます。[完了] をクリックし、通知先の設定は完了となります。
ここからは、Python を使った監視処理を実装していきます。
ArcGIS Online の組織のバナー上部にある [ノートブック] タブから [新しいノートブック] → [Standard] を選択し、新しいノートブックを作成します (この時点で使用しているノートブックのランタイムは「ArcGIS Notebook Python 3 Standard – 8.0」となります )。
1 つ目のコードセルでは、ArcGIS API for Python から GIS モジュールを呼び出し、ArcGIS Online の組織に接続をしています。ここで Run をクリックして実行してみます ( 管理者ロールでログインしている場合は、注意して実行する旨の警告文が出る場合がありますが、実行する上で問題はありません ) 。
2 つ目のコードセルでは、以下のようなコードを入力し、監視対象となるフィードの状態を取得します。gis.velocity.feeds.get のパラメータには、前々章で取得したフィードの ID を指定します。
Run をクリックして実行してみます。フィードの情報と状態が表示されれば OK です。
3 つ目のコードセルでは、以下のようなコードを入力し、監視対象となるリアルタイム解析の状態を取得します。gis.velocity.realtime_analytics.get のパラメータには、前々章で取得したリアルタイム解析の ID を指定します。
Run をクリックして実行してみます。リアルタイム解析の情報と状態が表示されれば OK です。
4 つ目のコードセルでは、以下のようなコードを入力し、フィードとリアルタイム解析の状態が started ではない場合に Microsoft Teams へ通知を送信するようにします。Microsoft Teams へのメッセージ送信は、pymsteams というライブラリを利用します。
pymsteams.connectorcard のパラメータには、前章で取得した Webhook の URL を指定します。通知メッセージには、フィード、およびリアルタイム解析の状態を入れており、addLinkButton で ArcGIS Velocity へ直接アクセスできるボタンも追加しています。
Run をクリックして実行してみます。フィード、もしくはリアルタイム解析が停止している場合は、以下のように Microsoft Teams へ通知メッセージが送信されます。
最後に名前を付けてノートブックを保存しておきます。監視処理の実装はここまでとなります。
最後に、監視処理を定期的に実行するタスクを作成していきます。
先ほど保存したノートブックの画面上部にある [タスク] タブから [タスクの作成] をクリックします。定期的なタスクの実行はクレジットを消費しますので、予めクレジットをご確認の上、ご利用ください。
タイトルを入力し、[次へ] をクリックします。今回はパラメータの使用はしないため、空欄のままとします。
今回は以下のような設定でタスクを作成してみます。
繰り返し間隔を 12 時間間隔とした場合、協定世界時 ( UTC ) で 0 時と 12 時に動作するようになります ( 日本標準時では 9 時と 21 時となります ) 。
保存したノートブックの詳細画面にある [タスク] → […] → [詳細の表示] からタスクの実行状況や結果を確認することができます。
タスクが定期的に実行されていれば OK です。
Python (ノートブック) を利用したリアルタイム データの取り込み、およびリアルタイム解析処理の定期監視をご紹介しました。今回は、状態を取得して監視を行っていますが、1 秒あたりのイベント数やキロバイト数などのメトリクス情報を取得し、データが実際に流れているか監視することも可能です。そのほかにも、データの分析やグラフ化、自動検証など、幅広い GIS タスクで利用することができますので、是非ノートブックをご活用ください。
ArcGIS Velocity:
ArcGIS Notebooks:
Esri ジャパン製品サポート: