余ったRaspberry Piで始めるIoT入門 Bluemixと接続するチュートリアル

2017/03/09

Patrick Catanzariti

47

Articles in this issue reproduced from SitePoint
Copyright © 2017, All rights reserved. SitePoint Pty Ltd. www.sitepoint.com. Translation copyright © 2017, KADOKAWA ASCII Research Laboratories, Inc. Japanese syndication rights arranged with SitePoint Pty Ltd, Collingwood, Victoria,Australia through Tuttle-Mori Agency, Inc., Tokyo

IoTを体験してみたいけど、何から試したらいい? リーズナブルなRaspberry PiとIBMのBluemixを接続し、Watsonのサービスを利用して遊んでみることにしました。

※本記事は2016年6月17日に掲載した記事の翻訳を一部更新したものです。執筆時点の情報をベースにしており、最新ではない可能性があります。

少し前のことになりますが、IBMがBluemixのトライアルユーザーにRaspberry Pi 3を発送し、IoT開発者たちを熱狂の渦に巻き込みました。私はBluemixとIBM Watsonをずっと試してみたいと思っていたので、今回ちょうど良いきっかけになりました。Raspberry Pi 3を入手できた非常にラッキーな開発者の1人として、そして、新しい技術が登場した際にいつもしているように、今回も色々試してみた体験をシェアすることにしました。

この記事は、Raspberry PiをIBM Watson、Bluemixと組み合わせて使う方法を解説する連載の1回目です。Raspberry PiをIBMのクラウドサービスに接続するさまざまな方法に着目し、実際にうまくいかなかったときに見つけたテクニックも紹介していきます。とても楽しかったので、IBMのBluemixとWatsonを試してみることを、特に予備のRaspberry Piが眠ったままになっている人には強くおすすめします。

Raspberry PiWatoson IoTのクイックテストを設定する

Raspberry PiにIBM Watson IoTのプラットフォームを設定するために、Raspberry Pi上で次のコマンドを実行します。

最初に、IBMのGitHubからWatson IoTプラットフォームのインストーラーをダウンロードします。

curl -LO https://github.com/ibm-messaging/iot-raspberrypi/releases/download/1.0.2.1/iot_1.0-2_armhf.deb

次に、このコマンドを実行してインストールします。

sudo dpkg -i iot_1.0-2_armhf.deb

インストールが完了すると、IBM Watson IoTプラットフォームサービスが自動的に実行されます。実際はRaspberry Piが起動するたびに、このサービスが自動的に実行されます。本当に動いているか確認したい場合は、次のコマンドを実行します。

service iot status

以下のようなレスポンスが返ってくるはずです。

● iot.service - LSB: IoT service
   Loaded: loaded (/etc/init.d/iot)
   Active: active (running) since Fri 2016-04-29 23:33:47 UTC; 15s ago
   CGroup: /system.slice/iot.service
           └─11960 /opt/iot/iot /dev/null

上記のメッセージが表示されたら、準備OKです! 実はIBMのクラウドにストリームされているRaspberry Piデータをこの段階で見られます。データを見たい場合は、以下を入力します。

service iot getdeviceid

Raspberry PiのIDと閲覧先のURLが返ってきます。

The device ID is abcdefghijkl
For Real-time visualization of the data, visit http://quickstart.internetofthings.ibmcloud.com/?deviceId=abcdefghijkl

(プレースホルダ―ではなくRaspberry PiのIDが入った)http://quickstart.internetofthings.ibmcloud.com/?deviceId=abcdefghijklにアクセスすれば、IBMが提供するかなりシンプルなビジュアライゼーションで、Raspberry PiのCPU温度やその他のクラウドの統計を確認できます。

02

さて、違う方法でデータを扱えるIBMのBluemixを設定しましょう。

Bluemixを使ってみよう

IBM Bluemixログインページに進んで、Bluemixにログインします。もしまだアカウントを持っていなければ、このページでIBMのIDとBluemixの登録ができます。

Bluemixが読み込まれたら、右上のアカウントアイコンをクリックして「region」を選択します。

03

Bluemixがregion内にスペースの作成をリクエストしてきたら、それに従います。ここではスペース名を「dev」としました。

04

続いて「Use Services or APIs」をクリックして、アプリケーションに最適な初期サービスを見つけます。

05

この画面で「Internet of Things Platform」サービスを見つける必要があります。左サイドメニューから「Internet of Things」を選択してチェックボックスをクリックするか、検索バーに「Internet of Things Platform」と入力して検索します。どちらでも結構ですが、見つかったらアプリケーションに必要なこのサービスを選択します。

06

次の画面で「Create」をクリックします。もし「Service Name」を修正したい場合は変更できます。動作に影響はないので、ここではそのままにしていますが、「Raspberry Pi Service」など好きな名前を付けられます。

07

表示されるウェルカムスクリーンをスクロールダウンして、「Launch Dashboard」を選択します。

08

「Add Device」をクリックすれば、Raspberry Piを新しいサービスに追加できます。

09

「Create device type」をクリックします。

10

新しい画面が表示され、デバイスタイプの作成かゲートウェイタイプの作成かを問われます。ここではデバイスタイプを作成します。

11

最後に、デバイスタイプに名前をつけます。はじめの項目はAPIなどで使うデバイスタイプ名ですので、たとえば「my-pis」や「iot-sample-devices」のようにダッシュで区切った小文字で名前をつけます。その下の項目で、詳細を記入できます。

12

次の画面ではデバイステンプレートのオプションが提供され、端末(Raspberry Pi)ごとに項目に記入し、各端末の特徴を定義します。デバイスタイプでどの端末データを記録したいかなど、好きなように設定します。私の場合はRaspberry Piの追跡のためだけにこのデバイスタイプを使っているので、Raspberry Piの「Model」だけ選択しています(たとえば、Raspberry Pi 2, Raspberry Pi 3… など)。

13

デフォルトのモデルタイプを設定します。私の場合は「Raspberry Pi 3 Model B」がこのデバイステンプレートのメインモデルになるよう設定しました。

14

JSON形式で自身のカスタムメタデータも追加できますが、今回は簡単に進めるため、説明は割愛します。

15

デバイスタイプの準備ができました! 「Add Device」の画面に戻りましょう。今度は新しいデバイスタイプを選択します。「Add Device」が選択されていることを確認して「Next」をクリックします。

16

Raspberry Pi用の個別のデバイス情報をBluemixにセットアップします。デバイスに(システム内で重複しないように)固有のIDをつけます。たとえば「PiBrain」などです(自由に名前を付けるか、図中の名前をそのまま使っても構いません!)。モデルは先ほど設定したものがデフォルトになっています。もし違うモデルに変更したい場合は、変更してください。すべて正しく入力できたら「Next」をクリックします。

17

デバイスに格納したい特定のデータがなければ、メタデータ関係はスキップできます。次に認証トークンを設定します。認証トークンは好みのようにカスタマイズして定義することも、ブランクのままにしてシステムで自動生成することもできます。もし認証トークンをカスタマイズしたい場合には、次のガイドラインに従ってください。

トークンは8から36文字で、小文字、大文字、数字、記号(ハイフン、下線、ピリオドのみ)を合わせたもの。トークンは重複、辞書のワード、ユーザー名、その他定義済みの数列は避けること

ヒント:トークンのカスタマイズを考えているなら、LastPassのようなランダムパスワード生成プログラムが便利です。

私の場合は、システムに自動生成してもらいました。

18

詳細を確認して正しければ「Add」をクリックします。

19

最後の画面では、生成された(またはカスタマイズした)認証トークンを含む、デバイスの詳細情報がすべて表示されます。これらの詳細情報を安全で見つけやすい場所にコピーしてください! 特に、認証トークンはRaspberry Piにアクセスしないと確認できないので、保存場所をしっかり覚えておいてください。すべての詳細情報をしっかりと保存したら(正しくできましたね?)ポップアップウィンドウを閉じます。

20

Raspberry PiBluemixに接続

ここからRaspberry PiをBluemixに設定したばかりのデバイスに接続しましょう。最初に、先ほどテストしたRaspberry Piで実行しているWatson IoT serviceを止める必要があります。

sudo service iot stop

次に以下を入力して、Raspberry Pi用のWatson IoT configファイル(まだ閉じていない場合は、ファイルを保存するときに作成されます)を開きます。

sudo nano /etc/iotsample-raspberrypi/device.cfg

先ほど保存した詳細情報は以下のようになっています。

Organization ID abcde
Device Type the-greatest-pis-in-the-world
Device ID PiBrain
Authentication Method token
Authentication Token YOURTOKENWOULDBEHERE

この詳細情報をconfigファイルに以下の形式で入力します。

#Device configuration file
org = abcde
type = the-greatest-pis-in-the-world
id = PiBrain
auth-method = token
auth-token = YOURTOKENWOULDBEHERE
#End of Configuration file

簡単なテキストエディターに記入してコピー後、「Ctrl+V」でBluemixに貼り付けるのが一番簡単な方法かもしれません。

「Ctrl+X」で変更を保存し、「修正したバッファを保存」するかを問われたら「Y」を入力します。ファイル名は変更せずに同じファイル名(/etc/iotsample-raspberrypi/device.cfg)のままにしてください。正しいファイル名が表示されたらenterを押してください。

保存できたら、Node-Redの設定に移りましょう!

Raspberry PiにNode-Redを設定する

Node-REDをインストールして、さらに進みましょう。Node-Redは、複雑なコーディングをせずにデバイスとデータに接続して作業できる環境です。

Raspberry Piに以下を入力してすべてを最新バージョンにします。Raspberry Pi向けのRaspianの最新バージョン(Raspbian Jessie)ではすでにNode-REDとWatson IoTで提供されていますが、正しく動作させるには一度すべてを更新することが重要です。

sudo apt-get update

続けて、次も実行します。

sudo apt-get dist-upgrade

この説明の下にあるNode-REDを実行して、inputかoutputで「Watson IoT」が表示されない場合は、sudo apt-get dist-upgradeを実行する必要があります。私はこれを実行するまで表示されませんでした。

Raspberry Pi 3かRaspbian JessieをインストールしたRaspberry Piなら、標準で提供されているはずなのでNode-REDのインストールは必要ありません(最後のコマンドの実行時に最新バージョンに更新されます)。

Raspbianが最新バージョンでなければ、Node-Redのインストールが必要になります。関係があるすべての周辺プログラムをインストールしてから、Node-Redをインストールします。

sudo apt-get install build-essential python-dev python-rpi.gpio

続いてnpmを使ってNode-Red自体をインストールします。

sudo npm install -g --unsafe-perm node-red

以下のコマンドを実行して、IBM Watson IoTのノードにアクセスします。

sudo npm install -g node-red-contrib-ibm-watson-iot

(上のコマンドは、私が実行したときには動かず、スクリプトがnodejsではなくnodeを参照してエラーになり失敗しました。Raspbian Jessieに起こるエラーと推測されるので、Raspbian JessieにはすでにNode-Redがインストールされているので心配いりません!)

もしRaspberry PiではなくコンピューターからNode-REDにアクセスしたいときには、Raspberry PiのローカルIPアドレスが必要になります。以下を使って見つられます。

hostname -I

もっと詳細情報が知りたければ、次のコマンドを実行します。

ifconfig

すべて問題なくインストールできれば、次のコマンドを使うとRaspberry PiでNode-REDを起動できます。

node-red

実行すると、次のように出力されます。

Welcome to Node-RED
===================

30 Apr 02:32:27 - [info] Node-RED version: v0.13.4
30 Apr 02:32:27 - [info] Node.js  version: v0.10.29
30 Apr 02:32:27 - [info] Linux 4.1.18-v7+ arm LE
30 Apr 02:32:27 - [info] Loading palette nodes
30 Apr 02:32:33 - [info] Settings file  : /home/pi/.node-red/settings.js
30 Apr 02:32:33 - [info] User directory : /home/pi/.node-red
30 Apr 02:32:33 - [info] Flows file : /home/pi/.node-red/flows_raspberrypi.json
30 Apr 02:32:33 - [info] Server now running at http://127.0.0.1:1880/
30 Apr 02:32:33 - [info] Starting flows
30 Apr 02:32:33 - [info] Started flows

Raspberry Pi上でhttp://127.0.0.1:1880に接続するか、同じネットワークにあるコンピューターからhttp://{your-pi-ip-address}:1880に接続すると、Node-REDがスタンバイしています。インターフェイスで確認してみましょう。InputとOutputの両方の下にWatson IoTが表示されています。

21

BluemixをRaspberry Piに接続する

現在の状態は、Raspberry PiにインストールしたNode-RED Watson IoT プラットフォームがあり、Raspberry PiにインストールしたNode-RedとBluemixの設定が完了し、Raspberry Piのコマンド待ちの状態です。残っている作業は、Node-Redを使用してRaspberry PiをBluemixに接続することです。

IBMはインポートするだけでクイックテストができるサンプルのノードセットを提供しています!IBMからクリップボードにJSONをコピーしてください。以下のような感じで始まっています。

[{
    "id": "41e935d1.d2619c",
    "type": "inject",
    "z": "d100b337.680e88",
    "name": "",
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "repeat": "5",
    "crontab": "",
    "once": true,
    "x": 205,
    "y": 178.5,
    "wires": [["8332d581.5c7d58"]]
}]
// ... actual JSON file continues past here!

次にMenu> Import > Node-REDのClipboardの順に進みます。

22

JSONデータをテキスト領域にペーストして、OKをクリックします。

23

インポートしたノードはマウスカーソルについていくので、Node-Red上の適切な場所でクリックしてください。

24

「event」ノードをダブルクリックして、Bluemixに設定したRaspberry Piを手元のRaspberry Piに接続できるようNode-REDを設定します。

25

続いて、ポップアップで表示される「Registered」をクリックし、「Credentials」の並びにある編集アイコンをクリックします。

26

先ほどRaspberry Piのdevice.cfgファイルで入力したように、詳細情報を入力します(Nameは任意)。入力できたら「Add」をクリックします。

27

それから「OK」をクリックします。

実行テストの準備がすべて整いました! 右上にある「Deploy」をクリックします。

28

「Successfully deployed」のメッセージが表示されます。

29

右上の「Debug」タブをクリックして、ノードからの出力を確認します。msg.payload は、2つの形式(ストリングとJSONオブジェクト)で温度を示すデバッグのコンソールメッセージが表示されます。

30

備考:イベントノードから「Error sending message: Error: Client is not connected」といったエラーが出たら、まずはsudo service iot stopを実行して他のWatson IoT serviceを終了します。同時にWatson IoT serviceを実行しないでください!  私自身何度かこの失敗をしています!

31

BluemixでWatsonのIoTプラットフォームの情報を確認する

Raspberry Piの情報が完全に取り込まれているか確認するには、次のページに接続します。

https://{YOURORGANISATIONID}.internetofthings.ibmcloud.com/dashboard/#/overview

ここから、左側のメニューの「Devices」オプション(上から2番目のメニュー)をクリックします。

32

Raspberry Piデバイスはここにリストされているので、クリックして詳細を開きます。

33

データのストリーミングが完了しました!

34

Node-Redフローを調節する

各ノードの設定を編集して、Node-REDフローをどうやって実行するかを調節します。たとえばtimestampノードをダブルクリックすると、このノードが実行する頻度を変更できます。

35

実行の頻度を高くしたり、低くしたりと間隔を変更できます。たとえば、次のように間隔を30秒に変更しました。

36

「Deploy」をもう一度クリックして変更を適用し、少し実行をゆっくりにします。

37

最後に

幅広い使い方ができるIBMのIoTクラウドサービス、データ解析、そしてRaspberry Pi向けの他のクラウドサービスに、Raspberry Piを接続できるようになりました。Node-REDを使うと、クラウドとさまざまなAPIを結びつけ、多くの特徴と機能性を持つプログラムを構築できます。次の記事では、さらに突っ込んで、クラウドとBluemixのメリットを生かす特色ある方法を続けて紹介する予定です。

(原文:Connecting a Raspberry Pi to IBM Watson, Bluemix and Node-RED

[翻訳:和田麻紀子/編集:Livit

Copyright © 2017, Patrick Catanzariti All Rights Reserved.

Patrick Catanzariti

Patrick Catanzariti

開発者に勢いのあるテック業界の情報を伝えるサイト「Dev Diner」のファウンダー。SitePointではHTML/CSSチャンネルのエディターであり、インターネット関連情報、仮想/拡張現実などに関しての寄稿者です。そのほかSitePoint PremiumとO'Reillyのインストラクター、メタ・パイオニア、そしてテックデモで新しいことを試すのが大好きなフリーランスのWeb開発者と広く活動しています。

Loading...