目次


IBM Bluemix アプリを対象とした、リモート制御の Raspberry Pi 2 モニターを作成する

IBM IoT Foundation を利用してデバイスとアプリを接続するモノのインターネット・プロジェクトに Node.js を使用する

Comments

モノのインターネット (IoT: Internet of Things) には、大量の誇大な宣伝、流行の専門用語、不安、疑念、半信半疑などが渦巻いていることから、単純な概念がわかりにくくなっています。でも、おじけづかないでください。JavaScript 開発者である皆さんは、IoT 開発の魅力的な世界を今すぐ探るために必要なあらゆるスキルをすでに持っています。このチュートリアルでは、皆さんが IoT に取り掛かれるよう実践プロジェクトを通じて支援します。

このチュートリアルでは、基本的ないくつかの IoT パターンと IBM Internet of Things Foundation (IoT Foundation) について簡単に紹介した後、基本的な 2 つの IoT パターンを実装します。その後、リモートにある機能的なモノ ― Raspberry Pi 2 デバイス ― をプログラミングして、IBM Bluemix 上にホストされるアプリケーションをモニタリングするようにします。そして、Raspberry Pi 2 でのモニタリングのオン/オフをリモート制御するために PC のコマンド・ラインから実行可能なアプリケーションを作成します。デバイスとアプリケーションを接続して通信させるために使用するのは、IoT Foundation です。さらに、グラフ作成アプリケーションを Bluemix にデプロイして、1 つ以上のモニター (モニターは、好きなだけデプロイすることができます) から収集した統計を視覚化できるようにします。これらすべてのコードは、Node.js で作成します。

この手順に従うには、次のものが必要です。

3 つの IoT パターン

インテリジェントに通信するデバイスからなるネットワークでは、どんなことができるのでしょう?この無限の可能性を秘めた分野で思い付くのは、「モニタリング」、「リモート制御」、そして「モノ対モノの通信」という 3 つの使用パターンです。

モニタリング

図 1 に、IoT のモノ (デバイス) によって収集されたデータをモニタリングするという概念を図解します。

図 1. IoT を介したモニタリング
IoT を介したモニタリングを示す図
IoT を介したモニタリングを示す図

図 1 では、デバイスが内臓センサーやその他の入力からのデータを収集し、インターネットを介してそのデータを待機するアプリケーションに送信して、モニタリング、収集、保管、分析を行います。

モニタリングの例には、以下のものが含まれます。

  • モーション・センサーは、人の歩数をカウントすることができます。
  • 心拍数モニターは人の心拍数をレポートすることができます。さらに高度な生体センサーであれば、心拍数以外の生体信号も継続的にモニタリングすることができます。これらの累積されたデータは、医学研究やその他のオフライン分析で利用することができます。
  • 車両やドローンは、その地理的な位置、燃料消費量、加速度、その他の測定指標をレポートすることができます。
  • スマート・オーブンは、現在の温度、調理中の肉の内部温度 (食肉用の温度計を使用)、そして肉の調理が終わるまでの残り時間をレポートすることができます。
  • 家の周囲に設置されたスマート近接センサーは、自身のステータスを送信して、カメラ、ライト、あるいは他のアラートをトリガーすることができます。

このチュートリアルの例では、リモートにある Raspberry Pi 2 を使用して、Bluemix でホストされたアプリケーションの動作をモニタリングします。

リモート制御

2 つ目に思い付く明らかなパターンは、デバイスのリモート制御です (図 2 を参照)。

図 2. IoT を介したリモート制御
IoT を介したリモート制御を示す図
IoT を介したリモート制御を示す図

図 2 では、リモート制御アプリケーションが、数あるデバイスのなかからターゲットとする特定のデバイスにインターネットを介してコマンドを送信します。ターゲット・デバイスは、インターネットを介してコマンドをリッスンしており、コマンドを受信するとそのコマンドを実行して、モーター、スイッチ、ライトなどを制御します。

以下のシナリオを考えてみてください。

  • オフィスの PC やスマートフォンから、自宅の暖房システムをオンにする
  • 数千マイル離れた場所から、LEGO のロボット・カーをコンテストの迷路で操縦する
  • 配送アプリケーションによって、倉庫から顧客が指定した場所までのウェイポイント間で配達ドローンをガイドする

このチュートリアルの例では、リモートにある Raspberry Pi 2 でのモニタリングのオン/オフを切り替えるアプリケーションを短時間で作成する方法を紹介します。

モノ対モノの通信

IoT でのオペレーション・パターンとしてそれほど明らかなパターンではありませんが、マシン間の相互通信というパターンもあります。このシナリオではデバイスが互いをモニタリングして制御することができます (図 3 を参照)。

図 3. IoT を介したデバイス間の相互通信
IoT を介したモノ対モノの通信を示す図
IoT を介したモノ対モノの通信を示す図

図 3 では、プロキシー・アプリケーションがデバイス間の相互通信をサポートします。あるデバイスが、収集されたデータまたはコマンドを含めた、別のデバイスを宛先とするメッセージをインターネット経由でプロキシー・アプリケーションに送信します。すると、プロキシー・アプリケーションはそのメッセージをインターネット経由でターゲット・デバイスに転送し、そのデバイスがコマンドを実行したり、データを処理したりできるようにします。

次のシナリオを想像してみてください。

  • 部屋中のライトを暗くできるスマート電力計で、ユーザーが設定した電力消費量の目標を達成する
  • 土壌湿度を検知するシステムでスプリンクラーに信号を送り、給水量を調節する
  • TV 局の自動番組編集機能によって、リアルタイムの視聴率に応じて異なる長さに編集された TV 番組を放送する
  • カメレオンのようにカモフラージュするパネルが、スマート環境センサーと視点の異なる複数台のカメラで構成されるネットワークからデータを取得し、そのデータに応じて動的に模様を変化させる
  • グローバル・アプリケーションのプロビジョニング・システムが、世界中に設置されたデバイスから収集した測定応答時間に応じて、アクティブにするコンピューティング・リソースの数を増減する

デバイス間の通信の実装については、このチュートリアルでは取り上げません。

IoT Foundation の概要

IoT Foundation は、何台のデバイスでも、どんなに単純なデバイスでも、デバイスが随時接続して通信できるクラウドです。図 4 に、モノが接続された世界で IoT Foundation が果たす役割を図解します。

図 4. IoT Foundation の概略図
IoT Foundation の概略図
IoT Foundation の概略図

IoT Foundation は、以下の付加価値を提供します。

インターネットに接続されているモノであれば、いつでも IoT Foundation と通信することができます。

  • インターネットを介して接続可能なプロキシー、ブローカー、サーバーのネットワークを常に利用できます。インターネットに接続されているモノであれば、いつでも IoT Foundation と通信することができます。
  • モニタリング・データを定期的に送信するモノの場合、後で独自のソフトウェアやサービスでデータを要約および分析できるように、実質的に無制限の量のデータを保管することができます (デフォルトでは、Historian という内部サービスがデータ・ストレージを扱います)。
  • 登録されたすべてのデバイスへのアクセス、そして Bluemix やその他のプラットフォームでホストされているアプリケーションへのアクセスは、認証によって保護されます。
  • スケーラブルで、管理されていて、信頼できる高速接続により、デバイスのエントリー・ポイント、累積されたデータ本体、そして Bluemix エコシステム内の処理リソースを相互につなぎます。
  • モニタリング・プロジェクト、リモート制御プロジェクト、またはセキュアにプロキシー化されたモノ対モノのプロジェクトを、迅速に作成するための充実したツール、テンプレート、レシピが揃っています。

独自のプロキシー、ブローカー、サーバー一式をホストして管理することもできます。ただし、セキュリティーと管理に対応すると同時に、ネットワークとハードウェアの可用性を確保するのは、フルタイムの大変な作業になってメインの作業に手が回らなくなる可能性があります。

図 4 に示されている IoT Foundation は、保護された MQTT ネットワークと、HTTP による (REST のような) API でアクセスできる付加価値サービスで構成されていることに注目してください。MQTT (Message Queue Telemetry Transport の略語です) は、TCP をベースに作成された軽量のプロトコルです。MQTT は、TCP で交換されるメッセージに単純なパブリッシュ/サブスクライブの動作を提供します。この成熟したプロトコルは、10 年にわたってバージョンを進化させてきました。2013年には国際標準化団体 OASIS にバージョン 3.1 が提出されました。バージョン 3.1.1 は、最近のグローバル IoT ネットワークで次第にデプロイされるようになってきています。MQTT のクライアント部分は、よく使われている 16 ビットまたは 32 ビットの TCP 対応組み込みプロセッサーに簡単に実装することができます。最小要件のクライアントは、ごくわずかなコードのオーバーヘッドで実装できるため、IoT ネットワークのモノの側にとっては理想的なプロトコルです。プロトコルそのものが TCP 上で付加する送信中のオーバーヘッドも最小限です。MQTT の利点は、そのシンプルさにあります。パブリッシュ/サブスクライブ・パターン (addListener インターフェースなど) をすでに使い慣れている開発者にとって、MQTT の学習曲線はゼロです。MQTT の価値を理解する最善の方法として、この後すぐに、実際に MQTT を使ってみます。

モニタリング対象の Web アプリケーション

モニタリング対象のアプリケーション (実行中の Bluemix アプリケーションを表すための必要最小限のアプリケーション) のコードは、サンプル・コードの bluemixwebapp ディレクトリーに、Bluemix 環境にそのままデプロイできる状態で用意されています。このアプリケーションは、2 つのフィールドがある単純なフォームを表示します (図 5 を参照)。

図 5. モニタリング対象の Web アプリケーションに表示されるアイテム追加フォーム
Web アプリケーションの UI のスクリーンショット
Web アプリケーションの UI のスクリーンショット

このフォームに Raspberry Pi 2 モニターでアクセスし、アイテムと数量のフィールドに入力してからフォームを送信します。すると、Web アプリケーションは図 6 のような (アイテムの名前と数量を示す) 確認メッセージを表示します。

図 6. モニタリング対象の Web アプリケーションに表示される結果ページ
Web アプリケーションからの確認メッセージのスクリーンショット
Web アプリケーションからの確認メッセージのスクリーンショット

Raspberry Pi 2 モニターは、結果ページをスクレイピングし、確認メッセージを検証してから、アプリケーションのステータスとアクセス時間を IoT Foundation にレポートします (アクセス時間とは、リクエストの作成、リクエストの送信、レスポンスの待機、およびスクレイピングにかかった合計時間を意味します。アクセス時間のばらつきの主な原因は、最も変わりやすい応答時間です)。

Cloud Foundry CLI から、以下のコマンドで Bluemix に接続してログインし、このアプリケーションを Bluemix 環境にデプロイしてください。

cf api https://api.ng.bluemix.net
cf login -u user_name -o org_name -s space_name
cf push your web app name -m 128M

Web アプリケーションが稼働中であることを確認するために、ブラウザーで Bluemix Web アプリケーションの URL にアクセスします。Raspberry Pi のモニター・コードから Web アプリケーションにアクセスするには、この URL を把握していなければならないため、サンプル・コードの raspi/monitortask.js ファイルの最初の行に変更を加えて、以下の名前を反映させてください。

var MonitoredBluemixURL = 'http://your web app name.mybluemix.net/';

第 2 世代の Raspberry Pi

Raspberry Pi 2 は、世界的に有名な $35 の Linux コンピューターの第 2 世代です。Eben Upton 氏とその仲間たちが、子供たちがプログラミングを始められるように、手頃な価格のコンピューターの作成に初めて着手した時には夢にも思っていませんでしたが、3 年間で 500 万台が売れ、コンピューターの歴史にその名を刻むこととなりました。

Raspberry Pi 2 は、Ubuntu や Windows 10 などの最新の主要なオペレーティング・システムを実行できる、素晴らしいコンピューティング・プラットフォームです。初代 Raspberry Pi とは異なり、Raspberry Pi 2 には ARM 社の 900 MHz クアッドコア CPU Cortex-A7 (当初はシングル・コアの ARMv6 CPU でした)、1 GB の RAM (当初は 512 MB または 256 MB に限られていました) が搭載されています。Raspberry Pi 2 のベンチマークでのスコアは、初代 Raspberry Pi の 6 倍から 20 倍に改善されています。さらに、マウス、キーボード、アクセサリー用の 4 つの USB ポート、OS イメージをブートするための MicroSD カード・スロット、モニターや TV に直接接続できる HDMI ポート、そしてネットワーク接続用 Ethernet ポートもあります。図 7 の右側に示されているのが Raspberry Pi 2、左側が初代 Raspberry Pi です。

図 7. 高性能になった Raspberry Pi 2 と従来のエディションの比較
Raspberry Pi 2 と従来のエディションを比較した写真
Raspberry Pi 2 と従来のエディションを比較した写真

Raspberry Pi 2 Bluemix アプリケーション・モニターを作成する

Raspberry Pi 2 をベースに、Bluemix 上にホストされている Web アプリケーションに対して機能するモニターの作成に取り掛かります。デフォルトでは、このモニターはモニタリング対象の Bluemix アプリケーションに 60 秒ごとにアクセスして、そのアクセス時間を測定します。IoT Foundation を使用すれば、このようなモニターを何台でも IoT に追加することができます (組織と呼ばれるグループ化が適用されます)。

Raspberry Pi 2 をリモート・モニターへと変容させる

Raspberry Pi 2 上で実行されるオペレーティング・システム・イメージは、Debian、Ubuntu、そして (まもなく) Windows 10 などの中から選択することができます。Raspberry Pi シリーズのデフォルト OS となっている Raspbian は、Raspberry Pi シリーズ向けにカスタマイズされた Debian Wheezy のブランチです。Raspbian のリリースは、一般に他の OS に先立って Raspberry Pi シリーズの新しいハードウェアをサポートします。このチュートリアルのコードは、2015年 2月 16日付の Raspbian 上で開発されたコードです。

Raspbian イメージが稼働中になったら、入手可能な最新バージョンの Node.js を Raspberry Pi 2 およびコマンド・センター (Linux PC のコンソール) にインストールしてください。サンプル・コードのベースとなっているのは、Node.js v0.12.0 です。

コマンド・センターから (例えば、ssh または telnet を使用して) Raspberry Pi 2 に接続し、サンプル・コードの raspi フォルダーの中身を (scp または wget を使用して) Raspberry Pi 2 に転送します。Raspberry Pi 2 上で実行されるコードは、以下の処理を行います。

  1. 認証を行って IoT Foundation MQTT に接続し、接続を維持します。
  2. ワイルドカード iot-2/cmd/+/fmt/+ トピックを使用してコマンドをサブスクライブします。これにより、モニタリングをリモートから中断、再開できるようになります。
  3. 60 秒ごとに、制御対象のブラウザー・セッションを開始し、フォームに入力して送信することで Bluemix 上にホストされた Web アプリケーションにアクセスし、その結果を分析して Web アプリケーションが正常に動作していることを確認します。
  4. ステップ 3 からアクセス時間とアクセス・ステータスを accesstime イベントとして、iot-2/evt/itemsvc/fmt/json MQTT トピックを介して IoT Foundation にパブリッシュします。
  5. 中断コマンドを受け取った場合は、現サイクルで Web アプリケーションのモニタリングを停止します。
  6. 再開コマンドを受け取った場合は、次のサイクルでモニタリングを再開します。

Raspberry Pi モニターを IoT 組織に追加する

IoT Foundation を使用できるようにする最速の方法は、Bluemix ダッシュボードを使用することです。

  1. ブラウザーから Bluemix にログインして、SDK for Node.js ランタイムを使用して新規 Cloud Foundry Web アプリケーションを作成します (このアプリケーションは、後ほどグラフによる可視化アプリケーションで置き換えられることになります)。アプリケーションの名前は、Bluemix 上で一意でなければなりません。
  2. 新しく作成されたアプリケーションが稼働中になっていることを確認します。
  3. Bluemix ダッシュボードに戻ります。「モノのインターネット」サービス・インスタンスを追加して、このインスタンスを新規アプリケーションにバインドします。必要に応じてアプリケーションの再ステージングを行います。
  4. アプリケーションの概要ページで、「モノのインターネット」サービス・タイルをクリックします。
  5. 「Launch dashboard (ダッシュボードを起動)」をクリックして IoT Foundation ダッシュボードを起動します (後でアクセスするときのために、ブックマークを付けておくことをお勧めします)。
  6. IoT ダッシュボードの上部に、組織名が表示されています。この名前をメモします。この名前は、後ですべてのコードに必要になります。組織によって、IoT デバイスおよびアプリケーションがグループ化されます。
  7. 「People (人)」タブをクリックします。「Add Person (個人の追加)」をクリックし、自分の IBM ID を追加します。これで、この IoT Foundation ダッシュボードから直接組織にアクセスできるようになります (Bluemix ダッシュボードからアクセスする必要がなくなります)。
  8. 「Devices (デバイス)」タブをクリックします。タイプが rasp2monitor、デバイス ID が euro001 のデバイスを追加して、Raspberry Pi 2 モニターを組織に追加します。「Continue (続行)」をクリックします。
  9. 最後のデバイス追加ページに、資格情報が表示されます。この資格情報に、Raspberry Pi 2 が IoT Foundation に対して認証する auth-token が含まれているので、auth-token の値をコピーします。この認証トークンの値は後で必要になります。これと同じ値を再生成することはできません。「Done (完了)」をクリックします。
  10. 「API Keys (API キー)」タブをクリックし、新規 API キーを追加します。キーと認証トークンが表示されます (図 8 を参照)。これらの資格情報として同じ値を再生成することはできないので、メモしておいてください。資格情報は、リモート制御アプリケーションがデバイス全体のモニタリングを中断、再開するために使用します。
図 8. IoT Foundation ダッシュボードで生成された新規 API 資格情報
生成された新規 API 資格情報のスクリーンショット
生成された新規 API 資格情報のスクリーンショット

IoT Foundation MQTT ネットワークに接続する

MQTT は、TCP をベースに作成されています。MQTT 接続には、TCP 接続または TLS 接続のいずれかを使用することができます。モニター・コードで使用しているのは、TLS です。

tls://myorg.messaging.internetofthings.ibmcloud.com:8883

TLS を使用すると、接続にエンド・ツー・エンドの暗号化も適用されます。つまり、デバイスと IoT Foundation プラットフォームとの間で送信されるデータは、一般的なブラウザーでの HTTPS トラフィックと同じように暗号化されることになります。TLS はさらに、指定されたサーバーに実際に接続されていることも検証します。IoT Foundation では現在、TLS 1.2 および MQTT 3.1.1 がサポートされています。

別の方法として、TCP URL によって、非暗号化接続を使用することもできます。

tcp://myorg.messaging.internetofthings.ibmcloud.com:1883

Raspberry Pi 2 には有り余るほどのコンピューティング能力がありますが、必要最低限のコンピューティング能力しかないデバイスの場合は、TLS 暗号化のコンピューティング処理が追加されると、あまりにも大きな負荷がかかるため、非暗号化 TCP が唯一の選択肢となる場合もあります。

MQTT over TLS では、TCP または TLS URI をポート番号と一緒に指定するのではなく、以下を使用することもできます。

mqtts://myorg.messaging.internetofthings.ibmcloud.com

MQTT over TCP の場合は、以下を使用することができます。

mqtt://myorg.messaging.internetofthings.ibmcloud.com

IoT Foundation のトピック・スペース

汎用の MQTT では、クライアント (デバイスまたはアプリケーション) は、制限なく任意のトピックをパブリッシュおよびサブスクライブすることができます。トピックとは、任意のフォーマットのテキスト・ストリングに過ぎません。トピックにパブリッシュされたメッセージ (さらに、ペイロードとも呼ばれる任意のフォーマットのテキスト・ストリング) のどれもが、すべてのサブスクライバーに送信されます。

IoT Foundation が課すトピック・スペースの制限は、アプリケーションとデバイスとでは異なります。これは、デバイスをデータ漏洩に対して保護するため (そして、スパイや不正なデバイスが他のデバイスからデータを盗めないようにするため) です。したがって、デバイスが MQTT トピックをパブリッシュおよびサブスクライブすると、デバイスはアプリケーションとは異なるトピック・スペースにアクセスすることになります。

図 9 に、IoT Foundation にアクセスするときにデバイスとアプリケーションとでは非対称の機能を示します。

図 9. IoT Foundation でのアプリケーションの機能とデバイスの機能の比較
IoT Foundation でのデバイスの機能とアプリケーションの機能を比較する図
IoT Foundation でのデバイスの機能とアプリケーションの機能を比較する図

図 9 に示されているように、認証済みのアプリケーションは、組織内の任意のデバイスやアプリケーションに対してコマンドを送信すること、そして任意のデバイスやアプリケーションからイベントを受信することができます。一方、認証済みのデバイスがサブスクライブできる対象は、独自のコマンドとイベントに限られます。

IoT Foundation では、トピック・フィルターを使用してコマンドを区別します。例えば、アプリケーションがモニタリング対象のデバイスからのイベントをサブスクライブするためのトピックは以下のとおりです。

iot-2/type/rasp2monitor/id/euro001/evt/itemsvc/fmt/json

このように、トピックにはデバイスのタイプ (rasp2monitor) とデバイスの ID (euro001) の両方が明示的に示されます。

アプリケーションは、ワイルドカード ('+') を使用して、複数のデバイスから生成されるイベントをサブスクライブすることができます。

iot-2/type/+/id/+/evt/itemsvc/fmt/json

以下は、アプリケーションからデバイス宛てに送信されるコマンド・トピックの一例です。

iot-2/type/rasp2monitor/id/euro001/cmd/operation/fmt/json

デバイスのタイプ (rasp2monitor) と ID (euro001) が明示的に参照されていることに注意してください。

デバイスにイベントをパブリッシュさせる場合、トピックにデバイスのタイプや ID を指定する必要はありません。IoT Foundation はすでにデバイスのタイプと ID を認識しているためです。例えば、euro001 デバイスは、以下のトピックを介してイベントをパブリッシュすることができます。

iot-2/evt/itemsvc/fmt/json

あるいは以下のトピックで、デバイスをターゲットとしたコマンドをサブスクライブすることができます。

iot-2/cmd/operations/fmt/json

piclient.js ファイルのモニター・コードがサブスクライブしてチェックするのは中断コマンドですが、このコードを拡張し、独自の要件に合わせて他のコマンドを追加するのは簡単なことです。

IoT Foundation のメッセージ・フォーマット

MQTT では、トピックに送信するメッセージ (別名、ペイロード) は、任意のフォーマットのテキスト・ストリングにすることができます。IoT Foundation でも、任意のフォーマットのテキスト・ストリングからなるペイロードを使用することができます。ただし、IoT Foundation のメッセージ・フォーマットに従えば、IoT Foundation がデータを解析できるため、Historian サービスなどの付加価値サービスを利用できるようになります。

IoT Foundation のメッセージ・フォーマットに必要なのは、最上位ノードを d とする、UFT-8 でエンコードされた JSON オブジェクトのみです。d ノード内のフィールドは、数字でもストリングでも構いません。ISO8601 タイムスタンプ・ストリングを含む最上位ノード ts はオプションです。piclient.js で IoT Foundation に送信されるメッセージは、IoT Foundation のフォーマットに準拠しています。以下に示すのは、piclient.js によって送信される標準的なアクセス時間メッセージです。

{   
  "d":{
       "accesstime":2248,
       "status":"ok"
      },
  "ts": "2015-03-27T01:39:47.789Z"
}

クライアント認証

Raspberry Pi 2 モニター MQTT クライアントは、IoT Foundation での認証に、auth-token を使用します (「Raspberry Pi モニターを Iot 組織に追加する」のステップ 9 を参照)。このトークンは、デバイスを最初に登録する時点で一度だけ生成されます。トークンは生成時にソルトを使用してハッシュ化されるため、復元することはできません (IoT Foundation は実際のトークン値を保管しません)。資格情報を失くした場合、あるいは資格情報が漏れてしまった場合は、デバイスの登録を取り消してから再登録することで、新しいトークンを取得することができます。ただし、デバイスを正常に接続させるには、その物理デバイスに対する新しいトークンも取得する必要があります (それには、物理的にデバイスを取得するか、デバイスをリモート・アクセス対応にしてから、次の段落で説明するようにコードを変更します)。

Raspberry Pi 2 で、piclient.js ファイルを編集して、独自の auth-token と組織名 (「Raspberry Pi モニターを IoT 組織に追加する」のステップ 6 で保存したもの) を使用するように connect() の呼び出しを変更します。

var client = mqtt.connect(
    'tls://your organization.messaging.internetofthings.ibmcloud.com:8883', 
    {  
      clientId:  'd:your organization:rasp2monitor:euro001',
      username:  'use-token-auth', 
      password:  'your auth-token'
    }
);

WebKit スタックをインストールする

piclient.js がモニタリング作業を行うために使用するのは、monitortask.js モジュールです。monitortask.js は、モニタリング対象の Web アプリケーションにアクセスするために、PhantomJS WebKit スタックを使用します。この PhantomJSCasperJSSpooky からなるツール・チェーンによって、ヘッドレス WebKit (GUI のないブラウザーと同様です) の Node.js ベースのスクリプト作成および自動化が可能になります。PhantomJS は、制御 API を持つヘッドレス WebKit (ブラウザー・エンジン) です。CasperJS はこれらの API をフル活用する一方で、テストや自動化を行うための高度なスクリプトの作成を可能にします。CasperJS のブート処理を行う Spooky は、Node.js と CasperJS インスタンスの間のリモート・プロシージャー・コール (RPC) ブリッジとして機能します。

PhantomJS スタックを使用するには、その前に、このスタックを Raspberry Pi 2 にインストールする必要があります。それには、以下の手順に従ってください。

  1. PhantomJS をインストールします。このチュートリアルを作成している時点で、ARM Linux バイナリーは自動 PhantomJS ビルドには含まれていません。幸い、Raspberry Pi コミュニティーのNils Måsén 氏 (piksel) のおかげで、PhantomJS のバイナリーを使用できるようになっています。必ず、このバイナリーを PATH に含めてください。
  2. npm install -g casperjs を使用して CasperJS をグローバルにインストールします (Spooky を正常に機能させるには、CasperJS をグローバルにインストールする必要があります)。CasperJS のインストールでは、PhantomJS がすでにインストールされていることが検出されるため、非機能的な Intel バイナリーのダウンロードは試行されません。
  3. piclient.js が置かれているディレクトリーで npm install を実行して、Spooky をインストールします。

モニターを起動する

これで、実行中の Web アプリケーションのモニタリングを開始する準備ができました。

node piclient.js

システムが電源断となってリブートするようなことがあっても、Raspberry Pi 2 上で piclient.js の実行を継続させるには、PM2forever などの Node.js プロセス・マネージャーを使用することができます。

モニタリングをリモートから中断および再開する

モニタリングを中断 (または再開) するコマンド・ライン・ツールのコードは、サンプル・コードの remotecontrol ディレクトリー内にあります。このツールは、(Raspberry Pi 2 モニタリング・デバイス上で実行するのではなく) コマンド・センター (PC) のコンソールから実行することができます。

このツールを使用する前に、remotecontrol/sendcmd.js 内のコードを更新して、API キー資格情報 (「Raspberry Pi モニターを IoT 組織に追加する」のステップ 10 で取得したもの) と組織名を反映させてください。

var client  = mqtt.connect(
     'mqtts://your organization.messaging.internetofthings.ibmcloud.com', 
     {
         clientId:'a:your organization:adminapp',
         username:'your API key', 
         password:'your API auth token'
    }
);

リモート制御ツールを実行するための一般的な構文は以下のとおりです。

node sendcmd.js suspend | resume device ID

例えば、実行中のモニター (デバイス ID euro001) で行っているモニタリングを中断するには、以下のコマンドを実行します。

node sendcmd.js  suspend  euro001

同じデバイスでのモニタリングを再開するには、以下のコマンドを実行します。

node sendcmd.js resume euro001

sendcmd.js は IoT Foundation にアプリケーションとして接続します (つまり、組織内のすべてのデバイスにコマンドを送信することができます)。その後、指定の操作コマンドを指定のデバイスにパブリッシュします。

Historian サービスからのアクセス時間統計をグラフ化する

図 10 に、現場の euro001 モニターからのアクセス時間のグラフを示します。最初のデータ・ポイントでアクセス時間がかかるようになり、一定の期間、(sendcmd.js によってリモートから) モニタリングが中断されていることがわかります。

図 10. アクセス時間統計のグラフによる可視化
アクセス時間のグラフのスクリーンショット
アクセス時間のグラフのスクリーンショット

この視覚化アプリケーションは IoT Foundation の HTTP API を呼び出して、IoT 組織とデバイス情報にアクセスし、Historian サービスによって取り込まれたアクセス時間の履歴データを取得します。この Node.js Express アプリケーションは、グラフを表示するために Rickshaw のチャート描画機能を使用します。

このアプリケーションは、IBM Messaging GitHub リポジトリーから取得したものです。このアプリケーションを Bluemix 環境にデプロイするには、以下の手順に従ってください。

  1. git clone https://github.com/ibm-messaging/iot-visualization.git を実行します。
  2. カレント・ディレクトリーを iot-visualization に変更し、manifest.yml ファイルを編集して自分のアプリケーションの名前 (「Raspberry Pi モニターを IoT 組織に追加する」のステップ 1 で指定した名前) を反映させます。この変更により、デプロイメントがデフォルトのアプリケーションを上書きします。アプリケーションにはすでに、IoT Foundation 組織と、環境から使用できる API キー資格情報がバインドされています。
  3. cf push コマンドを実行してアプリケーションをデプロイします。

まとめ

数時間で、皆さんの JavaScript と Node.js のスキルにぴったりの実用的な IoT プロジェクトが完成しました。このチュートリアルで作成したようなモニターを現場 (場合によっては世界中の現場) へ、そして Bluemix アプリケーションの一般ユーザーがいる場所へ送り込めば、アプリケーションのアップタイムとアクセス時間を定期的にモニタリングおよび分析し、地理によって異なるユーザー人口が経験しているサービス・レベルについて貴重な洞察を得ることができます。

至る所に配置される何千ものスマートなモノを作成し、モニタリングして、制御できるとしたら、どのような新しいアプリケーションを思い描けますか?それが、まさに IoT キラー・アプリケーションに関する本質的な質問なのです。私たちは歴史上初めて、これまでに蓄積された開発と設計の知恵を活用して、物理的なモノが接続された新しい世界を作り出せる時代にいます。モノを制御し、モノとやりとりし、実生活の作業を行えるようにモノを支援することで、世界を変えることができます。


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Web development, Mobile development, Linux
ArticleID=1009379
ArticleTitle=IBM Bluemix アプリを対象とした、リモート制御の Raspberry Pi 2 モニターを作成する
publish-date=07022015