目次


「モノのインターネット」を使用して節水する: パート 1

IoT Foundation Starter、Node-RED、および Cloudant を使用して、Raspberry Pi モニター・ソリューションを IBM Bluemix 上で作成する

Comments

Poseidon project は、世界中の水の使用量削減を目指す自主的なイニシアチブです。最初のステップとして、このプロジェクトでは、植物に水やりが必要な時期を理解するために、植物からのセンサー・データを表示するアプリケーションを使用して、室内用鉢植え植物の土壌内の水をモニターするための教材を開発しました。その目的は、「モノのインターネット (IoT)」、クラウド・コンピューティング、モバイル、およびアナリティクスなどのテクノロジーを適用することによって、水の使用量を削減するソリューションの発見に焦点を当てた熱心なコミュニティーを作成することです。

この 3 部構成のチュートリアル・シリーズでは、低コストの水やりソリューションを作成し、協力してソリューションを改善する方法を見つけます。このソリューションは、Raspberry Pi をベースにし、センサー・データの収集とビジュアライゼーションおよびソーシャル・ネットワークへの更新情報の投稿に IBM Bluemix を使用します。

使用中の装置をご覧ください。

Photo of the plant-monitoring device in operation
Photo of the plant-monitoring device in operation


次は、このソリューションから Twitter に投稿されたメッセージです。

Screenshot of tweet generated by the plant-monitoring system
Screenshot of tweet generated by the plant-monitoring system


ソリューションのアーキテクチャーは次のとおりです。

Diagram of the solution design
Diagram of the solution design


このシステムでは次のものを使用します。

  • GrovePi 拡張ボード、温度/気圧センサー、および土壌水分センサーを搭載した Raspberry Pi
  • IoT クラウド・ブローカー。インターネットで利用できるこの無料サービスは、センサー・データを受信して、すべての加入クライアントに再配布します。センサー・データのやりとりにはオープン MQTT プロトコルを使用します。
  • IBM Bluemix (アプリケーションを実行するためのクラウド・プラットフォーム)。デスクトップ・デバイスやモバイル・デバイスのセンサー・データの保管とビジュアライゼーションには、Internet of Things Foundation Starter を使用します。IoT Starter は、以下の Bluemix サービスを使用します。
    • Node.js: JavaScript アプリケーションを実行するためのサーバー・サイド・プラットフォーム。
    • Node-RED: ブラウザーで視覚的にノード (機能) をまとめてワイヤリングできるようにするサービス。データを保管するためにデータベースに着信センサー・データをワイヤリングしたり、Twitter にデータを送信するツイート・ノードにワイヤリングしたりするために、Node-RED を使用します。
    • Cloudant: CouchDB ベースの NoSQL クラウド・データベース。
  • Twitter などの植物に水が必要なときに通知するための外部サービス。

IBM Internet of Things Foundation Starter は、Node.js ランタイムと Node-RED アプリケーションを提供し、Cloudant NoSQL データベースのインスタンスを作成します。

ソリューションの作成に必要なもの

  • Bluemix の アカウントと DevOps Services の アカウント。どちらも IBM ID にリンクします。(DevOps Services アカウントは、第 2 部と第 3 部で使用します。)
  • Linux と Python の知識があれば役立ちますが、必須ではありません。

必要なハードウェア

  • Raspberry Pi モデル B (SKU: 800025001)。(後にモデル B+ がリリースされましたが、これもおそらく機能するはずです。)
  • Raspberry Pi 用の GrovePi 拡張ボード (SKU: 830004001)
  • Grove - 気圧計 (高精度) (温度を含む) (SKU: 811027001)
  • Grove - 湿度センサー (SKU: SEN92355P)
  • Grove Universal 4 ピン止め金付きケーブル 2 本 (SKU ACC90453O)
  • 4GB SD カード

オプションのハードウェア

  • Raspberry Pi 電源機構 (またはその他のミニ USB 電源機構)
  • ご使用の TV またはモニターに Pi を接続するための HDMI ケーブル
  • イーサネット・ネットワーク・ケーブル
  • Pi の (ワンタイム) 構成用の USB マウスとキーボード

アプリケーションを実行するコードを入手する

ステップ 1. Raspberry Pi をセットアップする

Raspberry Foundation は、NOOBS (新しい出来合いの) インストーラーを提供することによって、Raspberry Pi 用のオペレーティング・システムのインストールをできるだけ簡単にします。

  1. OS をインストールできるように Raspberry Pi をセットアップします。
    1. HDMI ケーブルを使用して Pi をモニターまたは TV に接続します。
    2. イーサネット・ネットワーク・ケーブルを接続します。
    3. USB マウスとキーボードを接続します。
  2. Getting Started with NOOBS の説明に従って、Raspian OS を使用して Pi をセットアップします。
  3. SSH を使用して Pi に接続し、ログインできることを確認します。
  4. GrovePi 拡張ボードはまだ接続しないでください。Dexter Industries (GrovePi のメーカー) の Connecting the Raspberry Pi and Grove Sensors の指示に従ってください。

これでハードウェアが構成されました。次に、今後の処理のためにセンサーからクラウド・サービスにデータを送信するスクリプトをインストールする必要があります。

ステップ 2. Poseidon クライアント・スクリプトをインストールする

MQTT— 軽量パブリッシュ/サブスクライブ・メッセージング・プロトコル — を使用して、IBM IoT クラウドにセンサー・データを送信します。MQTT クライアントは、さまざまなプログラミング言語で Paho プロジェクトから入手できます。ここでは Python クライアントを使用します。

  1. ホーム・ディレクトリーに移動し (cd ~)、PoseidonProject Git リポジトリーを複製します。
    git clone https://hub.jazz.net/git/bbhavers/PoseidonProject
  2. 依存するファイルとモジュールをコピーします。
    cd PoseidonProject/Tutorial1/PoseidonClient
    cp ~/GrovePi/Software/Python/grove_barometer_lib.py
    cp ~/GrovePi/Software/Python/grovepi.py
  3. config.py 構成ファイルを編集します (vi または nano を使用)。clientID フィールドにセンサーの名前を入力し、location フィールドに緯度と経度を入力します。
  4. MQTT クライアント・ライブラリーをインストールします。
    sudo pip install paho-mqtt
  5. コードをテストします。
    sudo python PoseidonClient.py
  6. ブートすると、自動的に PoseidonClient を開始するようにします。
    1. スクリプト・ファイルをスタートアップディレクトリーにコピーします。
      sudo cp poseidon.sh /etc/init.d
    2. パーミッションを変更します。
      sudo chmod 755 /etc/init.d/poseidon.sh
    3. 始動スクリプトをテストします。
      sudo /etc/init.d/poseidon.sh start

      「Starting PoseidonClient」メッセージが表示されるはずです。
    4. スクリプトが実行しているかどうかをテストします。
      ps -ef |grep Poseidon

      2 つの項目が表示されるはずです。
    5. スクリプトがロギングしているかどうかをテストします。
      tail /home/pi/PoseidonProject/Tutorial1/PoseidonClient/poseidon.log

      ログには、送信されたすべてのデータが含まれ、クライアントが再始動するたびに上書きされます。
    6. スクリプトの停止をテストします (実行中のすべての Python プロセスを強制終了します)。
      sudo /etc/init.d/poseidon.sh stop
    7. スクリプトが停止したことをテストします。
      ps -ef |grep Poseidon
    ステップ 6d で表示された項目が消えているはずです。
  7. ここまですべてが正常に機能した場合は、自動的にブートするようにスクリプトをアクティブにします (LSB タグの欠落に関する警告は無視してください)。
    sudo update-rc.d poseidon.sh defaults
  8. リブート時にスクリプトが再始動するかどうかをテストします。
    sudo shutdown -r now

    ブート後、このセクションですでに実行したコマンドを使用してチェックします。
  9. 植物の周囲の土壌に湿度センサーを差し込んで、モニターを開始します。

これで Raspberry Pi が構成され、インターネット上のマイクロブローカーにデータを送信します。config.py で構成された、このトピックに加入するすべての MQTT クライアントが、ユーザーが公開するデータを見ることができます。

次に、Bluemix をベースにしたクラウド環境をセットアップし、このデータを取り込んでデータベースに保管し、Twitter にポストします。

ステップ 3. Bluemix 環境をセットアップする

次に、Internet of Things Foundation Starter を使用して Bluemix でアプリケーションを作成します。IoT Starter は、Node.js ランタイムと Node-RED アプリケーションを提供し、Cloudant NoSQL データベースのインスタンスを作成します。

  1. Bluemix にログインします。ダッシュボードで「CREATE AN APP」ボタンをクリックします。カタログの Boilerplates セクションから「Internet of Things Foundation Starter」を選択します。 Screenshot of the IoT Foundation Starter in the catalog
    Screenshot of the IoT Foundation Starter in the catalog
  2. アプリケーションの名前とホスト名を入力します。それ以外はすべてデフォルトのままにし、「CREATE」をクリックします。 Screenshot of the UI for creating an IoT Foundation app
    Screenshot of the UI for creating an IoT Foundation app

    プロビジョニングが完了すると、アプリケーションが自動的に開始します。
  3. アプリケーションの ROUTES パスをクリックして、アプリケーションの Web サイトまでブラウズします。 Screenshot of the initial Node-RED app UI
    Screenshot of the initial Node-RED app UI
  4. Go to your Node-RED flow editor」をクリックします。
  5. Node-RED フロー・エディターには、デフォルトの IoT フロー・ダイアグラムは表示されます。 Screenshot of the Node-RED flow editor
    Screenshot of the Node-RED flow editor

    左側に、選択可能なノードのリストがあります (入力と出力の「コネクター」と、入力データを操作したり、出力を生成したりするための機能)。右側に、ワークシートで選択されているノードのプロパティーがあります。
  6. シート内のすべてのノードを選択し (シフト・キーを押さえたまま、各ノードを選択します)、「Delete」を押してシートからノードを削除します。

ステップ 4. データを保管するように Bluemix を構成する

このステップでは、センサー・データを受信して Cloudant データベースに保存するように Bluemix 環境を構成します。

  1. Node-RED フロー・エディターで、mqtt 入力ノードをワークシートにドラッグして、Raspberry Pi 上のクライアントがセンサー・データを送信する先の MQTT ブローカーからデータを受信する ノードを作成します。
  2. シートで mqtt 入力ノードをダブルクリックして、以下の設定を入力します。
    • Broker:realtime.ngi.ibm.com (クライアント ID なし、ユーザー ID とパスワードなし)
    • ClientID: 独自の固有 ID (例えば、MyPoseidon23) を選択します。
    • Topic:/org/dutchcourage/poseidon/client/sensor
    • Name:Receive Sensor Data
    Screenshot of the dialog box for editing the mqtt input node
    Screenshot of the dialog box for editing the mqtt input node
  3. debug ノードをフローに追加し、Receive Sensor Data 入力ノードに接続します。debug ノードがエディターの右側の「debug」タブに受信メッセージを表示します。
  4. フローをデプロイしてテストします。(エディターの右上で、「Deploy」をクリックします。)
  5. 着信メッセージがないか「debug」タブを監視します。 Screenshot of the debug tab
    Screenshot of the debug tab

    トリガーして新しい値を送信するために、Raspberry Pi で Poseidon クライアントを再始動したい場合があります。(デフォルトでは、1 時間に 1 回メッセージを送信します。) クライアントの再始動について詳しくは、ステップ 2 を参照してください。
  6. データが着信していることのテストに成功したら、cloudant 出力ノードをフローに追加して Cloudant データベースにこのデータを追加し、Receive Sensor Data ノードに接続します。
  7. cloudant 出力ノードをダブルクリックして、そのパラメーターを編集します。
    • Service: Bluemix Cloudant インスタンスを選択します。
    • Database: poseidonsensors
    • Only store msg.payload object?: チェック・ボックスを選択します。
    • Name:Save to Cloudant
    Screenshot of the dialog box for editing the cloudant out node
    Screenshot of the dialog box for editing the cloudant out node
  8. エディターで「Deploy」をクリックして、フローをアクティブにし、データを Cloudant データベースに保管します。
  9. Cloudant に保存されたデータを表示するために、ご使用の Bluemix アカウントに戻ります。ダッシュボードで、「Services」セクションにリストされている Cloudant インスタンスが表示されます。 Screenshot of the LAUNCH button
    Screenshot of the LAUNCH button

    Cloudant インスタンスをクリックしてから「LAUNCH」をクリックします。これで、Cloudant ダッシュボードが表示されます。ここで、新しいデータベースを作成したり、複製タスクを作成したり、データベース項目の表示や編集を行ったりすることができます。
  10. poseidonsensors データベース (Save to Cloudant ノードによって作成された) をクリックします。実際のセンサー・データを表示するには、文書の上にマウス・ポインターを移動し、文書の右上隅にある「Edit doc」をクリックします。 Screenshot of the poseidonsensors database
    Screenshot of the poseidonsensors database

    これで、文書の JSON データ構造と内容を表示できます。 Screenshot of the JSON contents of the poseidonsensors document
    Screenshot of the JSON contents of the poseidonsensors document

これで、データがデータベースに保管されるようになりました。

ステップ 5. Bluemix を構成してツイートを送信する

Node-RED インスタンスが稼働状態になったので、フローを拡張して、受信した MQTT メッセージを Twitter で公開するようにします。

  1. Node-RED フロー・エディターを表示します。
  2. フロー・エディターの右上にある「hamburger」ボタンをクリックし、 「Import」>「Clipboard」 を選択します。 Screenshot of importing data into Node-RED from the clipboard
    Screenshot of importing data into Node-RED from the clipboard
  3. Node-RED フロー全体のソース・コードをインポートします。
    1. 別のブラウザー・ウィンドウで、PoseidonProject コード・リポジトリーを表示して、Tutorial1/Nodered/NodeRedFlow.txt を選択します。
    2. NodeRedFlow.txt の内容をクリップボードにコピーします。
    3. Node-RED エディターに戻ります。クリップボードの内容をテキスト・ボックスに貼り付け、「Ok」をクリックします。 Screenshot of the pasted data
      Screenshot of the pasted data
    4. ワークシート上のどこかにフローを置きます。
  4. 新しいノードを既存の Node-RED フローに接続します。
    1. インポートしたフローからすでに作成したノードを削除します。(Receive Sensor DataSave to Cloudant、および debug)
    2. Receive Sensor Data ノードを (新たにインポートされた) JSON to JSOBJECT ノードにワイヤリングします。
    これで、Node-RED フローは次のように表示されるはずです。 Screenshot of the full Node-RED flow
    Screenshot of the full Node-RED flow
  5. Tweet Sensor Values ノードをダブルクリックし、ペン・アイコンをクリックしてご使用の Twitter アカウントを Node-RED で認証します。 Screenshot of the dialog box for authenticating with Node-RED
    Screenshot of the dialog box for authenticating with Node-RED
  6. Deploy」をクリックして変更を保存します。
  7. Raspberry Pi で Poseidon クライアントをいったん停止してから開始して、データの再送を開始し、センサー・データを報告するメッセージがないか、Twitter アカウントを監視します。 Screenshot of sensor-data tweet
    Screenshot of sensor-data tweet

これでデータを Twitter に送信できるようになりました。

パート 1 のまとめ

このチュートリアルでは、土壌の湿度、気圧、温度をモニターするためにセンサーを備えた Raspberry Pi をセットアップする方法を習得しました。MQTT を使用して IBM IoT クラウド・ブローカーにデータを送信するようにクライアントを構成しました。Bluemix を使用して、このデータを取り込み、Cloudant データベースに保管し、 データを Twitter にポストしました。センサーから、ソーシャル・メディア上の共有データまでのエンドツーエンド・フローの作成方法を習得したので、ソリューションの機能の拡張を開始できるようになりました。— 例えば、モバイル・アプリケーションを使用したり、いつ植物に水が必要になるかを予測するためのデータ分析などです。

次に、パート 2 に進んで、Node-RED インスタンスを保護し、変更をアプリケーションに自動デプロイする方法を説明します。 さらに、パート 3では、センサー・データをグラフとして表示するクライアント・アプリケーションを作成してソリューションの機能を高めます。


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing, Web development, Open source
ArticleID=997103
ArticleTitle=「モノのインターネット」を使用して節水する: パート 1
publish-date=03122015