Comments
Description
Transcript
IBM Bluemixの Node-REDを使って 簡単アプリ作成を 体験する
IBM Bluemixの Node-REDを使って 簡単アプリ作成を 体験する 2015年8月20日 1 © 2015 IBM Corporation Node-RED について IBM 英国Hursley 研究所の Emerging Technology Teamで開発されたソ フトウェア • 2013年、社内ハッカソンで堂々一位、GitHub に登録 • 2014年 Qcon で発表 オープンソースプロジェクトとして提供 2 © 2015 IBM Corporation Node-REDの特徴 ハードウェアデバイス,API,オンラインサービスが画期的な 方法で結合された"仮想環境をブラウザ上で実現 ブラウザベース UI Bluemixでなくて node.js で動作 も使用可能です • 軽量 機能をカプセル化してNodeと して利用 独自Nodeを作成・追加可能 Bluemixの様々なサービスを 簡単に利用可能 3 © 2015 IBM Corporation Node-RED 画面 シート 表示情報の 切り替え 実装UI デプロイ実行 ノード 処理フロー ノードパレット 4 Node Infomation または デバッグコンソール © 2015 IBM Corporation Node-RED実装方法 ④Deployを選択 Node-RED画面 ①ノードを選択し ドラッグ&ドロップ ②ノード間を 接続 ③ノードプロパティ設定 5 © 2015 IBM Corporation Node-RED搭載ノードの紹介 (代表的なもの) Node分類 機能 Input イベントの起動条件の設定 Output 外部アプリへの送信 Function イベント分岐、受信データの変換、一時停止 等 Social Twitter/Mail/ircの送受信 Storage DBへの保存、DB検索 Analysis 分析 Advanced RSS/atomの更新受信時にイベント起動 コネクタが右側に存在 ⇒①イベントの起動 イベント起動条件を満たし たとき、その情報を送信す る 6 コネクタが左右に存在 ⇒②データ変換/分岐 左からデータ受信。 それを変換/分岐させ、右側に結果を 返す コネクタが左側に存在 ⇒③外部アプリ起動/DB保存 左からデータを受信し、それを送 信/保存 © 2015 IBM Corporation ①イベントの起動 コネクタが右側に存在するもの 7 Node名称 イベント開始条件 後続フローに送信する内容 Inject 定期起動orノードのクリック 指定文字列or現在時刻or 情報なし(起動のみ) デバック向けの機能。 http http://[xxxxxxx].mybluemix .net/[ノードのURL]リクエスト送信 時 リクエスト情報 Mail メール受信時、または未読メール存 在時定期起動 メール本文(text/plain) Twitter 指定メッセージのTweet時に自動 起動 Tweet情報 (本文、発言場所、国…) Feedparse RSS/atomの更新受信時 - © 2015 IBM Corporation ②データ変換/分岐 コネクタが左右に存在するもの 8 Node名称 機能 後続フローに送信する内容 Function 受領データの更新 更新済データ Switch 条件に応じて、フローを分岐させる 受信データ Delay フローを待機 受信データ http request 指定サイトに接続 接続サイトのソース Cloudant DB検索 DBの検索結果 Sentiment 受信データをセンチメント分析 評価情報を追加した受信データ Html HTMLソースのうち、指定タグをすべ 指定したタグの情報 て取得 © 2015 IBM Corporation ③外部アプリ起動/DB保存 コネクタが左側に存在するもの Node名称 機能 Debug フロー上に流れている情報を画面表示 http response http requestを返す 9 Cloudant DBへのデータ保存 Mail メール送信 © 2015 IBM Corporation プログラミング JavaScriptで記述します • 簡易エディターが付属 • 非同期処理も可能 ※より複雑な処理は node の作 成をお勧めします。 function は最後に return msg; をいれる と次のnode に送信してくれます。 10 詳細ドキュメント: http://nodered.org/docs/writing-functions.html © 2015 IBM Corporation 覚えておくNode-RED固有変数 “context.global” “context” “msg” “msg” オブジェクト: node 間を流れるメッセージを表す JSON オブジェクト。 msg.payload はかならず存在する。msg.<string> で新しい属性を追加できる。 “context” オブジェクト: node 内部で保存される任意の JSON オブジェクト “context.global” オブジェクト: node 間で共有されるグローバルオブジェクト 11 © 2015 IBM Corporation 1. コードを書かずにソーシャルデータを分析する ハンズオン概要 Twitter 情報の取得 センチメント 分析結果の 追加 必要なデータ だけに絞込み データを DBに保管 DBコンソー ルで簡易 分析 Node-RED 12 © 2015 IBM Corporation Node-RED Starterをデプロイする Bluemixにログインします ログイン後、「カタログ」をクリック 画面上部「ボイラープレート」の セクションの「Node-RED Starter」を クリック 名前のフィールドにアプリの名前を 入力(URLの一部となるので他と 重複しないように指定します) 例:日付+名前+何か文字列 = 0820taroabc 「作成」をクリック ここをクリック Node-RED Starterが起動します ※若干時間がかかります 13 © 2015 IBM Corporation データベースのバインド (1) Node-RED Starterが起動したら、データ保管用のdashDBをバインドします (データ確認用にCloudantを使用しますがデフォルトでバインド済み) 画面左側の「概要」をクリック 14 © 2015 IBM Corporation データベースのバインド (2) 「サービスまたはAPIの追加」をクリックしてdashDBをバインドします 15 © 2015 IBM Corporation データベースのバインド (3) カタログから「データ&分析」セクションまで下にスクロールし、dashDBをクリックします ■アプリ名が作成したものと同じことを 確認して「使用」をクリックします ■すぐに再ステージングしますか?というダイアログ ボックスで、「再ステージ」をクリックします。 ステージングの間にdashDBの設定を開始します 16 © 2015 IBM Corporation dashDBの起動 (1) 左ペインで概要をクリックしdashDBをクリックします 17 © 2015 IBM Corporation dashDBの起動 (2) dashDB左ホーム画面で「LAUNCH」をクリックしdashDBコンソールを起動します 18 © 2015 IBM Corporation dashDBの設定 (1) dashDBのウェルカム画面が表示されます。 ここからTwitterデータを保管するテーブルを作成します 左ペインの「Tables」をクリックします 新しくテーブルを作成するため、「Add Table」をクリックします 19 © 2015 IBM Corporation dashDBの設定 (2) テーブル作成のためのSQL 文を以下のように入力して、 「Run DDL」をクリックし テーブルを作成します ※TweetのIDとセンチメント の値を保管する列を作成し ます CREATE TABLE "TWEETS" ( "TWEETID" VARCHAR(50), "SENTIMENT" INT ); テーブル作成が終了したら 右上の「×」でウィンドウを閉 じます 20 © 2015 IBM Corporation dashDBの設定 (3) 自動的にScheme名が設定され、テーブルが作成されたことを確認します 保管用DBの設定はこれで終了です。Bluemixの画面に戻ります。 dashDBのタブは開いたままにしておいてください 21 © 2015 IBM Corporation Node-RED フローエディターの起動 Bluemix画面で左側の「概要」をクリックします アプリ名の下にある「経路」のURLをクリックし、Node-REDフローエディターを起動します フローエディター画面が 表示されます 22 © 2015 IBM Corporation Twitterデータを取得する 画面左側のノード一覧のSocialの欄にある Twitterと、 output欄にあるdebugを右側のワーク スペースにドラッグ&ドロップし、マウスでつなぎます。 twitter node をダブルクリックし、Twitter ID欄の 右側の鉛筆マークをクリックして自分のtwitter アカ ウントを設定します。Twitter連携が終わったら Add をクリック。 For欄に検索したいキーワードを入れます。今回は cloudと設定します。OKをクリック Deploy ボタンをクリックします 右側のDebug タブに表示されることを確認します 23 © 2015 IBM Corporation 取得したTwitterデータを加工してDBに保管する (1) 画面左側のノード一覧の function欄にある function、 analysis欄のsentiment、 storage欄のcloudant、dashDB を右側のワークスペースにドラッグ&ドロップし、下図 のようにマウスでつなぎます。 左側だけに 接点がある ものを選択 します 24 © 2015 IBM Corporation 取得したTwitterデータを加工してDBに保管する (2) Cloudantのノードをダブルクリックします サービスにバインドされているサービスを選択し データを保管するデータベース名に cloudtweetsと指定して、OKをクリックします。 画面右上の をクリックします ある程度 時間が経ったら twitterとsentiment の接続を削除して、再度 を クリックします では Cloudantに保管されたデータを見てみま しょう Bluemixのタブに移動します 25 © 2015 IBM Corporation 取得したTwitterデータ内容を確認する (1) アプリの概要の画面で Cloudantをダブルクリックします Cloudantのホーム画面が表示 されたら、右上の LAUNCH を クリックしてCloudantのコンソー ルを起動します 26 © 2015 IBM Corporation 取得したTwitterデータ内容を確認する (2) CloudantのDB一覧から、cloudtweetsをクリックします ドキュメント一覧が表示されるので、どれか1つを選んで鉛筆マークをクリックします 27 © 2015 IBM Corporation 取得したTwitterデータ内容を確認する (3) 保管された内容が表示されます。 今回は TweetのIDと、センチメント・スコアを使用して分析を行います 確認したらNode-REDの画面(タブ)に移動します 28 © 2015 IBM Corporation 取得したTwitterデータを加工してDBに保管する (1) Twitterとsentimentのノードを接続し、sentimentとcloudantの接続を削除し、下図のよう にします。 functionノードをダブルクリックします function欄に以下を入力してOKをクリック します(IDとスコアだけを次のフローに送る) msg.payload = { "TWEETID": msg.tweet.id, "SENTIMENT": msg.sentiment.score }; return msg; 29 © 2015 IBM Corporation 取得したTwitterデータを加工してDBに保管する (2) dashDBノードをダブルクリックします Service欄に既定のものを選択し、 Table名に作成したテーブル TWEETS と 入力し、OKをクリックします これで、Twitter からデータを取得、センチメント・スコアを追加、DBのデータ保管、までの ステップが完了しました。 をクリックしてデプロイします。 次はdashDBで簡易分析を行います。 dashDBの画面(タブ)に移動します。 30 © 2015 IBM Corporation 取得したTwitterデータを加工してDBに保管する (3) dashDBノードをダブルクリックします Service欄に既定のものを選択し、 Table名に作成したテーブル TWEETS と 入力し、OKをクリックします これで、Twitter からデータを取得、センチメント・スコアを追加、DBのデータ保管、までの ステップが完了しました。 をクリックしてデプロイします。 次はdashDBで簡易分析を行います。 dashDBの画面(タブ)に移動します。 31 © 2015 IBM Corporation 取得したTwitterデータを加工してDBに保管する (4) Browse Dataをクリックし、IDとスコアが保管されていることを確認します 32 © 2015 IBM Corporation dashDBで簡易分析する (1) Browse Dataをクリックし、IDとスコアが保管されていることを確認します 33 © 2015 IBM Corporation dashDBで簡易分析する (2) SQLでセンチメント・スコアごとのTweet数を調べます 左側のペインで、Run SQL をクリック 以下のSQL分を入力し、Run をクリック SELECT SENTIMENT, COUNT(TWEETID) from TWEETS GROUP BY SENTIMENT ORDER BY SENTIMENT DESC; 34 © 2015 IBM Corporation dashDBで簡易分析する (3) センチメント・スコアごとのTweet数の分布が表示されました ※数字が大きいほどポジティブ、小さいほどネガティブ 35 © 2015 IBM Corporation まとめ: コードを書かずにソーシャルデータを分析する Twitterデータを簡単に取得 簡単なセットアップとワイヤリングだけで、データをNoSQL、SQLのデータベースに保存するこ とが可能 さまざまな応用が可能 dashDBの Analyticsの機能を 使えば(Rなど)、より高度な分析が可能 保管先には、MongoDBやHDFSなども選択でき、用途にあわせて使用可能 どんどんデータが取得されていくので、Twiiterのノード を削除して、再度 Deploy してください 36 © 2015 IBM Corporation 2. すばやくチャット・アプリを作る 37 © 2015 IBM Corporation 既存のフローをインポートする (1) 公開されているフローをインポートします • https://ibm.biz/BdX3Hr にアクセス • 「ログインして DevOps Servicesの 使用を開始」をクリック • Bluemixのログインに使用したIDと パスワードでサインイン 公開プロジェクトが開くので、 nodechat.json をクリックして開き、その 内容をすべてコピーする 38 © 2015 IBM Corporation 既存のフローをインポートする (2) Node-REDの画面に移動し、右肩の + をクリックして新しいシートを作成します 画面右側のメニューをクリックし、Import → Clipboardをクリックします 39 © 2015 IBM Corporation 既存のフローをインポートする (3) 先ほどコピーしたフロー(JSONテキスト)をペーストし、OKをクリックします フローがインポートされます 40 © 2015 IBM Corporation デプロイして実行する 右上の をクリックしてデプロイします Node-RED画面のURLをコピーします ブラウザーの新しいタブを開きます 新しいタブで、コピーしたURLをペーストし、最後の mybluemix.net/red/# の部分を mybluemix.net/chat に変更し、Enterを押します チャットルームが表示されるので 名前とメッセージを入れて、チャットを 行ってみましょう (近くの人とURLを共有することも できます) 41 © 2015 IBM Corporation フローとノードの内容を確認する 1つ目のフロー:WebSocketプロトコルを使用した通信チャネルの作成 中央のfunctionノードで session情報を削除し、接続している全クライアントにメッセージを ブロードキャストするように設定 2つ目のフロー:クライアント・サイドのコード • 左のノード:GET リクエストを受信するエンドポイント • 中央のノード(テンプレート):ページ構造、メッセージ処理、ビジュアル の3つからなる構成 • ページ構造:チャット・メッセージを受け取る div と、メッセージを送信するためのフィールドを保 持するフッターが含まれるだけの単純な HTML • メッセージ処理:JavaScriptによる、WebSocket接続、イベント処理 42 © 2015 IBM Corporation 3. IoTアプリを作成:モバイルのセンサーデータを取得する 43 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■全体像 サービス IoT Foundationサービスは センサーデータを仲介する IBM IoT Foundation デバイス IBM Bluemix スマホのセンサーで計測した データをクラウドサービスに送信 44 アプリケーション アプリはサービスからセンサー データを取得して処理する © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■スマートフォンをお持ちの方は、スマホのブラウザで下記URLに アクセスしてください。 http://phonesensor.mybluemix.net PhoneSensorが起動します。スマホに内蔵された各種センサーの 情報を取得し、BluemixのIoT Foundationサービスに送信して います。 ■このセンサー情報を受け取って処理するアプリをBluemix上の Node-REDで作ってみましょう。 Node-REDの画面で、新しいシートを追加します(Page39の手順参照) 45 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■スマホのセンサー情報を、クラウド上のIoT Foundation サービスから受け取ってみましょう。 左側のパレットから「ibmiot」ノードを中央のキャンバスに ドラッグ&ドロップします。 ドラッグ&ドロップ ■キャンバスにドロップした「IBM IoT App In」ノードをダブルクリックして設定画面を開きます。 Authentication は「Quickstart」を選択。 Device Id に先程のPhoneSensorに表示されている 文字列の末尾12桁の数字を入力。 46 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■受け取ったデータを表示するノードを用意します。 左側のパレットから「debug」ノードを中央のキャンバスに ドラッグ&ドロップします。 ドラッグ&ドロップ ■ノードの横にあるコネクタをクリック&ホールドし、「ibmiot」ノードと「debug」ノードを線で 繋ぎます。 この部分を掴んで引っ張る 47 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■これでデータの入力と出力の定義ができました。 それでは実際に動かしてみましょう。 右上の「Deploy」ボタンをクリックします。 ■画面上部に「Successfully Deployed」の文字が表示されればOKです。 (この文字はすぐに消えます) ■実行結果を確認してみましょう。 右上の「debug」タブを選択します。debugノードに流れて きたデータはここに表示されます。 先程のPhoneSensorを動かします。スマホのセンサー情報が debug画面に表示されれば成功です。 48 取得できる情報はスマホの機種によって 異なる場合があります。 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■debug画面にセンサーデータがうまく表示されない場合のチェックポイント -PhoneSensorが正しく稼動しているかどうかを確認してください。スリープ状態でアプリが 停止していないでしょうか。 -PhoneSensorの接続ステータスが「Connected」になっていることを確認してください。 例えば、誤ってPhoneSensor画面下部の「Register」をタップしてしまうと、ステータスが 「Disconnected」になります。 -「ibmiot」ノードのDevice Idが 正しく設定されているかどうかを ご確認ください。 例えば、スマホのWebブラウザで PhoneSensorを再読み込みすると Device Idが変わってしまいます。 その場合は再度「ibmiot」ノードの 定義情報をPhoneSensor側と 同じになるよう変更してください。 49 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■正しくセンサー情報が取得できたので、この情報に応じて何らかの処理を行うフローを 作ってみましょう。 「tiltLR」というデータ項目に着目します。 これはスマホ端末の左右の傾きを測定しているようです。 実際に端末を動かして、値の変化を確認してください。 この傾き度合いによって表示メッセージを変えてみましょう。 ■センサー情報から「tiltLR」の値だけを抽出します。 左側のパレットから「function」ノードを中央のキャンバスに ドラッグ&ドロップします。 ダブルクリックで設定画面を開き、Functionの内容を 以下のように書き換えて「OK」をクリックします。 return {payload:msg.payload.d.tiltLR}; 50 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■正しく動くかどうか確認してみましょう。 「ibmiot」と「debug」との間に、今作成した 「function」ノードを挟むように線を繋ぎ変えます。 線はクリックで選択した状態でDeleteキーで 削除できます。 ■右上の「Deploy」ボタンをクリックします。 ■不要な情報が削除されて、「tiltLR」の値だけが 表示されればOKです。 51 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■「tiltLR」の値によって処理を分岐させます。 左側のパレットから「switch」ノードを中央のキャンバスに ドラッグ&ドロップします。 ダブルクリックで設定画面を開き、分岐条件を指定します。 左に5度以上傾いた場合=「左に傾いてます」 右に5度以上傾いた場合=「右に傾いてます」 傾きが5度未満の場合=「ほぼフラットです」 上記のような条件設定をするには 右図のように指定して「OK」を クリックします。 傾きが-5度以上(左)なら1番へ 傾きが5度以上(右)なら2番へ 条件を追加するには、「+rule」 ボタンをクリックします。 52 どちらでもない(フラット)なら3番へ © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■条件分岐された後の処理を作成します。 左側のパレットから「template」ノードを中央のキャンバスに ドラッグ&ドロップします。 ダブルクリックで設定画面を開き、表示するメッセージを定義します。メッセージの内容は 自由に変更してください。 {{payload}} と指定すると、先程debug 画面で確認した傾きデータの値が表示 されます。 1番(左) 2番(右) 3番(フラット) 同様に2番、3番のノードも作成し、 それぞれメッセージを定義します。 最後にswitchノードのコネクタと 1番、2番、3番のノードを線で繋げます。 53 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■キャンバスの中を整理して、各ノードを以下の図のように接続してください。 正しく線が繋がっていれば、ノード自体は キャンバス内のどこに置かれていても動作 に影響はありません。 ■処理フローが完成しました! それでは実際に動かしてみましょう。 右上の「Deploy」ボタンをクリックします。 54 © 2015 IBM Corporation Node-REDでIoTアプリを作成 ■「Successfully Deployed」のメッセージが表示されれば 成功です。 PhoneSensorを稼動させたスマホを左右に傾けて 指定したメッセージが表示されることを確認してください。 お疲れ様でした! IBM Bluemix と Node-RED によって、ほぼノンプログラミングで IoTデバイスから収集したデータを処理するアプリが作れました。 55 © 2015 IBM Corporation まとめ Node-RED は様々な情報源からの情報を取得して、加工するのが得意 • Web API • IoT (IoT Foundation/MQTT) 世の中にある様々な API を “node” という単位でカプセル化してくれる • コードを書かなくても簡単に呼び出せる! JavaScript によるプログラミングができる • Function node • 自作の node もあり 56 © 2015 IBM Corporation 一般のWEBサービスの呼び出し “http request” node を利用する 事前に呼び出しパラメータを設定する • msg.url : WEBサービスURL • msg.method: ‘GET’, ‘PUT’ 等 • msg.header: 必要があればヘッダーセット • msg.payload: リクエストの body • msg.topic: URL の <url>?<params> ? 以下のパラメータ 57 © 2015 IBM Corporation 例:楽天トラベル施設検索API https://webservice.rakuten.co.jp/api/simplehotelsearch/ 58 © 2015 IBM Corporation 【参考】フローのImport/Export Node-REDでは作成したフローを別 Node-RED 環境に簡単に移すことができます。 別 Node-RED 環境に処理記述を移す手順 ①画面右上からExportを選択 ③画面右上からImportを選択 59 ②ポップアップのコードをコピー ⇒Node-REDでは実装内容をText形式で保持 ④ ②でコピーしたTextを貼り付ける © 2015 IBM Corporation Appendix - Nodeの追加 独自Nodeの追加 • 既存のノードでは機能が不足する場合、独自のノードも容易に追加可能 • 記述ルールに従い、nodesディレクトリ配下にHTMLファイルとjsファイル作成しデプロイ HTMLファイル:Nodeの体裁を定義(色やアイコン、入力項目など) jsファイル:Nodeでの処理内容を記述 • 記述ルールやサンプル http://nodered.org/docs/creating-nodes/first-node.html 作成、デプロイ 60 © 2015 IBM Corporation (参考)lower-case.html, lower-case.js lower-case.html lower-case.js http://nodered.org/docs/creating-nodes/first-node.html 61 © 2015 IBM Corporation https://github.com/node-red http://flows.nodered.org 様々な node や flow が公開されています 62 © 2015 IBM Corporation