Sigfox CallbackとIBM Watson IoT連携 (with Node-RED)


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との連携方法を記載します。

大まかな流れは、下記の通りとなります。
1. IBM Watson IoT PlatformでSigfoxクラウド連携用のAPIキーを生成
2. SigfoxクラウドでCallback設定
3. Node-REDでデータ確認

IBM Watson IoT Platformの設定

Internet of Things Platformの立ち上げ

"Internet of Things Platform"は、IoTデバイスを簡単に活用できるよう設計されたクラウ ド・ホスティング・フルマネージド・サービスで、IoTデータのデバイスの登録、接続、制御、迅速な可視化、保管などの機能が提供されています。
Sigfoxクラウドとの接続も、このプラットフォームを経由することになります。
ライトユーザーであれば、立ち上げられるアプリケーションなどに制限はありますが、無料で利用可能ですでの、まずはIBM Cloud(https://cloud.ibm.com/)からアカウントを取得してください。

  1. IBM Cloud(https://cloud.ibm.com/)を開き、[リソースの作成]ボタンをクリックします。

  2. カタログでは、"Internet of Things Platform"を選択してください。

  3. Internet of Things Platformの初期設定では、サービス名(今回はSigfox2Watson)を入力してください。デプロイする地域は、デフォルトのダラスで結構です。

  4. リソースが作成されると、下記ページが表示されますので、[起動]ボタンをクリックし、サービスを立ち上げます。なお、作成済みリソースの確認はこちらから可能です。

  5. 登録済みのIBM ユーザーIDとパスワードを使って、[サインイン]します。IBMユーザーIDを忘れた方は、こちらのプロファイルページで確認できます。

  6. サインインすると、右上にご自身のIDが表示されていることに気が付くと思います。クリックすると、BlueMix Freeというメニューが出てきますので、それを選択します。

IBM Watson IoT PlatformでAPIキーを作成

まずは、Sigfoxクラウドと連携するために、Watson IoT Platform側でAPIキーを作成します。

  1. 左メニューの[アプリ]を選択後、右上に出てくる[+APIキーの生成]ボタンをクリックしてください。

  2. 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 KeyAuth Tokenです。この2つは、上述のWatson IoT Platformで作成したAPIキー情報からコピー&ペーストしてください。

あとは、CallbackするJSON bodyを定義します。今回は、デバイスIDと受信時刻、データペイロードを送りますので、下記JSON文を入力してください。

sigfox_callback.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)が本当に転送されてきているかを確認します。

  1. IBM Cloudのカタログに戻り、"Node-RED"で検索をかけると"Node-RED App"タイルが表示されますので、そのタイルを選択してください。

  2. [アプリの作成]ボタンをクリックしてください。

  3. アプリの詳細設定を入力する画面になります。
    アプリ名は、ユニークでなければいけないので、デフォルトのアプリ名をそのまま使うことをお奨めします。

    Cloudantサービスのリージョンも選択可能です。今回は、すべてダラスで統一しておきます。
    [作成]ボタンをクリックしNode-REDアプリを作成します。

  4. Node-REDアプリの立ち上げには数分かかるかもしれませんが、無事作成されると、下図のような画面になります。[アプリのデプロイ]ボタンをクリックしてください。

  5. アプリのデプロイには、下図のようにIBM Cloud API Keyが必要です。[New +]ボタンをクリックし、新たにキーを作成してください。

    キーを入力すると、右上の[作成]ボタンが有効になりますので、作成を続けましょう。

  6. ツールチェーンの画面に遷移し、Delivery Pipelineの状態が適時変わっていくと思います。成功するまで時間がかかりますので、気長に待ちましょう。

  7. Delivery Pipelineの状態が"成功"すると、同画面の上部に、下図のように、"アプリURLにアクセス"というリンクが表示されますので、クリックしてください。

  8. アプリURLにアクセスすると、Node-REDの初期設定となりますが、必要な設定は、Node-REDの認証ユーザ設定のみですので、UsernameとPasswordを入力して、[Next]ボタンを押していき、設定を終わらせてください。

  9. 下図、Node-RED画面が表示されるので、"Go to your Node-RED flow editor"ボタンをクリックしてください。

IBM Watson IoTのNodeがない!

早速、Node-RED上で、IBM Watson IoTに接続されたデバイスからメッセージ情報を取得しようと思ったところ、左のノード一覧にIBM IoT inのノードが見当たりません。
ノードを登録してあげる必要があります。ノードの登録はpackage.jsonに追加して、再ステージングすれば可能です。

  1. IBM Cloudに戻り、Node-REDアプリ(ここでは、Node RED ***という名前で作成したアプリ)に戻ります。下記赤枠URL(リポジトリURL)をクリックします。

  2. Node-REDアプリのリポジトリに遷移しますので、package.jsonを選択し、Editしてください。

  3. 追加するノードは"node-red-contrib-scx-ibmiotapp"という名前のノードです。

    ノード追加後、画面下部にある[Commit changes]ボタンをクリックすると、package.jsonへの変更が反映され、再ステージングが始まります。(ステージングは数分かかるので、また気長に待ちましょう)

  4. ステージが終了すれば、改めて、Node-REDのURLにアクセスします。すると、下図のように入力・出力カテゴリに[ibmiot in]と[ibmiot out]が追加されています。(ノードの追加は、Node-RED上のパレットの管理メニューからでも可能ですが、IBM Watson IoT関係のノードを追加しようとしても、失敗続きだったので、直接package.jsonを編集しました。)

  5. ここまでいけば、後は、フローを作成するのみです。下図のようにibmiot inノードとdebugノードを配置します。

  6. 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を入力してください。

  7. 右上の[デプロイ]ボタンをクリックするとデプロイが始まり、成功後、デバッグビューにデバイスメッセージが表示されることが確認できます。

まとめ

以前あったIBM Watson IoT Starterというサービスキットがなくなり、IBM Watson IoTとNode-REDを個々に立ち上げる必要がでてきたため、設定がややこしくなってしまいましたが、逆にIBM Watson IoTとNode-REDの関係性について理解できるようになったかと思います。

この仕組みを使うことにより、Node-REDの拡張機能を使って、様々なかたちでSigfox IoTデバイスからのメッセージを表現できるようになるかと思います。下記にサンプルをあげておきます。

Sigfox Japan KCCS
Twitter @ghibi