目次


Geospatial Analytics を利用して、ネットワーク接続された車両の IoT アプリを作成する

IBM Bluemix 上で Geospatial Analytics と Node.js を利用して、ネットワーク接続された車両のスターター・キットをデプロイして拡張する

Comments

IBM Bluemix 上で、モノのインターネット (IoT) アプリケーションを作成したいと思いませんか?それは皆さんが思っているほど難しいことではありません。ほとんどの IoT アプリケーションは 3 つの要素で構成されています。その 3 つとは、ネットワーク接続された「モノ」、そのモノを表示して管理する「アプリケーション」、そしてそのモノによってトリガーされたイベントを検出するための「アナリティクス」です。Bluemix の「モノのインターネット」サービス (—IoT Foundation—) を利用すると、モノをアプリケーションとアナリティクス・サービスに極めて簡単に接続することができます。それがいかに簡単であるかを実証するために、私はネットワーク接続された車両用の IoT スターター・キットを作成しました。この「Connected Vehicle」キットは、次の 3 つの要素で構成されます。

  • 車両シミュレーター (Node.js アプリケーション)
  • 地図上に車両を表示して管理する HTML5 アプリケーション
  • アナリティクスに対応する Bluemix の Geospatial Analytics サービスおよび Node-RED

このチュートリアルでは、Bluemix 上で Connected Vehicle スターター・キットを構成してデプロイし、Geospatial Analytics サービスと Node-RED を使用してアナリティクスを作成する方法を紹介します。

この Connected Vehicle アプリケーションでは IoT Foundation を利用して、シミュレートする車両と Map アプリケーションおよび Tester アプリケーションとの間のほぼリアルタイムでのメッセージングを実現します。

アプリケーションを作成するために必要となるもの

Connected Vehicle スターター・キットの概要

このチュートリアルで構成してデプロイする Connected Vehicle アプリケーションは、次の 3 つのコンポーネントからなります。

  • Node.js 車両シミュレーター
  • HTML5 Map アプリケーション
  • HTML5 Tester アプリケーション

これら 3 つのコンポーネントは、MQTT プロトコルによるリアルタイムでのパブリッシュ/サブスクライブ・メッセージングに対応するために、IBM IoT (Internet of Things) Foundation を利用します。シミュレートされる車両は、テレメトリー・データを頻繁に (1 秒あたり 2 つのメッセージ) をパブリッシュします。また、Tester アプリケーションからのコマンド (例えば、「速度を 60 に設定」など) を受け付けるために、コマンド・トピックをサブスクライブします。Map アプリケーションは位置と状況をリアルタイムで表示するために、車両テレメトリー・トピックをサブスクライブします。Tester アプリケーションによって、車両に対する制御コマンドおよび Map アプリケーションへの通知をパブリッシュできるようになります。

以下の概要図に、アプリケーションのコンポーネント間の関係を示します。

Connected Vehicle スターター・キットの概要図
Connected Vehicle スターター・キットの概要図

ステップ 1. Bluemix 上で「モノのインターネット」サービスのインスタンスを作成する

  1. Bluemix にログインし、ダッシュボードで「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。サービス・カタログから「Internet of Things (モノのインターネット)」を選択します。「Selected Plan (選択済みプラン)」として「Free (無料)」が選択された状態のまま、「App (アプリ)」としては「Leave unbound (アンバインドのまま)」を選択し、「CREATE (作成)」をクリックします。これで、サービスが作成されます。
  2. ダッシュボードに戻り、新しく作成されたサービスを選択してから、「Launch dashboard (ダッシュボードの起動)」ボタンをクリックします。
  3. IoT Foundation ダッシュボードが表示されます。ここで、機器の登録、アプリケーションの API キーの生成、使用状況の確認、組織への他の開発者の招待などを行うことができます。 IoT Foundation ダッシュボードのスクリーンショット
    IoT Foundation ダッシュボードのスクリーンショット

ステップ 2. IoT Foundation 組織を構成する

この Connected Vehicle アプリケーションでは IoT Foundation を使用して、シミュレートする車両と Map アプリケーションおよび Tester アプリケーションとの間のほぼリアルタイムでのメッセージングを実現します。これらのコンポーネント間の通信を支援するために、まずは機器を登録して、アプリケーションの API キーを生成する必要があります。

車両シミュレーターでは、単一の Node.js ランタイム・インスタンスに属する複数の車両をモデル化することができます。IoT Foundation では、それぞれの車両シミュレーターを 1 台の機器として扱います。この例では最終的に 3 つの車両シミュレーターを実行することになるので、最初のステップとして、これらのシミュレーターを手作業で登録してアクセス資格情報を取得します。

  1. 「Organization (組織)」ダッシュボードの「Devices (機器)」ページで、「Add Device (機器の追加)」をクリックします。「Device Type (機器タイプ)」リストで「Create a device type... (機器タイプを作成...)」をクリックし、「Device Type (機器タイプ)」フィールドの下にあるフィールドに「vehicle」と入力します。「Device ID (機器 ID)」に、この組織にとって一意となる任意の長さの ID (例えば、「ABC」) を入力してから、「Continue (続行)」をクリックします。 「Device Registration (機器の登録)」ページのスクリーンショット
    「Device Registration (機器の登録)」ページのスクリーンショット
  2. 次に表示されるページに、登録した機器に対して発行された資格情報が示されます。それらの値を書き留めておいてください!以下に一例を示します。
    org=o4ze1w
    type=vehicle
    id=ABC
    auth-method=token
    auth-token=5QK1rWHG9JhDw-rs+S
  3. さらに 2 つの機器を追加で作成して (例えば、ID として「DEF」と「GHI」で) 登録し、それぞれの資格情報を書き留めます。ここで書き留めた資格情報が、スターター・キットを構成するときに必要になります。
  4. 「Organization (組織)」ダッシュボードで、「API Keys (API キー)」タブをクリックし、「New API Key (新規 API キー)」を選択します。生成されたキーと認証トークンをコピーします。Map アプリケーションと Tester アプリケーションは、これらの資格情報を使用して IoT Foundation に接続します。

ステップ 3. スターター・キットをダウンロードして構成し、デプロイする

IoT スターター・キットのソース・コードは、DevOps Services の bryancboyd | iot-vehicle-geospatial-starter-kit プロジェクトに保管されています。このコードのコピーを自分用に取得するには、いくつかの方法があります。例えば、以下のいずれかの方法を使用することができます。

  • プロジェクト・ページの「FORK PROJECT (プロジェクトのフォーク)」オプションを使用して、自分用のプロジェクトを作成します。
  • git リポジトリーを複製します。

上記のいずれかの方法に慣れている場合は、その方法を使用してコードのコピーを自分用に取得することができます。いずれの方法にも馴染みがなければ、以下の手順に従って、コードの ZIP ファイルを作成し、それを PC にダウンロードします。

  1. このチュートリアルをスクロールアップして、「コードを入手する」ボタンをクリックします。
  2. bryancboyd | iot-connected-vehicle-starter-kit プロジェクトで、「EDIT CODE (コードの編集)」をクリックします。
  3. ソース・ツリーのルートを選択して強調表示させてから、メニューで 「File (ファイル)」 > 「Export (エクスポート)」 > 「zip」の順にクリックします。これによってダウンロードされたファイルをローカルに保存します。
  4. zip ファイルを解凍します。
  5. ローカル・プロジェクトに含まれる manifest.yml ファイルを開きます。グローバルに一意のアプリケーション名 (例えば、「bryancboyd-trafficsim」) を選んで、その名前を「host (ホスト)」フィールドおよび「name (名前)」フィールドに入力します。インスタンスの数を 3 に設定し、ファイルを保存します。
  6. config/settings.js を開きます。このファイルに、すべての機器と API キーの構成データが保管されます。
    • iot_deviceType には、「vehicle」と入力します。
    • iot_deviceOrg には、6 文字の組織 ID を入力します (例えば、「O4ze1w」)。
    • iot_deviceSet には、登録した 3 つの機器の ID とトークンを入力します。
    • iot_apiKey には、作成した API キーを入力します。
    • iot_apiToken には、API トークンを入力します。
    • notifyTopicinputTopic はデフォルト値のままにします。この 2 つは、Geospatial Analytics サービスで使用される構成パラメーターです。
  7. 変更内容を保存します。
  8. 解凍されたアプリケーションのルート・ディレクトリーから、cf login を実行します。プロンプトに従って、API エンドポイントには「https://api.ng.bluemix.net」と入力し、ログイン資格情報として Bluemix の IBM ID としての e-メール・アドレス、パスワードを入力します。使用できる Bluemix の組織とスペースが複数ある場合は、それらも選択する必要があります。
  9. cf push を実行して、アプリケーションを Bluemix にデプロイします。
  10. アプリケーションがデプロイされたら、http://app-name.mybluemix.net にある Map アプリケーションを実行します。すると、地図上を移動する 3 つのシミュレートされた車両が表示されます。車両をクリックすると、テレメトリー・データが表示されます。 実行中の Map アプリケーションのスクリーンショット
    実行中の Map アプリケーションのスクリーンショット
  11. それぞれの車両シミュレーターが、複数の車両をシミュレートすることができます。車両の数は、Bluemix 環境変数 VEHICLE_COUNT で制御します。車両の合計数を 15 まで増やすために、cf set-env <app-name> VEHICLE_COUNT 5 を実行します。

ステップ 4. Geospatial Analytics を作成して構成する

Bluemix Geospatial Analytics サービスを利用すれば、定義済みの「ジオフェンス・エリア」に各車両がいつ入ったか、あるいはそのジオフェンス・エリアを各車両がいつ出たかを追跡することができます。Map アプリケーションはこのサービスとやりとりすることで、ジオフェンスのグラフィカルな作成および削除を動的に行うことができます。

  1. Bluemix ダッシュボードで、新しく作成したアプリケーションを選択し、「ADD A SERVICE OR API (サービスまたは API の追加)」をクリックします。サービス・カタログから「Geospatial Analytics」を選択します。「Selected Plan (選択済みプラン)」として「Standard (スタンダード)」が選択された状態のまま、「CREATE (作成)」をクリックします。これにより、このサービスがアプリケーションにバインドされます。
  2. スターター・キット・アプリケーションには、構成済みの IoT Foundation 組織およびメッセージングの資格情報を使用して Geospatial Analytics を開始または停止するための API が組み込まれています。サービスを開始するには、ブラウザーで http://app-name.mybluemix.net/GeospatialService_start にアクセスし、ページに成功メッセージが表示されるまで待ちます (35 ~ 45 秒かかる場合があります)。
  3. Map アプリケーションを開いて、いくつかのジオフェンスを作成します。それには、ツールバーで「Alert (アラート)」ボタン (感嘆符のアイコン) をクリックすることで、ジオフェンスを作成するプロセスを開始し、ハンドルとエッジをドラッグしてジオフェンスの位置を指定します。位置を指定した後、中央の黒い円をクリックしてコンテキスト・メニューを開き、「Create (作成)」をクリックすると、ジオフェンスが作成されます。 ジオフェンスを作成する操作のスクリーンショット
    ジオフェンスを作成する操作のスクリーンショット

Geospatial Analytics サービスは、作成されたジオフェンスを監視エリアのリストに追加し、車両がそのエリアを出入りするたびに IoT Foundation を介して MQTT メッセージをパブリッシュします。Map アプリケーションはこのメッセージを利用して、地図上に車両のオーバーレイを表示します。

オーバーレイが表示された地図のスクリーンショット
オーバーレイが表示された地図のスクリーンショット

ジオフェンスを削除するには、該当するエリアを選択して「Delete (削除)」をクリックします。

ステップ 5. Tester アプリケーションを使用する

Tester アプリケーションは、シミュレートされた車両と Map アプリケーションにコマンドを送信します。車両シミュレーターは setProperty タイプのコマンドをサブスクライブし、自身のプロパティー、速度、状態を動的に変更します。一方、Map アプリケーションは addOverlay タイプのコマンドをサブスクライブして、車両の上に動的にポップアップ・テキストを表示します。

  1. Map アプリケーションと Tester アプリケーション (http://app-name.mybluemix.net/tester) を並べて開いて、両方のページを確認できる状態にします。
  2. まず、setProperty コマンドを構成します。それには、車両を選択して、Tester アプリケーションの下部のフォームに ID を入力します。speed プロパティーに値 100 を入力し、「Update Property (プロパティーの更新)」をクリックします。すると、MQTT トピックと、Tester アプリケーションのコマンドを含むペイロードが表示され、選択した車両の速度が 100 mph に変更されます。
    • 注: 車両は一連の静的プロパティー (位置、速度、状態、タイプ) とカスタム・プロパティーをシミュレートします。車両のカスタム・プロパティーは、setProperty API を使用して動的に追加/変更/削除することができます。プロパティーを追加する場合は、まだ存在していないプロパティーをパブリッシュしてください (例えば、DriverWindow = UP)。プロパティーを削除するには、プロパティーの値を空のストリングで更新します。こうすることで、車両のテレメトリー・メッセージに、そのプロパティーが含まれなくなります。 setProperty コマンドを構成するための UI のスクリーンショット
      setProperty コマンドを構成するための UI のスクリーンショット
  3. addOverlay コマンドを構成するには、Tester アプリケーションで、車両の上にメッセージを表示するための上部フォームを使用します。 addOverlay コマンドを構成するための UI のスクリーンショット
    addOverlay コマンドを構成するための UI のスクリーンショット

ステップ 6. Node-RED アナリティクス・アプリケーションを作成する

Bluemix の Node-RED ボイラープレートを使用して、基本的なアナリティクスを追加するようにスターター・キットを拡張することができます。Node-RED は、IoT の使用ケースにおけるイベント同士をワイヤリングするためのビジュアル・ツールです。Node-RED では、各種の入力 (MQTT、TCP、HTTP など) を出力 (MQTT、HTTP、Twitter、MongoDB、Cloudant など) にリンクさせるロジックのフローを設計するという方法で、軽量のアナリティクスを迅速に追加することができます。

  1. Bluemix の Node-RED ボイラープレート・アプリケーションをデプロイします。それには、Bluemix ダッシュボードで「CREATE AN APP (アプリの作成)」をクリックし、「WEB」、「Browse Boilerplates (ボイラープレートの参照)」、「BROWSE BOILERPLATES (ボイラープレートの参照)」、「Internet of Things Foundation Starter」の順に選択します。アプリケーションに固有の名前とホスト名 (例えば、「bryancboyd-nodered」) を入力してから、「CREATE (作成)」をクリックします。
  2. 「VIEW APP OVERVIEW (アプリの概要の表示)」をクリックして、アプリの概要ページを表示し、アプリケーションが実行中になったら、「BIND A SERVICE OR API (サービスまたは API のバインド)」をクリックし、ステップ 1 で作成した「Internet of Things (モノのインターネット)」サービスを選択して「ADD (追加)」をクリックします。
  3. アプリケーションのステージングが完了したら、http://node-red-app.mybluemix.net/red/ にある Node-RED キャンバスを開きます。
  4. IoT ボイラープレートによる Node-RED アプリケーションは、デフォルトのフローが表示された状態で起動されるので、キャンバス上のノードを選択して削除します。
  5. すべての車両のテレメトリーをモニターするフローを作成します。左側のパレットから ibmiot 入力ノードをドラッグして、キャンバスにドロップします。debug ノードを ibmiot ノードの右側までドラッグして、この 2 つのノードをワイヤリングします。ibmiot ノードをダブルクリックして、以下のように構成します。
    • 「Authentication (認証)」では、「Bluemix Service (Bluemix サービス)」を選択します。
    • 「Input Type (入力タイプ)」では、「Device Event (機器イベント)」を選択します。
    • 「Device Type (機器タイプ)」には、「vehicle」と入力します。
    • 「Device Id (機器 ID)」では、「All (すべて)」チェック・ボックスを選択します。
    • 「Event (イベント)」には、「telemetry」と入力します。
    • 「Format (フォーマット)」には、「json」と入力します。
    • 「Name (名前)」には、「telemetry」と入力します。
  6. 「Deploy (デプロイ)」(ページの右上隅) をクリックし、「debug (デバッグ)」ペインを選択します。構成が問題なく行われていて、スターター・キット・アプリケーションが現在実行中であれば、「debug (デバッグ)」ペインに、ネットワーク接続された車両の MQTT ペイロードが表示されます。 Node-RED ノードを構成する画面のスクリーンショット
    Node-RED ノードを構成する画面のスクリーンショット
  7. VEHICLE_COUNT 環境変数が 1 より大きい値に設定されている場合、VEHICLE_COUNT 台ある車両のテレメトリー・データは、単一の配列に格納されます。1 台の車両 (例えば、ABC-2) をフィルタリングするようにフローを変更するには、フローの中央に function ノードを追加し、そのノードをダブルクリックして以下のコードを入力します。
    var data = msg.payload;
    for (var i in data) { 
      if (data[i].id == "ABC-2") { 
        msg.payload = data[i]; 
           return msg;
      }
    }
  8. フローをワイヤリングして、「Deploy (デプロイ)」をクリックします。これで、「debug (デバッグ)」ペインに単一の車両のデータが表示されるようになっているはずです。 1 台の車両のデータを表示する「debug (デバッグ)」ペインのスクリーンショット
    1 台の車両のデータを表示する「debug (デバッグ)」ペインのスクリーンショット

ステップ 7. Node-RED で仮想のキー FOB を作成する

次は、Node-RED を使用して、車両をロックまたはロック解除するための単純なリモコンを作成します。そのために使用するのは、2 つの inject ノードです。一方のノードで車両をロック解除し、もう一方でロックします。各操作で、lockState プロパティーの値を locked または unlocked に設定する setProperty コマンドをパブリッシュしてから、Map アプリケーション上に通知を表示する addOverlay コマンドをパブリッシュします。

  1. Node-RED のフローを表示して、2 つの inject 入力ノードを Node-RED キャンバスまでドラッグします。各ノードを編集して、ペイロードのストリングを構成します。一方のペイロードは locked に、もう一方のペイロードは unlocked に構成してください。このペイロードが、setProperty コマンドで値として送信されます。 ペイロードのストリングを構成する画面のスクリーンショット
    ペイロードのストリングを構成する画面のスクリーンショット
  2. function ノードをフローに追加して、両方の inject ノードをこの function ノードにワイヤリングします。この関数は、2 つのコマンドを作成して IoT Foundation にパブリッシュします。1 つは車両の状態を設定するコマンド、もう 1 つは Map アプリケーション上にオーバーレイ・メッセージを表示するコマンドです。使用するコードは以下のとおりです。
    var commandValue = msg.payload;
    var setPropertyMsg = {
            deviceId: "ABC",
            deviceType: "vehicle",
            eventOrCommandType: "setProperty",
            format: "json",
            payload: JSON.stringify({
                   "id": "ABC-2",
                   "property": "lockState",
                   "value": commandValue
            })
    }
    var addOverlayMsg = {
            deviceId: "tester",
            deviceType: "api",
            eventOrCommandType: "addOverlay",
            format: "json",
            payload: JSON.stringify({
                   "id": "ABC-2",
                   "text": commandValue,
                   "duration": 5000
            })
    }
    return [ [setPropertyMsg, addOverlayMsg] ];
  3. フローの function ノードの後に、ibmiot 出力ノードを追加します。この function ノードで、ibmiot ノードの多数の構成値を上書きします。これらの構成フィールドには、目印として override という「ダミー」値を設定します。ibmiot ノードをダブルクリックして、以下のように構成します。
    • 「Authentication (認証)」、では、「Bluemix Service (Bluemix サービス)」を選択します。
    • 「Output Type (出力タイプ)」では、「Device Command (機器コマンド)」を選択します。
    • 「Device Type (機器タイプ)」には、「override」と入力します。
    • 「Device Id (機器 ID)」には、「override」と入力します。
    • 「Command Type (コマンド・タイプ)」には、「override」と入力します。
    • 「Format (フォーマット)」には、「json」と入力します。
    • 「Data (データ)」には、「override」と入力します。
    • 「Name (名前)」には、「commands」と入力します。
    ダミー値を設定するようにノードを構成する画面のスクリーンショット
    ダミー値を設定するようにノードを構成する画面のスクリーンショット
  4. アプリケーションをデプロイして (ページの右上隅にある「Deploy (デプロイ)」をクリック)、Map アプリケーションを観察しながら inject ノードのボタンをクリックします。すると、車両 ABC-2 の lockState プロパティーが更新されて、地図上に「unlocked (ロック解除)」というメッセージが表示されるはずです。 地図に表示されたロック解除メッセージのスクリーンショット
    地図に表示されたロック解除メッセージのスクリーンショット

ステップ 8. Node-RED で地理空間イベントをツイートする

Bluemix の Geospatial Analytics サービスを利用することで、Map アプリケーション内でジオフェンスによる多角形を作成して、車両があるエリアに入ってきた時点、またはそのエリアから出ていった時点で IoT Foundation イベントを受信することができます。Map アプリケーションはすでにこのイベント・トピックをサブスクライブしており、車両に重ねた通知オーバーレイとしてメッセージを表示します。この地理空間イベント・トピックは、複数のアプリケーションがサブスクライブすることができるので、これをビルディング・ブロックとして使用して、さらに複雑なシナリオを作成することができます。例えば、若年ドライバーを境界ボックスで示し、「承認された」ゾーンを外れるたびに、親に通知するというシナリオや、自分の車両が自宅の周りを囲むジオフェンスに入ってくるとそれを検出し、帰宅に備えるようホーム・オートメーション・システムに通知するというシナリオなどです。

Node-RED を使用すれば、ジオフェンス・アラートを他のアプリケーションや API に関連付けることができます。このフローでは、特定の車両に関するジオフェンス通知メッセージを受信すると、ツイートをパブリッシュするようにします。

  1. ibmiot 入力ノードをキャンバスにドロップします。ibmiot ノードをダブルクリックして、以下のように構成します。
    • 「Authentication (認証)」では、「Bluemix Service (Bluemix サービス)」を選択します。
    • 「Input Type (入力タイプ)」では、「Device Command (機器コマンド)」を選択します。
    • 「Device Type (機器タイプ)」には、「api」と入力します。
    • 「Device Id (機器 ID)」には、「geospatial」と入力します。
    • 「Command Type (コマンド・タイプ)」には、「geoAlert」と入力します。
    • 「Format (フォーマット)」には、「json」と入力します。
    • 「Name (名前)」には、「geofence alerts」と入力します。
    ibmiot ノードの構成 UI のスクリーンショット
    ibmiot ノードの構成 UI のスクリーンショット
  2. ibmiot 入力ノードの後に function ノードを追加します。この関数で、地理空間サービスから返されたデータをフィルタリングし、アラート対象の車両が指定の ID と一致する場合にのみ、フローの実行が続行されるようにします。以下のコードを使用して (必要に応じて、ID を皆さんの環境での車両の ID で置き換えてください)、関数を debug ノードにワイヤリングしてデプロイします。
    msg.payload = {
       time: msg.payload.time,
       id: msg.payload.deviceInfo.id,
       lon: msg.payload.deviceInfo.location.longitude,
       lat: msg.payload.deviceInfo.location.latitude,
       eventType: msg.payload.eventType
       region: msg.payload.regionId 
           } 
           if (msg.payload.id == "ABC-3") { return msg; }
  3. 次に、twitter 出力ノードをキャンバスまでドラッグし、関数の出力をこのノードの入力にワイヤリングします。この twitter ノードを使用して、既存の Twitter アカウントを、OAuth を使用するように構成してから、msg.payload の内容をツイートすることができます。Twitter アカウントにサインインし、function ノードに変更を加えて Twitter 用のメッセージを作成します。
    msg.payload = {
       time: msg.payload.time,
       id: msg.payload.deviceInfo.id,
       lon: msg.payload.deviceInfo.location.longitude,
       lat: msg.payload.deviceInfo.location.latitude,
       eventType: msg.payload.eventType,
       region: msg.payload.regionId 
           } 
           if (msg.payload.id == "ABC-3") { 
        var verb = "exited";
        if (msg.payload.eventType == "Entry") { verb = "entered"; }
        msg.payload = "Vehicle " + msg.payload.id + " has " + verb + 
           " region " + msg.payload.region + "!";
        return msg; 
           }
  4. アプリケーションをデプロイします。

これで、車両がジオフェンスを横切るたびに、Node-RED がツイートをパブリッシュするようになりました。

Node-RED によってパブリッシュされたツイートのスクリーンショット
Node-RED によってパブリッシュされたツイートのスクリーンショット

まとめ

Bluemix の「モノのインターネット」サービスと Geospatial Analytics サービスを利用すれば、IoT アプリケーションを作成するプロセスがシンプルで容易なものになります。試しに、Connected Vehicle スターター・キットを他の Bluemix サービスやモバイル・アプリケーション、さらには物理センサーなどを使って拡張してみてください。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Mobile development, Cloud computing
ArticleID=1003744
ArticleTitle=Geospatial Analytics を利用して、ネットワーク接続された車両の IoT アプリを作成する
publish-date=04302015