Sigfox Callbackには、Custom Callback以外にAWS IoT、AWS Kinesis、Microsoft Azure Event hub、Microsoft Azure IoT hub、IBM Watson IoT Platformへの連携が用意されていますが、Node-REDを使ってデバイスメッセージを処理したいという方も増えてきましのたで、ここでは、IBM Watson IoT Platformとの連携方法を記載します。
大まかな流れは、下記の通りとなります。
- IBM Watson IoT PlatformでSigfoxクラウド連携用のAPIキーを生成
- SigfoxクラウドでCallback設定
- Node-REDでデータ確認
#IBM Watson IoT Platformの設定
##Internet of Things Platformの立ち上げ
"Internet of Things Platform"は、IoTデバイスを簡単に活用できるよう設計されたクラウ ド・ホスティング・フルマネージド・サービスで、IoTデータのデバイスの登録、接続、制御、迅速な可視化、保管などの機能が提供されています。
Sigfoxクラウドとの接続も、このプラットフォームを経由することになります。
ライトユーザーであれば、立ち上げられるアプリケーションなどに制限はありますが、無料で利用可能ですでの、まずはIBM Cloud(https://cloud.ibm.com/)からアカウントを取得してください。
-
IBM Cloud(https://cloud.ibm.com/)を開き、[リソースの作成]ボタンをクリックします。
-
Internet of Things Platformの初期設定では、サービス名(今回はSigfox2Watson)を入力してください。デプロイする地域は、デフォルトのダラスで結構です。
-
リソースが作成されると、下記ページが表示されますので、[起動]ボタンをクリックし、サービスを立ち上げます。なお、作成済みリソースの確認はこちらから可能です。
-
登録済みのIBM ユーザーIDとパスワードを使って、[サインイン]します。IBMユーザーIDを忘れた方は、こちらのプロファイルページで確認できます。
-
サインインすると、右上にご自身のIDが表示されていることに気が付くと思います。クリックすると、BlueMix Freeというメニューが出てきますので、それを選択します。
##IBM Watson IoT PlatformでAPIキーを作成
まずは、Sigfoxクラウドと連携するために、Watson IoT Platform側でAPIキーを作成します。
-
APIキーの生成時に、役割(Role)を聞かれます。"標準アプリケーション"を選んでおいて下しさい。APIキーの生成が完了すると、下図のようにAPIキーと認証トークンが表示されますので、両方をコピーしておいてください。
#Sigfoxクラウドの設定
Sigfoxクラウドでは、IBM Watson IoT Platformと連携したいDEVICE TYPEを選択し、左メニューのCALLBACKSから、[New]ボタンをクリックします。複数のCallbackパターンがリスト表示されているので、**"IBM Watson IoT Platform"**を選択します。
##Sigfox: Callback設定(Watson IoT Platform)
Watson IoT PlatformとのCallbackで必要な設定は、API KeyとAuth Tokenです。この2つは、上述のWatson IoT Platformで作成したAPIキー情報からコピー&ペーストしてください。
あとは、CallbackするJSON bodyを定義します。今回は、デバイスIDと受信時刻、データペイロードを送りますので、下記JSON文を入力してください。
{
"device": "{device}",
"time": {time},
"data": "{data}"
}
最後に、[OK]ボタンをクリックすると終了です。これで、SigfoxデバイスからのデータがIBM Watson IoT Platformに転送されるようになりました。
Watson IoT Platform側でデバイスメニューを確認します。Sigfoxクラウドで1つのデバイスタイプに対し、複数のデバイスを登録していた場合も、各デバイスからデータが送信され始めると、自動的にWatson IoT Platfrom側のデバイスが追加されます。
また、デバイスの「最近のイベント」を選択すると、SigfoxクラウドからCallbackされたメッセージを確認することができます。
#Node-REDで確認
Node-REDで、Sigfoxクラウドから送られたメッセージ(JSON)が本当に転送されてきているかを確認します。
-
IBM Cloudのカタログに戻り、**"Node-RED"**で検索をかけると"Node-RED App"タイルが表示されますので、そのタイルを選択してください。
-
アプリの詳細設定を入力する画面になります。
アプリ名は、ユニークでなければいけないので、デフォルトのアプリ名をそのまま使うことをお奨めします。
Cloudantサービスのリージョンも選択可能です。今回は、すべてダラスで統一しておきます。
[作成]ボタンをクリックしNode-REDアプリを作成します。 -
Node-REDアプリの立ち上げには数分かかるかもしれませんが、無事作成されると、下図のような画面になります。[アプリのデプロイ]ボタンをクリックしてください。
-
アプリのデプロイには、下図のようにIBM Cloud API Keyが必要です。[New +]ボタンをクリックし、新たにキーを作成してください。
キーを入力すると、右上の[作成]ボタンが有効になりますので、作成を続けましょう。 -
ツールチェーンの画面に遷移し、Delivery Pipelineの状態が適時変わっていくと思います。成功するまで時間がかかりますので、気長に待ちましょう。
-
Delivery Pipelineの状態が"成功"すると、同画面の上部に、下図のように、"アプリURLにアクセス"というリンクが表示されますので、クリックしてください。
-
アプリURLにアクセスすると、Node-REDの初期設定となりますが、必要な設定は、Node-REDの認証ユーザ設定のみですので、UsernameとPasswordを入力して、[Next]ボタンを押していき、設定を終わらせてください。
-
下図、Node-RED画面が表示されるので、"Go to your Node-RED flow editor"ボタンをクリックしてください。
##IBM Watson IoTのNodeがない!
早速、Node-RED上で、IBM Watson IoTに接続されたデバイスからメッセージ情報を取得しようと思ったところ、左のノード一覧にIBM IoT inのノードが見当たりません。
ノードを登録してあげる必要があります。ノードの登録はpackage.jsonに追加して、再ステージングすれば可能です。
-
IBM Cloudに戻り、Node-REDアプリ(ここでは、Node RED ***という名前で作成したアプリ)に戻ります。下記赤枠URL(リポジトリURL)をクリックします。
-
追加するノードは**"node-red-contrib-scx-ibmiotapp"**という名前のノードです。
ノード追加後、画面下部にある[Commit changes]ボタンをクリックすると、package.jsonへの変更が反映され、再ステージングが始まります。(ステージングは数分かかるので、また気長に待ちましょう) -
ステージが終了すれば、改めて、Node-REDのURLにアクセスします。すると、下図のように入力・出力カテゴリに[ibmiot in]と[ibmiot out]が追加されています。(ノードの追加は、Node-RED上のパレットの管理メニューからでも可能ですが、IBM Watson IoT関係のノードを追加しようとしても、失敗続きだったので、直接package.jsonを編集しました。)
-
ibmiot inノードの設定で必要なのは、IBM Watson IoTのAPIキーとトークンです。「IBM Watson IoT PlatformでAPIキーを作成」のところで作ったAPI KeyとAPI Tokenを入力します。Server-Nameは
organization_id.messaging.internetofthings.ibmcloud.com
でいけると思います。organization_idのところは、ご自身の組織IDを入力してください。
-
右上の[デプロイ]ボタンをクリックするとデプロイが始まり、成功後、デバッグビューにデバイスメッセージが表示されることが確認できます。
#まとめ
以前あったIBM Watson IoT Starterというサービスキットがなくなり、IBM Watson IoTとNode-REDを個々に立ち上げる必要がでてきたため、設定がややこしくなってしまいましたが、逆にIBM Watson IoTとNode-REDの関係性について理解できるようになったかと思います。
この仕組みを使うことにより、Node-REDの拡張機能を使って、様々なかたちでSigfox IoTデバイスからのメッセージを表現できるようになるかと思います。下記にサンプルをあげておきます。