SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

InterSystems IRISでシンプルに開発するIoTアプリケーション(AD)

データプラットフォーム「IRIS」を、まずは動かしてみよう!

InterSystems IRISでシンプルに開発するIoTアプリケーション 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

実行手順

 それでは実行手順を説明します。

 まず、作業ディレクトリを決めてください。本稿では、仮に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する機能を持っている点が重要です。

次のページ
IRIS内で実行されていること

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
InterSystems IRISでシンプルに開発するIoTアプリケーション連載記事一覧

もっと読む

この記事の著者

堀田 稔(インターシステムズジャパン)(ホリタ ミノル)

SEマネージャー。1992年大阪大学基礎工学部情報工学科卒。同年日本ディジタルイクイップメント(株)入社。電気通信など様々な業界向けプロジェクトにシステムエンジニアとして携わる。1996年InterSystems Data Platform製品の日本語版開発プロジェクトに従事し、同製品の販売・サポー...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11720 2019/10/15 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング