この記事では、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 Big Bang を使って、クラウドに Keyrock, Orion, Node-RED が動作する FIWARE 基盤 (インスタンス) を構築します。
最初に、FIWARE Big Bang のソースコードを取得します。
curl -sL https://letsfiware.jp/fi-bb | bash
Keyrock, Orion, Node-RED のサブドメインを決めて、それらを DNS に登録します。次に、config.sh にサブドメイン名の設定を追加します。以下は設定例です。
1 2 3 4 5 6 7 8 |
# Set a sub-domain name of Keyrock KEYROCK=keyrock # Set a sub-domain name of Orion ORION=orion # Set a sub-domain name of Node-RED NODE_RED=node-red |
letsfiware.sh コマンドで環境構築を開始します。パラメータには、ドメイン名と IP アドレスを指定します。以下は、ドメイン名が big-bang.letsfiware.jp の場合です。環境に合わせて、置き換えてください。
./letsfiware.sh big-bang.letsfiware.jp 192.168.1.1
Node-RED でフローを作成
環境構築が完了したら、Node-RED にログインして、フローを作成します。
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 の設定が開きます。
次の例は、ドメインが big-bang.letsfiware.jp の場合の設定例です。
Broker Endpoint には、Orion Context Broker のサブドメインを設定します。IdM Type は、Tokenproxy を選択します。IdM Endpoint には、Orion Context Broker のサブドメインを、Username, Password には適切な値を設定します。
車両を表示するフロー
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」に設定します。この設定で、https://node-red.big-bang.letsfiware.jp/notify が、サブスクリプションのノーティフィケーションを受信するエンドポイントになります。
http response ノードの設定
http in ノードの設定を開き、Status code に 204 を設定します。
フローのデプロイ
作成した2つのフローをデプロイします。
デプロイは、Node-RED の画面の右上にある「Deploy」ボタンを押下します。
サブスクリプションの作成
最後の、Orion Context Broker にサブスクリプションを作成します。サブスクリプションは、車両の位置が変化したときに、Node-RED の http in ノードにノーティフィケーションを送信するものです。サブスクリプションは NGSI Go で簡単に作成できます。コマンドラインから次のパラメータを持つコマンドを実行します。––host パラメータは、環境に合わせて、適切な値に変更してください。
ngsi create subscription ––idPattern “.*” ––url https://node-red.big-bang.letsfiware.jp/notify ––host orion.big-bang.letsfiware.jp
作成したサブスクリプションは、次のコマンドで確認できます。
ngsi list subscriptions ––host orion.big-bang.letsfiware.jp ––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": "https://node-red.big-bang.letsfiware.jp/notify" }, "attrsFormat": "normalized" }, "status": "active" } ] |
バスロケ・ダッシュボードの表示
worldmap ノードのエンドポイント (/worldmap) の https://node-red.big-bang.letsfiware.jp/worldmap/ を開くと、地図が表示されます。車両が運行されている地域に移動すると、次のような画面が表示されます。また、車両の位置が定期的に更新されていることを確認できるはずです。