まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:foundation

このエントリの続きです:
IBM IoT Foundation サービスへのデバイス登録方法

IBM IoT Foundation サービスを使うために、同サービスにデバイスを登録する方法を上記で紹介しました。では IBM IoT Foundation サービスに登録したデバイスのセンサーデータを Node-RED で集めるための方法を紹介します。


まずは上記手順の完了した IBM IoT Foundation サービスの環境変数を参照し、apiKey と apiToken の値を確認しておきます。これらの値は後に利用します:
2015112600


次に Node-RED のフローエディタを開き、IBMIoT インプットノードを1つ用意します:
2015112601


同ノードをダブルクリックして、属性を編集する画面に切り替えます:
2015112602


IBM IoT Foundation サービスを使う場合、Authentication は QuickStart ではなく、API Key にする必要があります。また API Key は "Mine" を選択、その他は以下のようにチェックボックスを付けます(名前も IBM IoTF に変更しています):
2015112603


API Key の横にある鉛筆マークをクリックしてノードの属性を確認します。ここではデバイスを追加した IBM IoT Foundation サービスの API Key と API Token(上記で確認したもの)が入っていることを確認してください(入っていなかったら入力してください):
2015112604


最後にこのノードにデバッグ output ノードを足して&繋いで、送られてきたデータが参照できるようにしておきます。この状態でデプロイしておきましょう:
2015112605


次に IoT Foundation サービスにに登録したデバイスから実際に MQTT メッセージをパブリッシュして、Node-RED のフローに送られたデータが表示されることを確認してみましょう。今回想定している環境ではこのようなデバイスを IoT Foundation サービスに登録していました:
属性属性値
組織IDttb8bh
デバイスタイプMyDevice
デバイスID(MACアドレス)112233445566
認証トークン(自分で指定する接続パスワード)K.Kimura777


このデバイスの場合、MQTT パブリッシャーとしては以下のような条件で IBM IoT Foundation サーバーにメッセージをパブリッシュすることになります:
設定項目設定値
MQTT ブローカーホストttb8bh.messaging.internetofthings.ibmcloud.com
(組織ID).messaging.internetofthings.ibmcloud.com
MQTT ブローカーポート1883
(固定値)
クライアントIDd:ttb8bh:MyDevice:112233445566
d:(組織ID):(デバイスタイプ):(デバイスID)
認証ユーザーIDuse-token-auth
(固定値)
認証パスワードK.Kimura777
(認証トークン)
トピックiot-2/evt/event_id/fmt/json
(固定値)
メッセージ{"d":{"a":"x","b":"y","c":"z"}}
(任意のJSONテキスト)


実際に動くデバイスがあれば、この内容でパブリッシュするようなコードを記述することでメッセージを送信することができます。ここでは MQTTLens を使って同じ動きをエミュレートして、動作を確認してみることにします。

まずコネクション画面では以下の様な内容でホスト名、クライアントID、ユーザー名、パスワードを指定して接続してください:
iotf08


実際にパブリッシュする際には、上記の Topic と JSON メッセージを指定してパブリッシュします:
iotf09


メッセージが正しく送信されれば、Node-RED 側の Debug タブに送信した JSON が表示されるはずです:
2015112601


期待通りに動きました。これで QuickStart を使わずに IBM IoT Foundation サーバーを使う方法が分かりました。QuickStart でなければ QOS = 1 の制約もなく、より自由度の高い MQTT ブローカー利用が可能になりますね。


(参考資料)
https://docs.internetofthings.ibmcloud.com/ja/messaging/mqtt.html
https://docs.internetofthings.ibmcloud.com/ja/messaging/devices.html


 

IBM BluemixIoT Foundation サービスにデバイスを登録する手順をまとめておきます:
2015112501


IBM IoT Foundation の QuickStart サービスを使うと、特定の1台のデバイスのデータを簡単に集めて Node-RED に送る、なんてことができるようになるのですが、QuickStart には QuickStart なりの制約(QOS=1のみ、とか)が存在したり、Bluemix サービスの中には IoT Foundation サービスにデバイスが登録されている前提で提供しているサービスもあったりするので、QuickStart で繋がればよい、というわけにはいかないケースもあります(さすがに本番サービスを QuickStart で、というケースは逆に珍しいと思うけど・・)。

というわけで、IoT Foundation サービスへのデバイス登録手順を以下に紹介します。なお、ここでは以下のような条件のデバイス1台を IoT Foundation サービスに登録するものとします。自分の手持ちのデバイスを登録する場合は適宜自分の環境のデータと読み替えてください:
属性属性値
デバイスタイプMyDevice
デバイスID(MACアドレス)112233445566
認証トークン(自分で指定する接続パスワード)K.Kimura777


まだ自分の Bluemix アプリケーションに IoT Foundation サービスをバインドしていない場合は Bluemix 上から IoT Foundation サービスを指定して追加&バインドします:
2015112502


Bluemix 上のアプリケーション概要から IoT Foundation サービスのアイコンをクリックします:
2015112503


IoT Foundation サービスの説明画面が表示されるので、「ダッシュボードの起動」と書かれたボタンをクリックして、IoT Foundation ダッシュボードに移動します:
2015112504


IoT Foundation ダッシュボード画面が表示されます。この時点で一意に割り振られた組織ID(下図では ttb8bh)が確認できます。この組織 ID は MQTT パブリッシャーからメッセージを送信する際に必要になるのでメモしておきましょう。 ではデバイスを登録してみます。デバイスタブから「デバイスの追加」ボタンをクリックします:
iotf01


まずは(QuickStart でも使った)デバイスタイプを指定します。今回は MyDevice というデバイスタイプを指定します。初めてこのデバイスタイプを指定する場合は「デバイス・タイプの作成」ボタンから、以前に作ったことがあればセレクションボックスの選択肢から選んで、MyDevice デバイスタイプを指定します:
iotf02


次にデバイス ID を指定します。今回の例では 112233445566 というデバイス ID を指定します(ここにはネットワーク上で一意な ID を指定するので、一般的には MAC アドレスを指定します):
iotf03


次にセキュリティの認証トークン(パスワード)を指定します。自動生成することも、自分で指定することもできますが、この値は一度作ってしまうと後から変更できず、また後から参照することもできなくなるため、メモするなり、絶対に忘れないようにするなり、注意が必要です。今回は自分で認証トークン K.Kimura777 を指定することにします:
iotf04


追加するデバイスの内容確認画面が表示されます:
iotf05


デバイスを登録すると、資格情報が表示されます。この画面(特に認証トークン情報)は二度と見ることができないため、絶対に忘れないようにしましょう(忘れてしまった場合は一度デバイスを削除し、登録し直してください):
iotf06


改めて IoT Foundation ダッシュボードに戻ると、いま登録したデバイスがデバイス一覧に追加されているはずです。2台以上のデバイスを登録する場合は、上記の手順を繰り返してください:
iotf07


ちなみに、こうして登録したデバイスから IoT Foundation に対して JSON メッセージを送信(パブリッシュ)する場合、以下の内容を指定して MQTT パブリッシュを実行することになります:
項目指定する値
MQTTブローカーホストttb8bh.messaging.internetofthings.ibmcloud.com
(組織ID).messaging.internetofthings.ibmcloud.com
MQTTブローカーポート番号1883
(固定値)
クライアントIDd:ttb8bh:MyDevice:112233445566
d:(組織ID):(デバイスタイプ):(デバイスID)
認証ユーザー名use-token-auth
(固定値)
認証パスワードK.Kimura777
(認証トークンの値)
トピックiot-2/evt/event_id/fmt/json
evnet_id 部分は任意文字列


 

このページのトップヘ