Node-RED ＋ Watson IoT Platform ＋ CloudantNoSQL 使った、モーター制御シュミレータ・アプリでグラフ表示して（見たかった）

### プロローグのプロローグ
Node-RED 絡みの情報として書きます。
もし IBM Cloud （Bluemix） に興味があるなら「ライト・プラン」は無料でクレカ登録も無しなの、知ってますよね？でもさらにお得な情報が。
今月末までの期間限定 ["ライト・プランの縛りのない" 6ヶ月のフリートライアル](https://cognitiveclass.ai/ibm-cloud-promotion-2017/)があります。これ、絶対オススメです。
後述しますが、ライト・プランだとCloud Foundryのメモリ容量が256MBまでなので、実際いろいろ動かそうとすると、思い切ってやれない場面が何度もありました。もちろんIBMさん的には、お試しの容量なので当然なのですが。これ、本当に基礎的な Node-RED on Bluemix（IBM Cloud）の範囲をちょっと触るくらいならOKだと思います。しかし設定の振る舞いを比べたり、少し踏み込んだテストを始めると、その256MBのインスタンスを消さないと出来ないのと、消すだけでも毎回時間がかかるので、けっこう無理があると思います。
今回この記事を書くにあたって大変に助かったので、まず冒頭に書いておきます。

### プロローグ
そう、Advent Calender の12月。ネタ探し時間を稼ごうと、アドベント終わりあたりに登録…したら、Node-RED 界隈のスゴ腕の方々に既に美味そうな ~~ノード~~ ネタは取り尽くされ、ペンペン草も生えねぇ状況。しかも、スキルのある優れた方の多い Node-RED の方々、どれもしっかりと書かれてるので、~~手が~~ 気が抜けない。
うーん Node-RED …と、なんか目新しいもの無いかな〜と探し、最近投稿された IBM developerWorks に IoT Device のモータのシュミレータのオススメ記事を見つけた。

コレは [IBM Watson IoT Platform - Quickstart](https://quickstart.internetofthings.ibmcloud.com/) 的な、試せる [IoT Sensor Simulator](https://quickstart.internetofthings.ibmcloud.com/iotsensor/) みたいなやつか？あの、IBM IoT って検索すると、すぐに「コレで試してね、ハード持ってなくてもWebシュミレータもあるよ」というやつ。
この記事を進めれば、気になってた Cloudant DB 周りとか、その先は Kubernetes（K8S） で保守とか？ … IBMの新しい記事なら、この辺りも見えてくるのかな。とまぁ、こちらに興味が湧いてしまった。


![conveyor-arch-iot-1-compressor.png](https://qiita-image-store.s3.amazonaws.com/0/48672/4433885e-6a08-53e9-265b-14acb9d293bd.png)


元記事はポストしてまだ2ヶ月だし、私が沿って記事書けば日本語訳的？にもなりそう。
というわけで、こっちをやってみるです。

## Develop an IoT app with Node-RED and Watson

見つけた記事は → [Use visual programming tools, PaaS services, and Watson to turn your IoT product into a fully functional business application](https://developer.ibm.com/code/patterns/develop-an-iot-app-with-node-red-and-watson/) だが、これは全体像・概要のイントロで、ステップを踏んだ本解説はコードと共に Github にある。
Github → [IBM/manage-control-device-node-red](https://github.com/IBM/manage-control-device-node-red) 

なお、逐語訳は私の役目では無いので、ここで日本語で進めることで簡訳 ＆ ひと通りやってグラフ表示してみたらこうなった、としてお読み頂いたら幸いです。
最後には分かりやすいグラフ可視化まで行かないとね。

---

> ... Whether you are part of an enterprise or startup company, you’ll likely find an occasion where your team needs to start with a proof-of-concept ...

（意訳）組織の一員としてチームで何か始めるにあたり、とりあえず実証実験を〜的なことありますね...。
と、イントロから。

---

### IBM の IoT 記事でよく出てくるシュミレータと、本稿を対比してみる
#### **モーターの回転制御　↔︎　温度・湿度・気圧の変化**
[IBM IoT Device Simulation](https://simulate-iot.mybluemix.net/motor) （回転・停止／正転・反転の制御を想定）
　→ [IBM IoT Device Simulation](https://quickstart.internetofthings.ibmcloud.com/iotsensor/) （温度・湿度・気圧を想定、右上12桁の文字列をクリック）

#### **シュミレータのウェブUIからグラフを変化させる**
[Step 4 -Visualize live data in Watson IoT Platform](https://github.com/IBM/manage-control-device-node-red#step-4---visualize-live-data-in-watson-iot-platform) （モーターの回転をグラフ表示）
　→ [Watson IoT Platform/Quickstart](https://quickstart.internetofthings.ibmcloud.com/#/device/) （12桁文字列をクリックすると表示されるグラフ）


![Screen-Shot-2017-12-23-at-03.41.09-compress.png](https://qiita-image-store.s3.amazonaws.com/0/48672/13b32f62-af80-461e-ff5b-48c26414d407.png)

実際の内容は "Get the code" クリック先、[Githubのページ](https://github.com/IBM/manage-control-device-node-red)に。背景は動力モーターだ！

## Flow 作りの手順

1. Watson IoT Platform に Cloud Foundry CLI を使い、Bluemix の Node-RED にシュミレーターアプリを作ってデプロイする。
2. 手順 1.の simulate-iot sample をビルド＆デプロイする。 IBM の Node-RED アカウント [https://simulate-iot.mybluemix.net/red](https://simulate-iot.mybluemix.net/red?cm_sp=dw-bluemix-_-code-_-devcenter) へ JSON フローをコピペ（注：ここあっさり書いてるがIBM Cloudのアカウントなど事前登録など準備が必要→後述）
3. Watson Iot Platform を使用し Cloudant DB にデバイスからのデータを格納する。
4. 格納したデータを IoT Platform にプッシュする。
5. Watson IoT Platform のダッシュボードを使い ビジュアルデータとして表示してみる。

ここでは短く5ステップにまとめてるが、実際には色々と準備がある。
/*-- （モーター写真の "View the demo" をクリックしても、設定作業前なので動かない。 --*/

読み進むと「IBM Cloud Docs > Internet of Things Platform」以下の参照を促される。

+ [Getting started tutorial](https://console.bluemix.net/docs/services/IoT/getting-started.html#getting-started-with-iotp)
+ [Developing devices on Watson IoT Platform](https://console.bluemix.net/docs/services/IoT/devices/device_dev_index.html#device_dev_index)
+ [MQTT connectivity for devices](https://console.bluemix.net/docs/services/IoT/devices/mqtt.html#mqtt)
+ [Visualizing real-time data by using boards and cards](https://console.bluemix.net/docs/services/IoT/data_visualization.html#boards_and_cards)

一番下の "Visualizaing… " はグラフ表示について。そう、最終的にこれを表示したい。
しかしこの Docs 全部読んでると進まないのでリンクのみ列挙（現在英語のみかな？）

## 事前の準備

+ IBM Cloud account →　[Qiita - IBM Cloud ライト・アカウント作成手順](http://ibm.biz/litecloud) などで
+ Bluemix CLI →　[Qiita - Bluemix CLI](https://qiita.com/Kchan/items/319c77820cc85a0edb66) の手順など見て
+ オプショナル：[Git](https://git-scm.com/downloads) でダウンロードなら [Github.comアカウント](https://github.com/)が必要だが、無くてもZipファイルは直接ダウンロードできる、と解説あり

IBM Cloud アカウントは持ってたが、今回 Bluemix CLI 使うの初めて。神ってるのか…。
さぁここを越え、いよいよ本題へ。

## まず、試してみる
Githubページのコード一覧の下にスクロールすると、こんな図が出てくる。

![Screen-Shot-2017-12-23-at-07.55.35-compressor.png](https://qiita-image-store.s3.amazonaws.com/0/48672/30baaf6c-68c9-79bb-e841-5972b4ef59e5.png)

### とりあえず、このGithubページを下に↓スクロール
この ["Deploy to IBM Cloud"アイコン](https://github.com/IBM/manage-control-device-node-red#deploy-to-ibm-cloud) をクリック。
![Screen-Shot-2017-12-23-at-8.08.42-compressor.png](https://qiita-image-store.s3.amazonaws.com/0/48672/bf704f99-cd0f-dcae-5471-f4780c360b4d.png)
（ここでショートカットせず [Stepを追いたい場合はここ](https://github.com/IBM/manage-control-device-node-red#steps) と但し書きあり）

このまま進めていけばと画面をキャプったり書いたり。ここで Node-RED アドベントはチェックしていたけど、[IBM Cloud アドベント](https://qiita.com/advent-calendar/2017/bluemix) を何気なく開いたら、12月19日分に同じ記事被りが…発覚。
→　[こちらの荻野さんの記事をどうぞ](https://medium.com/@taiponrock/node-red%E3%81%A8watson-iot%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E4%BD%9C%E6%88%90-3c120b1664a8)

---
ここまで読んでくださってありがとうございます。
じつは、その前に（プロローグで書いたように）Node-RED アドベント内ですでに被ったネタがあったので、それを回避して見つけたネタのつもりが…　さらにまた被っていたとは（苦笑）IBM Cloud はノーマークでした。しかも僕の担当日の前日！うーん、少し心折れましたね。
別のアドベント、ハードウェアの Mbed 方面のネタやらそのテストに目が向いていて、全部は見てませんでした。
いっそ、さらに先に行って、バーチャルじゃなく Mbed 実機ハード接続的ぽいとこまで行くか、と思いかけ試行しましたが、もう時間切れ。

この際、冒頭に書いたライト・プラン制限（事実上はメモリ容量制限の意味）のないフリートライアルが、速い試行錯誤をするのに役に立ちました。制限内で何とかしようとしても、ほぼ全く無理だったろうと感じています。

この2〜3日、年末らしいことを少し以外、集中力が続く限り Node-RED on IBM Cloud にずっと取り組み続けてました。結果的には、この分野の経験値が少しは稼げた気がします。
Arm Mbed の IoT Starter キット繋がりで Bluemix と Node-RED に興味を持って以来、なかなか四つに取り組めてなかったので、その意味で良かったと思います。

## それでは得た知見を箇条書きに
上記モータ・シュミレータや、cf上のアプリ開発で、少しでもお役に立てば幸いです。

### 作業環境

+ MacOS High Sierra クリーン・インストールから10日、まだbrewさえ入ってない
+ ブラウザは Firefox、Safari の2つを用途で使い分け
+ Github Desktop アプリを併用
+ 当初は（課金アカウント持ちですが）敢えてライトプラン縛りでどう？とテスト
+ 途中フリープランを知り、テストが俄然スピードアップ（FBの投稿で知った）
+ Terminal は必須。黒い画面がイヤと言わないで。Macのは白いしね。

![Screen Shot 2017-12-25 at 8.03.08 copy.png](https://qiita-image-store.s3.amazonaws.com/0/48672/d23a04ed-b077-457b-aa0b-2d40c576bbc5.png)


### コマンドツールとウェブUI

+ 指示通り進めば brew - cf - bx(bluemix) のコマンドツールは便利、必須
+ 黒い画面が苦手でも、とりあえず「cf」「bx」で行けちゃうので、手軽
+ 手順はコマンドツール中心だが、下のコンソールページUIを併用すると解りやすい
+ ターミナルで名前が長くErrorと何度かオコられた、これウェブUI解りやすい
+ モータ・アプリはデフォルトで512MB、だからエラー吐く？ウェブUIで知る

![Screen Shot 2017-12-25 at 22.41.26.png](https://qiita-image-store.s3.amazonaws.com/0/48672/c973def2-88d8-8c67-1971-95f9b17e1329.png)

上図のように、幾つも設定を変えインスタンス作って比較したり、消去したり出来るので IBM Cloud や IoT Platform の提供している構造や Board の概念とか理解に大変役に立った。
役に立った、というより256MBのインスタンスだけだと、毎回消去（しかも消去完了まで時間かかる！）してから次のこと、になるので全体像を把握するには相当に無理な感じがする。

### モータ・シュミレータのアプリについて
私の勝手な早合点、とは言えるかもしれないが、上にも述べたような、いつも出てくるお馴染み？なシュミレータの新種が出たのか、と見えてしまった。しかしながら実際は、CF環境でのウェブアプリを作る、そしてそれをクラウド上のIDEで開発もできる！というところがキモなのだろうと思います。
初めは分かってなくて、タイトル他を少し変えてCSS/JS少し触ったところで気づきました。

![Screen Shot 2017-12-25 at 23.24.18.png](https://qiita-image-store.s3.amazonaws.com/0/48672/b69f2b9d-3087-d86a-c0b3-ce4d37c7e04d.png)

ローカルなり、クラウド上の環境でこのウェブアプリを作らなくてはならない事は、記事には触れられていない。他のIBMの様々なものが、実によく作り込まれてるので、これもアプリ作ってパースすればこのBootstrap使ったUIボタンもどこかにポッと出来上がるの？と、簡単に考えてしまいがち（私のように）です。
しかし、これ、ウェブの方のことそれなりには分からないと、簡単ではない話ですよね？
私もこの作業途中で、ネタ被りが発覚したので、止めてしまいましたが（笑）

同じく、元記事のライブ・デモの URI の、
[https://simulate-iot.mybluemix.net/motor](https://simulate-iot.mybluemix.net/motor) 
は、分かってしまうと至極、本当にわかりきった当然のことですけど、これをコーディングされた IBM の Hovig Ohannessian 氏がデモ用に取得した URI なので、同じものは当然取れない。当初、これどうなってるのかな？やはりIBMマジックなのか？と思ってました。（そんなわけない）
ちなみに、これもTerminalでcfコマンドで作業してると、最後にアドレスがすでに取られています、とエラーになります。

Terminal だと最後にエラーで終了、説明はつくけど、なんで？？みたいになるので、この辺はウェブUIと組み合わせて、並べて作業すると解りやすかったです。cfコマンドで送った後、あぁ、ここにこう出てくるんだね、とか。

こんなところでしょうか。
また、後日さらに追加したり修正するかもしれませんが、今夜はこのくらいで。

みなさま、良いお年を！