本記事はスマートホーム GWアドベントカレンダー2021の最終日(8日目)の記事です。
ホームオートメーション用サーバーComfortclick Jigsawは、RPC(Remote procedure call )の機能があります。
さらに、Comfortclick社のゲートウェイを通してローカルのサーバーに接続する方法がもあります。
このゲートウェイとRPCの機能を使うと、Node-REDとの連携をすることができ、Node-REDに連携することで、JigsawのアプリケーションbOSでプラグインが作られていない機器とも簡単につなぐことができます。
今回は上図のとおり、obnizからenebularのFlow(Node-RED)にデータを送り、そこからローカルのbOS Server(Jigsaw)に接続してKNX制御のLED電球のOn/Offを行います。
この方法についてご紹介いたします。
動画で解説
Jigsaw側でRPCの準備
bOS Configuratorを立ち上げJigsawに接続します。
General > API > RPC をクリック。
Settingsで、Enableを”True”、UsernameとPasswordを確認します。この情報を使ってenebular(Node-RED)からhttp-requestノードを使ってJigsawに接続します。
Jigsaw側でKNXデバイスの確認
今回、ビートソニック社のフィラメントLED電球、サイフォン(LDF29B)を、KNXの位相制御モジュールとつなげてOn/Offの制御を行います。
RPC制御する際に必要となるKNX側で設定したDeviceの情報を確認します。
Devices > KNX > TEST > Light > Lampをクリック。
InfoタブのPathに表示される
Devices¥KNX¥TEST¥Light¥Lamp を確認します。
↓KNXの設定方法は過去の記事をご覧ください。
KNXホームオートメーションサーバー JigsawのbOSでStatusを使う方法|デジタルライト(Digital-light.jp)
また、enebularから接続する際はゲートウェイURLが必要になりますので、実際に行う場合は弊社(スマートライト)にご連絡ください。
obnizとenebular(Node-RED)の接続テスト
初めにobniz(オブナイズ)についてご存知無い方は下記の記事をご覧ください。
obnizを設備とIoT機器のゲートウェイとして期待している件
node-red-contrib-obniz (node) – Node-RED
obnizからenebularへの接続は、Node-REDのnode-red-contrib-obnizというライブラリを使います。
enebular – あらゆるデバイスとクラウドサービスを「つなぐ」、IoTのためのデータ連携プラットフォーム
enebularのflowを立ち上げます。
テストでobnizのダイヤルをLightに回すと”true”が、Rightに回すと”false”が送られ、obnizのディスプレイには”Right”か”Left”が表示させるフローを作成しました。
[{"id":"4cb5787c.5177c8","type":"obniz-repeat","z":"76a39534.2619dc","obniz":"7924ef42.62536","name":"Obniz","interval":100,"code":"var state = await obniz.switch.getWait();\nvar message;\nif ( state != \"none\") {\n if ( state == \"left\" ) {\n message = \"true\";\n } else if ( state == \"right\") {\n message = \"false\";\n } else if ( state == \"push\") {\n message = \"push\";\n }\n msg.payload = message;\n msg.state = state;\n return msg;\n}","x":160,"y":220,"wires":[["499d51c1.76e12"]]},{"id":"41425d75.aad644","type":"debug","z":"76a39534.2619dc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":570,"y":220,"wires":[]},{"id":"b7162982.e8f288","type":"obniz-function","z":"76a39534.2619dc","obniz":"7924ef42.62536","name":"toObniz","code":"var state = msg.state;\n\nobniz.display.clear();\n\nobniz.display.print(state);","x":560,"y":300,"wires":[[]]},{"id":"499d51c1.76e12","type":"delay","z":"76a39534.2619dc","name":"フィルター","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":350,"y":220,"wires":[["b7162982.e8f288","41425d75.aad644"]]},{"id":"7924ef42.62536","type":"obniz","z":"","obnizId":"40930779","deviceType":"obnizboard","name":"Obniz","accessToken":"","code":""}]
無事に動くことを確認しました。
enebularからJigsawへデータ送信
enebularからJigsawへのフローは、templateノードとhttp-requestノードを使います。
Injectionノードは点灯用に”true”、消灯用に”false”を送るノードを作ります。
Templateノードには下記の様にjsonデータを書き込みます。
{"objectName":"Devices\\KNX\\TEST\\Light\\Lamp","valueName":"Value","value": "{{payload}}" }
今回制御するフィラメントLEDのデバイスPathは”Devices¥KNX¥TEST¥Light¥Lamp”で、ここにvalueとして”true”と”false”を送れば、LEDランプのOnとOffができます。
1点気をつけることは、jsonでおくるので”¥”を”\\”にします。
http-requestノードにはメソッドをPOSTにして、UsernameとPasswordを入れたゲートウェイURLを記載します。
https://RPC:RPC@JIGSAW_GATEWAY_URL/API/RPC/SetValue
この様になります。
フローをdeployして実行。
Injectionノードを押すとフィラメントLEDが点灯・消灯できました。
obnizとJigsawを連携
いよいよobnizとJigsawを連携します。
Delayノード(フィルター)からtemplateノードにフローをつなぎます。
これで完了です。
結果については冒頭の動画の通りです。
まとめ
私が個人的に、IoTデバイスとしていろんな可能性を感じているobnizとホームオートメーションサーバーをenebularを使って接続する検証をやってみました。
obnizやenebularといったIoTサービスは、他のものとどのように連携できるかが重要なので、どちらもその間口が広く検証する機会をご提供いただけているので感謝しています。
私の得意とするホームオートメーションは、日々、新しいデバイスが発表される中で、どうやって照明やブラインドといった従来からある機器とつなげてお客さんにとって便利な仕組みをつくるのかが重要になります。
で、本当にお客さんから喜ばれるものは、お客さんから要望を受けたり会話したりするときに、そのヒントがでてくるものなので、その前に自分自身が体験として、様々なデバイス類を接続する検証をしていくことが重要だと思います。
今回、GWアドベントカレンダーという仕組みを木戸さんが作ってくれたおかげで、スマートホームに関連する8つの記事を書き終えることができました。
これ、やらなくても誰にも怒られないから、こういう機会を提供してくれる人はすごく大事だと思います。
木戸さん、ありがとうございます!
ということで、引き続き、ホームオートメーションと新しいIoTデバイスをつなげる活動をしていきたいと思いますので、皆様、これからもよろしくおねがいします!