IBM Watson IoT PlatformにMQTTデータを送信するサンプルアプリ(Node.js)を作成する

Watson IoT Platformにmqttデータを投げるサンプルアプリを作成した際の覚書です。

# アプリ概要
・IBM Watson IoT Platformにmqtt on websocketでmqttデータを送信するサンプルアプリ。
・スタートボタン、ストップボタンでデータ送信開始/停止を操作。
・ポートを(443/8883)から選択可能。
・サンプルコードは以下。
　https://github.com/sesamiK/TestTool4IoTPlatform

# 作業の流れ
1.IBM Cloud上でIoT Platformサービスを作成
2.デバイスの登録
3.接続、メッセージのパブリッシュ
4.接続確認


# 作業手順
1.IBM Cloudにログインし、カタログからWatson IoT Platformのサービスインスタンスを作成する。
1-1.左側タブより「IoT」カテゴリを選択し、「Internet of Things Platform」サービスを選択する。
![スクリーンショット 2018-03-11 3月11日.31.49.png](https://qiita-image-store.s3.amazonaws.com/0/258803/21c2149b-804c-b8af-8b40-afcde2e05218.png)

1-2.サービス名、デプロイする地域/ロケーション、組織、スペースを選択し、「作成」をクリックする。
![スクリーンショット 2018-03-11 3月11日.34.39.png](https://qiita-image-store.s3.amazonaws.com/0/258803/9457bb04-9109-44af-c59a-6ddc4acd178a.png)

2.デバイスの登録
・接続のためには「デバイス・タイプ」「デバイス」の登録が必要。
・以下の手順で「デバイス・タイプ」「デバイス」を登録する。
2-1.起動をクリックする。
![スクリーンショット 2018-03-11 3月11日.40.44.png](https://qiita-image-store.s3.amazonaws.com/0/258803/c9f6780c-6e39-2054-fa76-2f762a0d48fd.png)

2-2.IoT Platformのダッシュボードが開いたら左側タブの「デバイス」をクリックする。
![スクリーンショット 2018-03-11 3月11日.39.08.png](https://qiita-image-store.s3.amazonaws.com/0/258803/b73d8a16-d84c-2582-9d1a-74316a7da329.png)

2-3.デバイス・タイプを登録する。「デバイス・タイプ」タブを開き「デバイス・タイプの追加」をクリックする。
![スクリーンショット 2018-03-11 3月11日.41.39.png](https://qiita-image-store.s3.amazonaws.com/0/258803/f5eec47a-3f25-29ee-ef63-616f0dfd6c40.png)

2-4.「名前」部分に任意のデバイス・タイプ名を入力して「次へ」をクリックする。
![スクリーンショット 2018-03-11 3月11日.46.04.png](https://qiita-image-store.s3.amazonaws.com/0/258803/b2858ad8-accb-ea49-7e19-1141f5006e9f.png)

2-5.デフォルトのまま「完了」をクリックする。(デバイスの詳細情報は必要があれば後から追加することが可能。)
![スクリーンショット 2018-03-11 3月11日.46.25.png](https://qiita-image-store.s3.amazonaws.com/0/258803/c52f39db-48fc-bee0-90fc-07cb1af386eb.png)

2-6.引き続きデバイスを登録する。「デバイスの登録」をクリックする。
![スクリーンショット 2018-03-11 3月11日.50.32.png](https://qiita-image-store.s3.amazonaws.com/0/258803/56341797-1d95-b806-2253-7987b982020c.png)

2-7.「既存のデバイスタイプの選択」で先に登録したデバイス・タイプを選択し、「デバイスID」に任意のデバイスIDを入力、「次へ」をクリックする。
![スクリーンショット 2018-03-11 3月11日.56.09.png](https://qiita-image-store.s3.amazonaws.com/0/258803/715cfb51-af03-29a7-7ba3-298548a7d543.png)

2-8.「デバイス情報」「グループに追加」のページではデフォルトのまま「次へ」をクリックする。
![スクリーンショット 2018-05-21 5月21日.08.31.png](https://qiita-image-store.s3.amazonaws.com/0/258803/12368366-b57f-4415-82b0-231bea127d5c.png)


2-9.デバイスからIoT Platformに接続を行う際に認証トークンが必要になる。このトークンを自分で決める場合はここに記入する。自動生成する場合は「認証トークン」欄は空欄のまま「次へ」をクリックする。(ここでは自動生成手順を示す。)
![スクリーンショット 2018-03-11 3月11日.01.44.png](https://qiita-image-store.s3.amazonaws.com/0/258803/0b4e2f43-dbbd-cff6-39e4-cd3ce5ed613f.png)

2-10.内容を確認して「完了」をクリックする。(自動生成の場合のトークンは次画面で表示)
![スクリーンショット 2018-03-11 3月11日.02.12.png](https://qiita-image-store.s3.amazonaws.com/0/258803/0c1efc5b-0151-29ed-85a9-f51120e0c1cf.png)

2-11.この画面で表示される以下の情報を使って接続するため、内容を全てメモする。
※特に認証トークンは復旧不可で、この画面でしか表示されないため、必ずメモを取る。
![スクリーンショット 2018-03-11 3月11日.03.14.png](https://qiita-image-store.s3.amazonaws.com/0/258803/90c423db-293a-f33f-7d8f-eae1bfcef33c.png)

2-12.2-11の画面で左上の「戻る」をクリックすると登録されたデバイスが表示される。
![スクリーンショット 2018-03-11 3月11日.07.10.png](https://qiita-image-store.s3.amazonaws.com/0/258803/7e60b54a-aed9-6708-44cb-f8a1d7c9f36e.png)

2-13.デバイス名(ここではsampledevice)をクリックして開き「状態」や「ログ」タブを開くと状態、ログを確認できる。(デバイスからデータを送信し、ここで接続確認ができる)
![スクリーンショット 2018-03-11 3月11日.08.02.png](https://qiita-image-store.s3.amazonaws.com/0/258803/ca523825-b41d-5ce5-147c-b0ea36367324.png)

3.接続、メッセージのパブリッシュ
3-1.サンプルアプリのコードを以下からGit Cloneする。
・サンプルコード： https://github.com/sesamiK/TestTool4IoTPlatform

3-2.マニフェストファイル(manifest.yml)を開き、「name」と「host」と記載されている項目内容を以下に従って編集して保存、IBM Cloud上にPushする。
※yml形式のファイルではスペースが重要なため、誤ってスペースを削除しないよう注意!
・name=任意のアプリ名に変更
・host=任意のホスト名に変更
![スクリーンショット 2018-03-11 3月11日.26.25.png](https://qiita-image-store.s3.amazonaws.com/0/258803/5e593d78-0f20-5150-5c21-9e2453963246.png)

3-3.IBM Cloud上でpushしたアプリが稼働していることを確認し、「経路」をクリックして表示されたURLにデバイス(iPhoneなど)のブラウザからアクセスする。
![スクリーンショット 2018-03-11 3月11日.29.26.png](https://qiita-image-store.s3.amazonaws.com/0/258803/79420dda-00f2-2c6d-4f11-9f5cab7dd94e.png)

3-4.テストアプリ画面にて、「2-11」手順でメモを取った内容を入力して「Start」をクリックする。
・組織ID　　　　　：組織ID
・デバイス・タイプ：デバイス・タイプ
・デバイスID　　　：デバイスID
・認証トークン　　：認証トークン
・Message　　　　：IoT Platformに送信する任意のメッセージ
・ポート　　　　　：443か8883を選択

(↓iphoneでsafariを開き、アドレスバーに3-2の経路をクリックして表示されたURLを打ち込んだ画面例)
![IMG_4934.PNG](https://qiita-image-store.s3.amazonaws.com/0/258803/e3c74ba9-a0b1-92e2-a5dc-e0468c910199.png)

3-5.「Start」をクリックして下にメッセージ送信のログが表示されていることを確認する。
<img width="375" alt="IMG_4935.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/258803/5dd3346d-f344-fa06-a659-4f362527b05e.png">

4.接続確認
4-1.Watson IoT Platformのデバイス＞参照タブを開き、対象のデバイス名をクリックして、「状態」タブを開くと、送信したメッセージが「値」項目に表示されていることを確認できる。
![スクリーンショット 2018-05-21 5月21日.31.12.png](https://qiita-image-store.s3.amazonaws.com/0/258803/eb763ea7-b1ab-184b-dafb-a99e2736256d.png)

4-2.
同様にして「ログ」タブを開くと接続ログが表示され、接続日時、接続情報などを確認できる。