【GettingStarted with IRIS】MQTT を使った遠隔モニタリング(IRIS の MQTT アダプタを試してみよう!)
開発者の皆さん、こんにちは!
この記事では、【GettingStarted with IRIS】シリーズの MQTT アダプタを簡単に試せるサンプルの利用方法についてご紹介します!
(MQTTブローカーはインターネット上に公開されているテスト用ブローカーを利用しています)
サンプルは、こちら👉https://github.com/Intersystems-jp/Samples-MQTT-EKG-Devices (コンテナで動作します)
IRIS/IRIS for Health のバージョン2020.1から、IoT の世界でよく利用される MQTT プロトコルに対応できる MQTT アダプタが追加されました。
MQTTインバウンドアダプタでは、メッセージの Subscribe が行え、MQTTアウトバンドアダプタでは、メッセージの Publish が行えます。
サンプルでは、MQTT を使った遠隔モニタリングをテーマに、患者さんに装着した心電図から心拍数(BPM)をリアルタイムに近い状態で取得し、モニタ画面に患者さん毎の心拍数を表示します(IRIS の MQTT インバウンドアダプタを利用したメッセージの Subscribe をご体験いただけます)。
Publish されるトピックについて
サンプルでは、演習環境毎にユニークになるようにコンテナ開始時に以下の形式でトピックを作成しています(末尾の # はワイルドカードの指定です)。
/Student_4629/acmeHospital/EKG/#
実際に Publish されるトピックは患者さんに装着した心電図のデータになるので、# の部分は、Patient-1 や Patient-2 などのように患者さんを特定できる文字列が入ります。
サンプルのシナリオは、1つの医療機関の患者情報を取得する流れにしています(本来であれば複数の医療機関の患者情報をモニタできるようにしたほうが良いのですがシンプルに試すため、1つの医療機関の患者情報を取得する流れにしています)。
トピックの流れ
サンプルには1つHTMLファイルが用意されています。このファイルをブラウザで開くと MQTT ブローカーに接続し、データ(心拍数)を1秒ごとにブローカーへ Publish します。
IRIS は、MQTTブローカーから指定のトピックを Subscribe します。
MQTT ブローカーを Subscribe する設定を行った IRIS のサービスは、ブローカーからトピックを取得します。
実際の設定は以下の通りです。
受信したトピックは IRIS の中ではメッセージ(EnsLib.MQTT.Message)として扱われ、次のコンポーネントであるプロセス(図では Process_MQTT_Request)に渡します。
プロセスでは、受信した MQTT 用メッセージからモニタ表示に利用するデータ(Solution.HeartRate)に変換するため、データ変換を呼び出します。
プロセスエディタの開き方と、中で行われているデータ変換の呼び出しの設定を確認する方法は以下の通りです。
患者ごとの測定値を参照する流れ
MQTT ブローカーから Subscribe した心拍数をリアルタイムに近い状態で画面表示するため、データ変換で作成された Solution.HeartRate から1秒ごとに患者ごとの心拍数を収集し、画面に表示しています。
この表示を行うため、1秒間隔で Solution.HeartRate に対するSELECT文が実行されています。
このクエリを実行しているのが、メトリックと呼ぶクラスです。プロダクションでは以下の場所に設定されています。
メトリックでは、指定の呼び出し間隔で Solution.HeartRate から患者ごとの BPM を収集しています。詳細はソースコードをご参照ください。
ということで、実際にサンプルを動かして動作を確認してみましょう!手順は以下の通りです。
(1) git clone
(2) コンテナビルド&開始
(3) 演習環境毎のトピック作成
(4) プロダクション開始
(5) サンプルHTMLをブラウザで開いて Publish 開始!
(6) モニタ画面で状況確認
(1) git clone
git clone https://github.com/intersystems/Samples-MQTT-EKG-Devices
(2) コンテナの開始
git clone で作成されるディレクトリに移動します。
cd Samples-MQTT-EKG-Devices
Windows 以外でお試しいただいている場合は、setup.sh を実行します。
./setup.sh
コンテナを開始します。
docker-compose up -d
(3) 演習環境毎のトピック作成
docker-compose exec iris iris session iris -U %SYS "##class(App.Installer).InitializeDocker()"
この実行で演習環境で使用するトピックを指定しています。
注意:appp.htmlで使用するJavaScripとプロダクション設定に演習環境用のトピックを追記しています。この実行を行わないとサンプルは動作しません。
IRISの起動が完了していないと、上記メソッド実行後、以下のメッセージが出力されます。
Sign-on inhibited: Startup or Installation in progress
このメッセージが表示される場合は、しばらく待ってから再度実行してください。
正常に実行できると、以下のように演習環境用のトピックが表示されます。
You have successfully initiated the MQTT exercise Please take note of your topic top-level string: /Student_4908/acmeHospital/EKG/# press enter to continue
Enterで元の画面に戻ります。
(4) プロダクション開始
管理ポータルを開きます。👉 http://localhost:52773/csp/sys/UtilHome.csp
ユーザ名: SuperUser
パスワード(大文字で設定されています): SYS
Interoperability > INTEROPネームスペース選択 > 一覧 > プロダクション
(5) サンプルHTMLをブラウザで開いて Publish 開始!
app.html を開きます👉 http://localhost/app.html
サーバ名はご利用の環境に合わせてご変更ください。
IRIS が MQTT ブローカーから Subscribe したトピックは、メッセージを利用して確認できます。
開いたプロダクション画面で、サービス:From_EKG_MQTT をクリックし、画面右の「メッセージ」タブを選択します。ヘッダの列にある番号をクリックするとトレース画面が開き、受信したトピックとその値が確認できます。
(6) モニタ画面で状況確認
モニタ画面を開き、患者ごとの心拍数を確認します。
管理ポータル > Analytics > ユーザポータル > SolutionEKG
※管理ポータル 👉 http://localhost:52773/csp/sys/UtilHome.csp
初期状態では3名の患者データが表示されます。
app.html にある 「追加」ボタンで心電図を付けた患者を増やすことができます。
app.html で患者を増やすと、モニタ用画面にも表示が増えます。
また、各患者のバーをスライドさせ、心拍数を変化させると、グラフもそれに合わせて変化し、MQTT ブローカーから Subscribe できていることがわかります。
以上でサンプルの動作確認は終了です。
app.html を閉じると MQTT ブローカーへの Publish が終了します。
最後に、コンテナを停止します。
docker-compose stop
コンテナを破棄する場合は、以下のコマンドを実行してください。
docker-compose down
サンプルには、完成形の Solution パッケージの他に、Demo パッケージが用意されいてプロダクションの定義やプロセスの作成を試すこともできます。
作成方法については、次の記事でご紹介する予定です!