Watson IoT Platformを使ってみる

初めてWatson IoT Platformを使ってみよう、というかたのためのガイドです。
#初めに
BluemixのIDを取得します。
1. FirefoxかChromeかSafariで[Bluemix.net](https://console.ng.bluemix.net/)へアクセスし、画面右上の「登録」を選択します。
2. 登録画面で名前、メールIDなどを登録すると、指定したメールIDへ招待メールが届くので、そのリンクをクリックしてactivateします。
3. Bluemixへログインします。
4. "Successfully logged in"のメッセージが表示されるのみで画面が切り替わらない場合、ブラウザ(FirefoxまたはChromeまたはSafari)のURL入力欄にもう一度`bluemix.net`を入力し、[Cntl]+Rで画面を再読み込みしてみます。

# 作業する地域を確認します
1. Bluemixへログインしたら、画面右上の自分のユーザー名のアイコンをクリックしてプルダウンを開き、「地域」を「米国南部」へ変更します。
![スクリーンショット 2016-05-22 17.21.13.png](https://qiita-image-store.s3.amazonaws.com/0/125842/82d158f8-dc47-2415-76af-a38b4f4c44f1.png)

2. IoTのアプリを作るには「米国南部」のほうがいろいろ面白いためです。
3. 「スペース名を作成」のプロンプトが表示された場合には、適当に入力します（例：開発用であれば「dev」など）。

#最初のIoTアプリを作成
1. 再びBluemixの初期画面へ戻ったら、画面右上の六角形の「＋」記号を選択します。画面右上にこの「＋」記号が見つからない場合、
    - 「ようこそ○○」と自分のログイン名が表示されている場合は、その下の「概要」が選択されているので、「すべての項目」を選択すると画面右上に六角形の「＋」記号が表示されるようになります。
    - クラシック画面になっている場合は、画面上部の「Try the new Bluemix」ボタンを押して新しいBluemix画面にします。もしくはクラシック画面のまま、画面右上の「カタログ」を選択し、次項のボイラープレートからのアプリ作成を行う事も可能です。 

2. 表示されるメニューの中から、先頭セクションにある「ボイラープレート」（テンプレート集）の中の「Internet of Things Platform Starter」を選択します。
![スクリーンショット 2016-05-17 11.29.36.png](https://qiita-image-store.s3.amazonaws.com/0/125842/287fb0c8-cd11-1fdf-9aa5-d86784222785.png)
3. 適当なアプリケーション名を指定します。
![スクリーンショット 2016-05-18 8.19.41.png](https://qiita-image-store.s3.amazonaws.com/0/125842/467aab9c-c395-78ba-5d16-fd593eaf4424.png)
4. 画面をスクロールし、画面下部の「作成」ボタンを押します。 
5. 「概要」タブへ移動し、作成したアプリケーションが開始されるまで数分待ちます。「ログ」タブで進捗を確認できます。
6. 「アプリは実行中です」と表示されたら「アプリの表示」ボタンを押します。クラシック画面を使用している場合は、「経路」の右に表示されたURLをクリックします。
![スクリーンショット 2016-05-18 8.24.17.png](https://qiita-image-store.s3.amazonaws.com/0/125842/7a4dd236-87b8-7aa2-81ca-7b8af22f52d2.png)
7. 「Node-RED in Bluemix」画面が表示されるので、画面右下の赤い「Go to your Node-RED flow editor」ボタンを押します。
8. Node-RED画面が表示されます。
![スクリーンショット 2016-06-07 8.25.12.png](https://qiita-image-store.s3.amazonaws.com/0/125842/6736fce3-2ddd-df35-4f58-73254fbbe869.png)

9. 上記フローが表示されない場合、[Watson IoT Platform - Node-RED - フローをコピーする方法](http://qiita.com/egplnt/items/84b244a50d8bdaced324)を参照して以下のフローをコピペで用意する事も可能です。

```lang:基本的なIoTアプリのフロー
[{"id":"3e77d543.c1882a","type":"ibmiot in","z":"c5a69172.72d498","authentication":"quickstart","apiKey":"","inputType":"evt","deviceId":"","applicationId":"","deviceType":"+","eventType":"+","commandType":"","format":"json","name":"IBM IoT App In","service":"quickstart","allDevices":false,"allApplications":false,"allDeviceTypes":true,"allEvents":true,"allCommands":false,"allFormats":false,"x":100,"y":400,"wires":[["ae0082ac.51ff8","c0c482df.3f3b8"]]},{"id":"ae0082ac.51ff8","type":"function","z":"c5a69172.72d498","name":"temp","func":"return {payload:msg.payload.d.temp};","outputs":1,"x":290,"y":400,"wires":[["ff6ad0d9.00953"]]},{"id":"ff6ad0d9.00953","type":"switch","z":"c5a69172.72d498","name":"temp thresh","property":"payload","rules":[{"t":"lte","v":40,"v2":null},{"t":"gt","v":40,"v2":null}],"checkall":"true","outputs":2,"x":450,"y":400,"wires":[["80621eff.7f9de"],["8e1706a.f71e8f8"]]},{"id":"5dad02b7.a252fc","type":"debug","z":"c5a69172.72d498","name":"cpu status","active":true,"complete":"false","x":790,"y":400,"wires":[]},{"id":"c0c482df.3f3b8","type":"debug","z":"c5a69172.72d498","name":"device data","active":true,"console":"false","complete":"true","x":310,"y":480,"wires":[]},{"id":"80621eff.7f9de","type":"template","z":"c5a69172.72d498","name":"safe","template":"Temperature ({{payload}}) within safe limits","x":610,"y":380,"wires":[["5dad02b7.a252fc"]]},{"id":"8e1706a.f71e8f8","type":"template","z":"c5a69172.72d498","name":"danger","template":"Temperature ({{payload}}) critical","x":620,"y":420,"wires":[["5dad02b7.a252fc"]]},{"id":"cbe1a0b7.cd877","type":"ibmiot out","z":"c5a69172.72d498","authentication":"boundService","apiKey":"","outputType":"evt","deviceId":"LivingRoomThermo1","deviceType":"thermostat","eventCommandType":"update","format":"json","data":"temp:10","name":"Send to IBM IoT Platform","service":"registered","x":566,"y":120,"wires":[]},{"id":"5917a925.6a3c08","type":"inject","z":"c5a69172.72d498","name":"Send Data","topic":"","payload":"true","payloadType":"bool","repeat":"","crontab":"","once":false,"x":100,"y":120,"wires":[["6b4a591c.014b18"]]},{"id":"6b4a591c.014b18","type":"function","z":"c5a69172.72d498","name":"Device payload","func":"// Thermostat's location:\nvar longitude1 = -98.49;\nvar latitude1 = 29.42;\n\n// Array of pseudo random temperatures\nvar temp1 = [15,17,18.5,20,21.5,23,24,22.2,19,18];\n\n// Array of pseudo random relative humidities\nvar humidity1 = [50,55,61,68,65,60,53,49,45,47];\n\n// Counter to select from array.\nvar counter1 = context.get('counter1')||0;\ncounter1 = counter1+1;\nif(counter1 > 9) counter1 = 0;\ncontext.set('counter1',counter1);\n\n// Create MQTT message in JSON\nmsg = {\n  payload: JSON.stringify(\n    {\n      d:{\n        \"temp\" : temp1[counter1],\n        \"humidity\" : humidity1[counter1],\n        \"location\" :\n        {\n          \"longitude\" : longitude1,\n          \"latitude\" : latitude1\n        },\n      }\n    }\n  )\n};\nreturn msg;\n","outputs":1,"noerr":0,"x":320,"y":120,"wires":[["cbe1a0b7.cd877","805c97ee.3ed9e8"]]},{"id":"805c97ee.3ed9e8","type":"debug","z":"c5a69172.72d498","name":"Debug output payload","active":true,"console":"false","complete":"payload","x":560,"y":180,"wires":[]},{"id":"86df0b6c.af90c8","type":"comment","z":"c5a69172.72d498","name":"Device Simulator","info":"Sends simulated device sensor data to IBM Watson IoT Plaform.\n\nCan be configured to send on click or on an automatic interval.\n\n\n#Prerequisite\nOutput node device type and device ID need to match a device that it registered in a running IBM Watson IoT Platform service.\n\n# Watson IoT Platform docs\n[Connecting devices](https://www.bluemix.net/docs/services/IoT/iotplatform_task.html)","x":100,"y":40,"wires":[]},{"id":"141b7c7.ad42a84","type":"comment","z":"c5a69172.72d498","name":"1. Configure target","info":"","x":550,"y":80,"wires":[]},{"id":"c2dd8ed5.7dd7f","type":"comment","z":"c5a69172.72d498","name":"2. Click to send data","info":"To automatically send data:\n1. Change *Repeat* to interval.\n2. Click Deploy button.\n","x":110,"y":160,"wires":[]},{"id":"7926c7b2.86d938","type":"comment","z":"c5a69172.72d498","name":"Temperature Monitor","info":"","x":110,"y":300,"wires":[]},{"id":"188a5e87.e775a1","type":"comment","z":"c5a69172.72d498","name":"Configure source","info":"","x":100,"y":360,"wires":[]}]

```
- 上記のフローのうち、上部のフロー（"Device Simulator"と表記され灰色の"Send Data"ノードから始まるフロー）については、下記の6.で紹介しています。
- 上記のフローのうち、下部のフロー（"Temperature Monitor"と表記され青い"IBM IoT App In"ノードから始まるフロー）については、下記の3、4で紹介しています。

#次のステップ
Node-REDを使って以下の操作が可能です。
1. [入力・出力の使い方](http://qiita.com/egplnt/items/8beb2d4f382ad39c93cd)
2. [ファンクションの使い方](http://qiita.com/egplnt/items/e8d15d409c52e91b15fb)
3. [温湿度計のシミュレーターを用意する](http://qiita.com/egplnt/items/e1cf075c56ae83addbd9)
4. [温湿度計のシミュレーターをつないで出力してみる](http://qiita.com/egplnt/items/0e63ee3d5c64ae41713a)
5. [フローをコピーする方法](http://qiita.com/egplnt/items/84b244a50d8bdaced324)
6. [登録されたデバイスからデータを取得する](http://qiita.com/egplnt/items/394fa994ddbb64becacf)

#さらに次のステップ
上記のNode-REDフローを元にいろいろな操作をやってみます。
1. [IoTデータをデータベースに格納する](http://qiita.com/egplnt/items/1d436ae729e80f95d61f)
2. [IoTデータへSQLでアクセスする](http://qiita.com/egplnt/items/71c53ad489e6d4fd4f88)
3. [dashDBへ直接書き込む](http://qiita.com/egplnt/items/2c911b7618517ebe9ba2)
    - [dashDBへSQLツールでアクセスして表示する](http://qiita.com/egplnt/items/9161618d5973d0ea5cec)
4. [メーターで可視化する](http://qiita.com/egplnt/items/f9bc24ac8633f95f6190)
5. [Bluemixのサービスを使えるようにする](http://qiita.com/egplnt/items/0924dd0c31993826d217)
6. [Watsonに喋らせてみる](http://qiita.com/egplnt/items/3957a45e76144a051b62)
7. [Twitterへつぶやいてみる](http://qiita.com/egplnt/items/c3447af439d0541f4f1a)
8. [TIセンサータグを使ってみる](http://qiita.com/egplnt/items/98f1eb14812c1522555c)
9. [IFTTT経由でSMSメッセージを送ってみる](http://qiita.com/egplnt/items/40e59a4587999fd2f984)
10. [デバイスを登録してデータを送信する](http://qiita.com/egplnt/items/e9af5d5abeab08f5a455)
11. [アプリを登録してデータを受信する](http://qiita.com/egplnt/items/552b91210be5d03430b4)
12. [Watson IoT Platformでルールを使ってみる](http://qiita.com/egplnt/items/5d21d86ac5c235f426ac)
13. [Watson IoT Platform APIを使ってみる](http://qiita.com/egplnt/items/35f5ed53514974d2ee64)
14. [Node-REDをローカル環境で稼働させる](http://qiita.com/egplnt/items/39f4794504fc27823bb4)

#サンプル・フロー
1. [シミュレーターの値を閾値で判断](http://qiita.com/egplnt/items/e625fd19dccd988d6146)
2. [センサーからの値を閾値で判断](http://qiita.com/egplnt/items/b13c11c35341e46b2d33)
3. [センサーからの値をリアルタイムで可視化](http://qiita.com/egplnt/items/76bc506e2711f8e0bf22)
    - [実際のIoTセンサーからの値の可視化](http://qiita.com/egplnt/items/93ef0384a264412e0bf6)
4. [データベースからのIoTデータを表示](http://qiita.com/egplnt/items/cb419c7bf02ba49b206e)
5. [Watson Speech to Textで日本語でIoTしてみる](http://qiita.com/egplnt/items/592f6a713dd35770e03c)
6. [ビーコンの位置情報を可視化する](http://qiita.com/egplnt/items/d8ad8a703d1d4b94d657)
    - [TensorFlowで位置情報を人工知能してみる](http://qiita.com/egplnt/items/217df26ad2d34a8cc7d4)
7. [TensorFlowでIoTデータを人工知能してみる](http://qiita.com/egplnt/items/3246711349bc1d97bdb8)
    - [TensorFlowを使ってIoTデータを人工知能してみる - 練習](http://qiita.com/egplnt/items/57858179911c814476a1)

# Node-REDでシンプルなウェブサイトを作ってみる
1. [Node-REDでシンプルなウェブサイトを作ってみる](http://qiita.com/egplnt/items/e8eeed3432900945c084)

#ダッシュボードを作ってみる
まずはお手軽にダッシュボードを作ってみたい、というかたはkuraokaさんの[node-red-dashboardでチャート表示IoTアプリ作成](http://qiita.com/kuraoka/items/2e14bc2fefb9b0183cc7) がおすすめです。
いや、ガチで自分で作り込みたい、というかたは下記をどうぞ。
1. [ダッシュボードを作ってみる](http://qiita.com/egplnt/items/141bd5d9b17ba02e526b)

#他の達人たちの記事
1. [Node-REDのhttp inノードでBasic認証を有効にする](http://qiita.com/takeyan/items/19b894197d30b65626c5) (takeyanさんの記事）
2. [BluemixとカスタムドメインとSSLサーバー証明書とクライアント証明書](http://qiita.com/takeyan/items/f6fe7cceb425bcd39b7f) (takeyanさんの記事）
3. [BluemixのDockerコンテナ環境にTensorFlowをインストールする](http://qiita.com/takeyan/items/7956ec65e9cca367f8bd) (takeyanさんの記事）
4. [(ほぼ)スマホ(だけ)を使ってIoTを始めてみよう](http://qiita.com/manamana/items/434cfc7ed6797851e2cc) (manamanaさんの記事）
5. [(ほぼ)スマホ(だけ)を使ってIoTを始めてみよう～応用アプリを作る～](http://qiita.com/manamana/items/89ab1aa22625ad71a79c) (manamanaさんの記事）
6. [node-red-dashboardでチャート表示IoTアプリ作成](http://qiita.com/kuraoka/items/2e14bc2fefb9b0183cc7) (kuraokaさんの記事)
7. [Node-REDに追加できるノード](http://qiita.com/egplnt/items/6bd2f7f3b38f5ffa4482)

#さらにその次のステップ
1. [Predictive Analyticsを使ってリアルタイム解析する](http://qiita.com/egplnt/items/c3b78fefce9b09c2f13c)
2. [Streamsを使ってリアルタイム解析してみる](https://developer.ibm.com/recipes/tutorials/integrate-ibm-streaming-analytics-service-with-watson-iot-platform/)
3. [IBM Internet of Things Workbench](https://console.ng.bluemix.net/catalog/services/internet-of-things-workbench/)でアプリを作ってみる。- [紹介動画](https://youtu.be/VXOpeTQJd68)


#Node-RED小ワザ集
1. [`msg.payload`について](http://qiita.com/egplnt/items/b9215b62b3bd63ebd38c)
2. [フロー内で共有する変数など](http://qiita.com/egplnt/items/a95b14ee08136c6f02af)
3. [日付・時刻の追加](http://qiita.com/egplnt/items/74d65518cac9fc334efe)
4. [直近10件の平均や標準偏差を求める](http://qiita.com/egplnt/items/af3b9e69c94728ac6083)
5. [自分のノード（サブフロー）を作成する](http://qiita.com/egplnt/items/37d603173ec2365dd156)
6. [閾値によって判断する](http://qiita.com/egplnt/items/90005e0963b7eba9c3f1)
7. [センサーからの最新値を入手する](http://qiita.com/egplnt/items/223bc4ea0b452ecd1065)
8. [シミュレーターを作る](http://qiita.com/egplnt/items/cb39338d7194653675b2)
9. [Node-RED小ワザ集](http://qiita.com/egplnt/items/aca359fc69deb2fb6dff)
10. [Bluemix小ワザ集](http://qiita.com/egplnt/items/19d7cbd506b34f3570bd)

#MQTTを試してみる
1. [MessageSightを動かす](http://qiita.com/egplnt/items/246205f6574cde268712)
2. [MessagingTesterを使ってみる](http://qiita.com/egplnt/items/cf89a4aed739a7765f81)
3. [Publish/Subscribeしてみる](http://qiita.com/egplnt/items/d2d73a5f1d521deedacb)
4. [MessageSightで使用状況を確認する](http://qiita.com/egplnt/items/0f41b92ef9d6f18a2094)
5. [Node-REDからpub/subしてみる](http://qiita.com/egplnt/items/2105158291f4857aa7b0)
6. [Node-REDを使ってMQTT](http://qiita.com/egplnt/items/fdac8042ff5e19adf49c)
7. [NodeREDからQuickstartへpublish](http://qiita.com/egplnt/items/704b345e30b9180ce279)
8. [サンプルアプリからQuickstartへpublish](http://qiita.com/egplnt/items/490d9eaf18c9fc95643d)
9. [Topicの確認](http://qiita.com/egplnt/items/67c91817dea3b497b6d9)
10. [Retainの確認](http://qiita.com/egplnt/items/2283b174e7d700a5d712)
11.  [CleanSession=false(durable subscription)の確認](http://qiita.com/egplnt/items/c029066756902eb409c5)
12.  [pahoのsandboxとNode-REDでMQTTの練習](http://qiita.com/egplnt/items/89d3012e29933b138a78)
13.  [共用サブスクリプションを試してみる - Watson IoT Platform](http://qiita.com/egplnt/items/53e91914b3c3192db111)
14.  [Message HubでKafkaしてみる](http://qiita.com/egplnt/items/8a064c8bd6317c6b2397)