この記事では、FIWARE と Node-RED を使って、バスロケ・システムをローカル・マシンに作成する方法を紹介します。クラウド上に作成したい場合は、こちらを参照ください。
node-red-contrib-letsfiware-NGSI とは
node-red-contrib-letsfiware-NGSI は、Node-RED から FIWARE へのアクセスを可能にするカスタム・ノードです。MIT License のオープンソースとして、以下の URLで公開しています。
次のカスタム・ノードで構成されています。
- NGSI Entity
- NGSI Source
- NGSI Batch update
- NGSI Subscription
- NGSI to Worldmap
- NGSI GTFS realtime
- FIWARE version
このカスタームノードのいくつかを使用して、バスロケ・システムを作成します。
完成イメージ
Web ブラウザからバス等の車両の位置を確認することができます。
FIWARE 基盤の構築
FIWARE Small Bang を使って、ローカル・マシンに Orion と Node-RED が動作する FIWARE 基盤 (インスタンス) を構築します。構築は、次のコマンドを実行するだけです。
curl -sL https://letsfiware.jp/node-red | bash
Node-RED でフローを作成
環境構築が完了したら、コマンド実行した、ローカル・マシンの IP アドレスを使って、http://<your local machine>:1880/ をブラウザで開きます。そして、フローを作成します。
GTFS Realtime 情報を取得するフロー
GTFS Realtime 車両位置 (VehiclePosition) の情報を取得して、Orion Context Broker にエンティティを作成・更新するフローを作成します。inject, NGSI GTFS Realtime, NGSI Batch update の3種類のノードを接続した、次のフローです。
inject ノードの設定
inject ノードに、GTFS Realtime 車両位置情報が取得できる、適切な URL を設定します。URL は、msg.palyload に String 型として設定します。また、適切な間隔で車両位置情報を取得できるよう、interval を設定します。
Open APIs node の設定
次に、NGSI Bach update node から Open APIs node の設定を行います。NGSI Bach update node の設定を開きます。
次に、Context Broker の右側の鉛筆アイコンをクリックすると、Open APIs node の設定が開きます。API Endpoint に http://orion:1026/ を設定します。
車両を表示するフロー
Orion Context Broker からサブスクリプションのノーティフィケーションを受信して、worldmap ノードに車両を表示するフローを作成します。http in, http response, NGSI to worldmap, worldmap の4種類のノードを接続した、次のフローです。
worldmap ノードのインストール
worldmap ノードがインストールされていない場合、Node-RED の画面右上のハンバーガーメニューから「パレットの設定 (Manage palette)」を選択し、さらに「インストール (install)」タブを選択します。ノード検索に「node-red-contrib-web-worldmap」を入力して、ノードをインストールします。
http in ノードの設定
http in ノードの設定を開き、Method を 「POST」に、URL を「/notify」に設定します。この設定で、http://node-red:1880/notify が、サブスクリプションのノーティフィケーションを受信するエンドポイントになります。
http response ノードの設定
http in ノードの設定を開き、Status code に 204 を設定します。
フローのデプロイ
作成した2つのフローをデプロイします。
デプロイは、Node-RED の画面の右上にある「Deploy」ボタンを押下します。
サブスクリプションの作成
最後の、Orion Context Broker にサブスクリプションを作成します。サブスクリプションは、車両の位置が変化したときに、Node-RED の http in ノードにノーティフィケーションを送信するものです。サブスクリプションは NGSI Go で簡単に作成できます。コマンドラインから次のパラメータを持つコマンドを実行します。
ngsi create subscription ––idPattern “.*” ––url http://node-red:1880/notify ––host orion.local
作成したサブスクリプションは、次のコマンドで確認できます。
ngsi list subscriptions ––host orion.local ––pretty
コマンドを実行すると、次のような結果 (例) が表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[ { "id": "63ae6d4e69edaf264c0d49ad", "subject": { "entities": [ { "idPattern": ".*" } ], "condition": {} }, "notification": { "timesSent": 12770, "lastNotification": "2022-12-30T08:50:39.000Z", "lastFailure": "2022-12-30T08:50:44.000Z", "lastFailureReason": "Timeout was reached", "onlyChangedAttrs": false, "http": { "url": "http://node-red:1880/notify" }, "attrsFormat": "normalized" }, "status": "active" } ] |
バスロケ・ダッシュボードの表示
worldmap ノードのエンドポイント (/worldmap) の http://<your local machine>:1880/worldmap/ を開くと、地図が表示されます。車両が運行されている地域に移動すると、次のような画面が表示されます。また、車両の位置が定期的に更新されていることを確認できるはずです。