Watson IoT Platform - デバイスを登録してセンサーデータを送信する

初めてWatson IoT Platformを使ってみよう、というかたのためのガイドです。
[Watson IoT Platformを使ってみる](http://qiita.com/egplnt/items/af867711a7191923b2ff)でIoTアプリを準備しました。
Internet of Things Platformにデバイスを登録してデータを送信します。

#Internet of Things Platformサービスを接続します
1. BluemixのIoTアプリの画面を開き、
![スクリーンショット 2016-05-22 17.38.05.png](https://qiita-image-store.s3.amazonaws.com/0/125842/09552f3a-a1d8-9eaf-5df7-b6a55e9ad962.png)
「概要」画面の右側の「新規に接続」を選択します。
![スクリーンショット 2016-05-22 17.38.31.png](https://qiita-image-store.s3.amazonaws.com/0/125842/ffd56227-c430-5574-5602-27f683ddad0a.png)

2. 新規に接続するサービスとして「モノのインターネット」セクションの「Internet of Things Platform」サービスを選択します。
![スクリーンショット 2016-05-22 17.39.11.png](https://qiita-image-store.s3.amazonaws.com/0/125842/bde20831-f8c6-ab06-444e-a1def894a979.png)

3. 「アプリケーションの再ステージ」が表示されるので再ステージを実行します。
![スクリーンショット 2016-05-22 17.39.29.png](https://qiita-image-store.s3.amazonaws.com/0/125842/aa1e8100-6de3-ca88-1672-67e99b12b6ce.png)

4. 再ステージが完了してアプリが実行状態になったら、接続した「Internet of Things Platform-xx」のアイコンをクリックし、「ダッシュボードを起動」を選択します。
![スクリーンショット 2016-05-22 17.45.20.png](https://qiita-image-store.s3.amazonaws.com/0/125842/39b2e6fb-ac20-791e-c94e-029b96bf3deb.png)

5. ダッシュボード画面が起動されたら、画面左側の「デバイス」アイコンを選択して
![スクリーンショット 2016-05-22 17.50.12.png](https://qiita-image-store.s3.amazonaws.com/0/125842/1fde95e2-58cc-d47f-3cc5-c492a2af7780.png)
「デバイス」設定画面を開きます。
![スクリーンショット 2016-05-22 17.51.56.png](https://qiita-image-store.s3.amazonaws.com/0/125842/7d5f5bf1-b166-a2bc-26e1-799eeebd0b40.png)

6. 画面右端の「デバイスの追加」ボタンを押します。
7. 「デバイスの追加」画面で「デバイス・タイプの作成」ボタンを押します。
![スクリーンショット 2016-05-22 17.52.45.png](https://qiita-image-store.s3.amazonaws.com/0/125842/d48db105-12d3-a579-2d37-234dd14502ae.png)

8. 「デバイス・タイプの作成」画面で「デバイス・タイプの作成」ボタンを押します。
![スクリーンショット 2016-05-22 17.53.28.png](https://qiita-image-store.s3.amazonaws.com/0/125842/bb1abb12-1cc2-b281-0933-4d2d75564a2b.png)

9. デバイス・タイプ名を入力し、画面右下の「次へ」ボタンを押します。
![スクリーンショット 2016-05-22 17.54.53.png](https://qiita-image-store.s3.amazonaws.com/0/125842/a95c460c-ec2c-eb2c-8591-5c90b3ba31c4.png)

10. 必要に応じてシリアル番号などの属性を選択します。
![スクリーンショット 2016-05-22 17.55.42.png](https://qiita-image-store.s3.amazonaws.com/0/125842/bbd4baae-82be-2271-33a3-998a6975283f.png)
「次へ」を押します。

11. 「情報の送信」画面で「次へ」を押します。
12. 「メタデータ（オプション）」画面で必要に応じてメタデータを定義し、「作成」を押します。
13. 新しいデバイス・タイプが作成されました。
![スクリーンショット 2016-05-22 17.58.09.png](https://qiita-image-store.s3.amazonaws.com/0/125842/3e6be9f6-0dab-745f-973f-8974e1cd7dd9.png)
「次へ」を押します。

14. 「デバイスの追加」画面でデバイスIDを入力します。
![スクリーンショット 2016-05-22 17.59.19.png](https://qiita-image-store.s3.amazonaws.com/0/125842/397cc0af-f3fd-5c4d-ce49-461e91583adc.png)
「次へ」を押します。

15. 「メタデータ（オプション）」画面で必要に応じメタデータを定義し、「次へ」を押します。
16. セキュリティーの画面の説明を読みます。ここでは「自動生成認証トークン」を使用するので、この画面では何も指定せず「次へ」を押します。
![スクリーンショット 2016-05-22 18.01.34.png](https://qiita-image-store.s3.amazonaws.com/0/125842/e3bd5f5a-6d39-bbee-23f1-cee44cd8844d.png)

17. 「要約」画面に表示される内容を確認し、「追加」を押します。
![スクリーンショット 2016-05-22 18.02.43.png](https://qiita-image-store.s3.amazonaws.com/0/125842/ebe43008-420d-1490-9737-e83489dbf346.png)

18. 生成されたデバイス資格情報（組織 ID、デバイス・タイプ、デバイス ID、認証方式 token、認証トークン）をコピペで控えておきます（画面は省略）
19. 「×」キーで画面を閉じます。
20. ここでは、本物のデバイスの代わりに下記のようなプログラムを用意し、デバイスからInternet of Things Platformへアクセスできる事を確認します。

```py:devicePub.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import logging
import os
import os.path
import sys
import codecs
import time
import paho.mqtt.client as mqtt
import json
import threading
import random

broker = ""
username = "use-token-auth"
password = "xxxxxxxxxxxxxxxxxx" # 英数字18桁の「認証トークン」を指定します
organization = "xxxxxx"		# 6桁の「組織ID」を指定します
deviceType = "device_type_001" # 「デバイス・タイプ」として登録した値を指定します
deviceSerial = "device_id_001" # 「デバイスID」として登録した値を指定します

topic = "iot-2/evt/status/fmt/json"

clientID = "d:" + organization + ":" + deviceType + ":" + deviceSerial
broker = organization + ".messaging.internetofthings.ibmcloud.com"
mqttc = mqtt.Client(clientID)

if username is not "":
	mqttc.username_pw_set(username, password=password)

	try:
		mqttc.connect(host=broker, port=1883, keepalive=60)
	except Exception as e:
		print "Exception at connect"
		print e

mqttc.loop_start() 

while mqttc.loop() == 0:
 
	temp = random.randrange(-10,40)
	humidity = random.randrange(20,99)
	print "temp = " + str(temp) + ", humidity = " + str(humidity)
	msg = " {\"d\": {\"temperature\": " + str(temp) +",\"humidity\": " + str(humidity) + "} }";

	try:	
		mqttc.publish(topic, payload=msg, qos=0, retain=False)
		print "message published"
		# print raw_input("[Enter] to send another request")
	except Exception as e:
		print "Exception at publish"
		print e
 
	time.sleep(5)
	pass
```

- 上記のpythonでは、`password`に英数字18桁の「認証トークン」を、`organization`に6桁の「組織ID」を、
`deviceType`に「デバイス・タイプ」として登録した値を、`deviceSerial`に「デバイスID」として登録した値を指定します。（`deviceSerial`と、「シリアル番号」が混同しやすいので注意します。）
- デバイスからの接続とメッセージ送信の状況は下記のようにInternet of Things Platformのダッシュボードから確認できます。
![スクリーンショット 2016-05-22 18.42.27.png](https://qiita-image-store.s3.amazonaws.com/0/125842/2aa8862e-4fe9-f9da-61d5-69271ebec38b.png)