[IoT][enebular][Node-RED][myThings] enebular/Node-REDとmyThingsの連携

By |9月 10, 2015|enebular, IoT, Javascript, Node-RED, Node.js, OSS, |4 comments


先週末、福岡のYahooさんのオフィスで開催された第4回九州IoT/M2M勉強会に登壇させていただきました。

もちろんenebular/Node-REDmyThingsの連携させた内容です。

myThingsはYahoo Japanが7月下旬に発表した、アプリやサービスを組み合わせてアクションを起こすIFTTTのようなサービスです。

色々なアプリやサービスをチャンネルとして扱い、チャンネルのトリガーやアクションを組み合わせてシンプルなワークフローを自動化できます。

デフォルトで準備されていないサービスやアプリと連携したい場合は、チャンネル追加リクエストをしてYahooさんがチャンネル追加するのを待つ… こともなく、開発できるならIDCフロンティアさんのIDCFチャンネルを利用することで低レイヤーで柔軟な連携が可能になります。

IDCFチャンネルを利用するにはmyThingsをはじめようの手順でmyThingsと連携するサーバを構築します。

IDCF Cloudで動かすのはOctobluのMeshbluというオープンソースのMQTTブローカとfreeboardというオープンソースのダッシュボードプロダクトです。

Webサーバとしてnginx、更にluaで処理が追加されてますが、これらはDocker Composeでまとめられているので基本的にドキュメント通りにコマンドを打てば環境構築可能です。

詳細の説明は以下の各ドキュメントに譲りますので、IDCF Cloudでサーバを構築してmyThingsのIDCFチャンネルを認証して有効にして、「天気・災害」のトリガーの組み合わせを作るところまで割愛します。

今回はmyThingsをはじめよう – Part5: 「天気・災害」のトリガーを「IDCF」のアクションがHTTPで受信するの最後にあるMQTTでsubscribeもできていますの部分を
[IoT][enebular][Sango] enebularと時雨堂さんのSangoでMQTTを気軽に試すと同じ要領でSubscribeしてみます。

では、enebularでIDCF Cloudに構築したサーバをSubscribeするflowを作ってみましょう。

まずは以下のようにmqtt in nodeを配置します。

配置したmqtt in nodeにIDCFに構築したサーバの認証情報を登録します。

まず以下のようにIDCFサーバでmyThingsに登録したaction-1のuuidとtokenを確認。

$ docker-compose run --rm iotutil show -- -k action-1

> iotutil@0.0.1 start /app
> node app.js "show" "-k" "action-1"

┌──────────┬──────────┬──────────────────────────────────────┐
│ keyword  │ token    │ uuid                                 │
├──────────┼──────────┼──────────────────────────────────────┤
│ action-1 │ 8a781e76 │ 3a78814a-6879-4543-bacf-9a206cd951a6 │
└──────────┴──────────┴──────────────────────────────────────┘

action-1デバイスの確認参照

次にaction-1のuuidとtokenを以下のように登録。

続いてtopicに同じくaction-1のuuidを登録。

これで、myThingsをはじめよう – Part5: 「天気・災害」のトリガーを「IDCF」のアクションがHTTPで受信するで作った組み合わせが実行されると以下のようにmyThingsを通じて天気情報をJSONで取得できます(デフォルト15分間隔で実行される)

ちなみにmyThingsアプリで以下のように手動実行すればflowを組みながらデバッグできます。

ここから先は取得した情報を元にデバイスを操作したり、どこかにメッセージを加工して転送したり、誰かにメールを送ったり、何かのストレージに格納したりといったenebular/Node-REDで可能な多種多様な連携に応用してください。

4 thoughts on “[IoT][enebular][Node-RED][myThings] enebular/Node-REDとmyThingsの連携

  1. methodist

    はじめまして、methodistともうします。

    Node-REDを使った内容、楽しく拝見させていただいております。
    ところで、info/debugタブの横にchartタブなる見慣れないタブがあることに気が付きました。
    これはどのようにすれば表示させることができるのでしょうか?

    IoTのデータを可視化する方法については、いつも悩みますが、とりあえず、
    IBM IoT FoundationのQuickStartのページにあるグラフ表示機能を利用しておりましたが、
    Node-RED内でChartタブのような表示ができればベストと思い連絡させていただきました。
    お手数をおかけしますが、よろしくお願いします。

  2. 古城 篤 Post author

    Node-REDのdebug nodeが参考になります。

    以下のdebug nodeのサーバサイドのソースにある”RED.comms.publish(“debug”,msg)”でクライアントサイドにメッセージを送れます。
    https://github.com/node-red/node-red/blob/master/nodes/core/core/58-debug.js

    そして以下のdebug nodeのクライアントサイドのソースにある”RED.comms.subscribe(“debug”,this.handleDebugMessage)”でサーバサイドからのメッセージをsubscribeしています(待ち構えています)
    https://github.com/node-red/node-red/blob/master/nodes/core/core/58-debug.html

    さらに、chartタブのように任意のタブを表示するには同じくクライアントサイドのソースにある”RED.sidebar.addTab(…)”で追加できます。これはdebug nodeの”onpaletteadd”イベントのタイミングの処理に書かれています。つまり、パレット(画面左ペインのnodeが並んでいるところ)にdebug nodeが追加されたタイミングでdebugタブが追加されます。debug nodeはcore nodeでデフォルトで存在するので気付きませんが仮にdebug nodeを削除するとdebugタブは表示されないと思います(未検証)
    https://github.com/node-red/node-red/blob/master/nodes/core/core/58-debug.html

    上記を応用してenebular agentでは以下のmetricsGraphics nodeというものを独自に作成してビルトインしています。
    https://github.com/enebular/enebular-agent/tree/master/nodes

    Node-RED本家に反映するか否かは様々な議論が必要とされると思いますので我々のenebularというサービスを通じて利用するツールはNode-RED互換として挑戦的な拡張を行い日々新しいユーザ体験を模索していて上記もその一環になります(OSSであることには変わりません)

  3. methodist

    お返事ありがとうございます。ちょっと導入方法と使い方について解説いただけると助かります。
    metricsGraphics.js, metricsGraphics.html, iconを$HOME/.node-red/nodesにコピーし、node-redを再起動すると、chartタブが増えたのですが、どうすればchart tabにグラフが表示されるのか、わかりませんでした。
    source codeを解析すればわかるのかもしれませんが、当方にはそこまでのスキルが無いので、お手数をおかけして申し訳ございませんが、ご教授いただけると幸いです。

  4. methodist

    やっと解決できました。
    貴社のenebularにサインアップし、herokuにdeployすることでchartの動作を確認しました。
    公開されているnodeを追加できるadminタブもあり、Node-REDがものすごく便利になりました。
    このような拡張機能を提供いただきありがとうございました。
    次は、ラズパイへのデプロイを挑戦してみます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です