実行手順
それでは実行手順を説明します。
まず、作業ディレクトリを決めてください。本稿では、仮にDriveDemoとします。
GitHubからアプリケーションのPull
DriveDemoディレクトリでGitの初期化を行います。
>git init
次にGitHubからソースコードなどをpullします。
>git pull https://github.com/mhoritaisj/DriveDemo.git
そうすると、DriveDemoディレクトリにアプリケーションが展開されます。ディレクトリ構造は以下のようになっています。
DataGenerator
- Python環境をビルドするためのDockerfile
- CSVファイルからMQTTメッセージをPublishするPythonプログラム
- CSVファイル(14台分)
- Pythonプログラムを実行するスクリプト
が含まれています
├── DataGenerator │ ├── Dockerfile │ ├── code │ │ └── gen_drivedata.py │ ├── data │ │ ├── drivedata1.csv … │ ├── run.bat │ └── run.sh
IRIS-MQTT
- InterSystems IRIS Data Platform, Community Edition上で作成した今回のアプリケーションが含まれるイメージをビルドするためのDockerfile
- IRISで定義されたクラス定義
などが含まれます。
├── IRIS-MQTT │ ├── Dockerfile │ └── projects …
MQTTBroker
Eclipse Mosquittoのconfファイルがあります。
├── MQTTBroker │ └── conf │ └── mosquitto.conf
WebServer
- Node.jsのイメージを元に、今回のアプリケーションの画面を生成するhttpサーバをビルドするためのDockerfileとJavaScriptファイル(server.js)
- アプリケーションのテンプレートとなるHTMLファイル
などがあります。
├── WebServer │ ├── Dockerfile │ ├── main.html │ ├── package.json │ └── server.js ├
GitHubのルートには、
- アプリケーション全体をビルドするためのymlファイル
- アプリケーションを実行するためのスクリプト
があります。
── docker-compose-demo.yml ├── docker-compose.yml ├── rundemo.bat └── rundemo.sh
Maps JavaScript APIキーの設定
GCPのMaps JavaScript APIキーを取得した方は、キーを「WebServer/apikey.txt」にテキストファイルとして保存してください。WebServerのDockerイメージビルドの際に、このファイルの内容を読み込んでHTMLファイルを生成します。
アプリケーションの起動
Linux, macOSの場合 >./rundemo.sh Windowsの場合 >rundemo.bat
を実行します。このスクリプトでは、各Dockerイメージをビルドし、起動してコンテナを生成します。初回の実行の際は、手元にないDockerイメージのダウンロードやビルドが実行されます。
最後に、
Creating network "drivedemonw" with driver "bridge" Creating webserver ... done Creating iris-drive-demo ... done Creating mosquitto ... done
と出力されれば成功です。
>docker-compose ps
でコンテナの稼働状況が確認できます。以下のとおり表示されれば正常です。
Name Command State Ports -------------------------------------------------------------------------------------------------------------------- iris-drive-demo /iris-main Up (healthy) 0.0.0.0:51003->51773/tcp, 0.0.0.0:52003->52773/tcp mosquitto /docker-entrypoint.sh /usr ... Up 0.0.0.0:1883->1883/tcp, 0.0.0.0:9001->9001/tcp webserver node server.js Up 49160/tcp, 0.0.0.0:49160->8080/tcp
Webページの表示
起動に成功したらWebページを開きます。Webブラウザで「http://localhost:49160」を開くと上に示した画面が表示されます。
データの生成
車載器のデータを1秒ごとにMQTTにPublishするプログラムを動かします。
>cd DataGenerator Linux, macOSの場合 >./run.sh Windowsの場合 >run.bat
以下のように表示されれば、正常にデータがPublishされています。
Connected : code: 0 Connected : code: 0 Connected : code: 0 Connected : code: 0 Connected : code: 0 Connected : code: 0 Connected : code: 0 Connected : code: 0 Published: 1 Published: 1 Published: 1 Published: 1 Published: 1 Published: 1 Published: 1 Published: 1 …
データは長いもので90分以上あります。途中で止めたい場合はCtrl-Cで中断してください。再度はじめから実行する場合は、もう一度コマンドを実行してください。
Web画面
先ほど起動したWebブラウザの中央にあるグリッドに、14台の車の情報が1秒おきに更新される様子を見ることができます。
ここでいくつかのデータ項目について簡単に説明します。
方位は真北を0°とし時計回りに359.9°までの範囲で車が向いている方角を表しています。また、前後、左右、上下の加速度は単位mG(=0.001G: 1G=9.880665m/s^2)で、車にかかる加速度を表します。
- 前後は加速時に+、減速時-
- 左右は左折時+、右折時-
- 上下は重力方向が+、車がはねた場合-
となります。上下加速度は、常に重力加速度がかかっているため、+1000前後の値となっています。
車のスタート時にはGPSからの情報が取れないため、地図へのプロットが行われません。スタートして十数秒後から、順次車の情報が地図上にプロットされます。また、途中トンネルなどでGPS情報が取れない場合、一時的にプロットがなされないことがあります。
元の車載器データには、燃料の噴射量など興味深いデータが他にもあるのですが、今回は簡単のため以上のデータ項目のみを取り上げています。
画面の一番下には、車に発生したさまざまな「イベント」が表示されます。ここでいう「イベント」とは次の事象を言います。
- 直近5秒間の平均速度が100km/hを超える場合
- 直近のエンジン回転数が3000rpmを超える場合
- 直近の前後加速度の絶対値が300mGを超える場合
- 直近の左右加速度の絶対値が200mGを超える場合
これらのイベントが発生したら、その車のIDとともに表示されます。これらの閾値はあくまでも簡易的なものですが、IRISがこれらのイベントをリアルタイムに検知し、それをMQTTでPublishする機能を持っている点が重要です。