この記事は Node-RED Advent Calendar 2019 12日目の記事です。
私はこのアドベントカレンダーに2017年から参加で過去記事は以下のとおり。時間が経つのは速いですね。
■2018年
Node-REDとDeeBridgeを使ってDALIによるIoT照明制御システムをつくる方法
■2017年
【動画あり】ScratchからNode-RED経由でDALI-APIでLEDを点灯させてみた
【動画あり】村田製作所のDALI電源とNode-REDをつないでみた
さて、2019年12日目の記事は、私がSociety5.0の実現に向けて超絶に売り込んでいるヨーロッパ生まれのオープンな設備制御規格「KNX(ケーエヌエックス)」に絡めてみました。
題して!
knx VirtualをつかってNode-REDのKNX-Easyからつないでみた(失敗)
です。
やったことは、Node-REDのKNX-Easyモジュール使ってNode-REDからKNX Virtualの機器を制御しよう試みました。
残念ながら、Node-REDから接続しようとするとKNX Virtualが落ちてしまいうまくいかなかったのですが、今後、なにか解決方法が見つかることを期待して記事として残しておきます。
KNXとは?
さて、まずはKNXとは?というところから入ります。
KNXを簡単に紹介すると、
- 設備制御機器のための規格です
- 国際規格になっており規格や仕様はオープンです
- 世界で400以上のメーカーがKNX製品をつくっています
というところでしょうか。
つまり、照明制御のDALIと同じようにオープンな規格で色んなメーカーが様々な機器をカタログ品としてつくっているので、IoTやAIなどといったものにつなげようとおもったら、どこかのメーカーの製品を使えば、新規製品開発などしなくても実装できちゃうという感じです。
↓ KNX機器をつくってるメーカーのロゴ
↓ KNXで出来るいろんなこと
ただ、みなさん、KNXの機器って見たこと無いですよね。
オープンな規格でつなげられるモノをみると、なんでもかんでもNode-REDにつないでみたくなるみなさんのことですから、きっと試してみたいはず。
でも、KNX機器はスイッチサイエンスさんでは入手できません。
さらに、弊社(スマートライト株式会社)でもKNX機器は販売しているのですが、趣味で購入するにはちょっとお値段がするので、なかなか難しいのが現状です。
KNX Virtualとは?
実は、KNXの本部でもKNXを気軽に試せるようにしてほしいという意見が、これまで多くよせられていて、その解決方法として「KNX Virtual」というアプリケーションがリリースされました。
「KNX Virtual」がどういうものかというと、「KNX Virtual」は誰でもKNXを気軽に試すことができるようにすることを目的としたアプリケーションです。
今までKNXを実際に試してみるには、
1.専用の設定ソフト: ETS
2.KNX機器 : 実機
が必要でした。
ちなみに、専用の設定ソフトETSを利用するにはライセンスを購入する必要があるのですが、KNXデバイスの数が5以下の場合は無料の「ETS Demo」を使用することができます。
従来は、「ETS Demo」が無料で使えても、KNX機器の実機がないとKNXを設定したり動かしたりすることができなかったのですが、「KNX Virtual」がリリースされたことで、KNXを完全無料で試すことができるようになりました。
つまり、下記の組み合わせであれば費用は一切かかりません
1.専用の設定ソフト: ETS Demo
2.KNX機器 : KNX Virtual
興味とやる気さえあればKNXを試してみることができる時代になったのです。
* ちなみに、KNX Virtualのチュートリアルについては、ETSの操作も必要になるので別途動画でつくります。あと、バージョンアップで過去のチュートリアル動画のとおり動かなくなることがある(実際にあった)ので、最新版を追いかけましょう。
KNX Virtualの画面
では、KNX Virtualの画面を紹介します。
まずはこれがKNX Virtualを立ち上げたところ。
左上の「Settings」をクリックすると
このように、KNXにTCPで接続するための設定になります。
Interface IPでIPアドレスが表示されていますが、これは変更できないようです。
Pingを打ってみるとちゃんと返ってきます。
先程のSettingsを終えると、左上がViewになっているのでこちらをクリック。
ずらっといろいろ出てきますが「Devices」をクリックします。
この画面が、KNXのデバイス機器を表す画面です。
たとえば、実機で下のようなKNXのプッシュボタンスイッチや、スイッチアクチュエーターがあります。
↑ KNX プッシュボタンスイッチ
↑ KNXスイッチアクチュエーター
KNX Virtualでこのプッシュボタンスイッチやスイッチアクチュエーターに該当するのが上図のようになります。
ETSでKNX Virtualテスト用に設定してみた
KNX Virtualのテスト用に、ETSをつかって、プッシュボタンスイッチとスイッチアクチュエーターでプログラムをしてみました。
使ったデバイスは2つだけ。
グループアドレス 0/0/1をつくり、ボタンを押すと1bitの信号が送られる設定です。
KNXデバイスのデータは、CatalogでManufacturersを「KNX Association」にすると表示されます。
ただし、実際にやる時はカタログデータを最新にアップデートしてください。古いデバイスのデータだと動かないものもあります。(今回、プッシュボタンのカタログデータが古いと動きませんでした)
KNX Virtualの機器へETSの設定情報を書き込み
KNXはETSを使ってプログラミングを行い、その後、各KNX機器にアプリケーションを書き込むのですが、どの実機がETS上のどのデバイスに相当するかを紐付けするため、デバイスにある「プログラミングボタン」を物理的に押します。
↑ KNXデバイスのプログラミングスイッチ
「KNX Virtual」では、先程のデバイス画面にある黒い四角がプログラミングボタンになります。なので、ETSで作成したアプリケーションをKNX Virtualのデバイスに書き込む際は、該当するデバイスの黒いボタンを押します。
書き込みが終わり、各デバイスの個別アドレスに表示が変わりました。
KNX VirtualでKNXデバイスを動かす
左上の「View」を押して表示される「Base」をクリックします。
先程ETSから書き込んだ設定は、左の「PushButton」の一番上の「0」と「1」、右のLampsにある「ch1」に反映されています。
では、Push Buttonsの「1」を押してみましょう。
Lampsのch1が黄色くなりました(ランプが点灯した状態)。続けて、Push Buttonsの「0」を押してみます。
Lampsのch1が黒くなりました(ランプが消灯した状態)。
このように、KNX Virtualではランプやブラインド、空調など、KNXで制御できる機器が用意されているので、実機を用意しなくてもKNXがどのような挙動をするのかを試すことができます。
Node-REDからKNX Virtualにつなげてみた
さて、いよいよNode-REDからKNX Virtualにつなげてみます。
フローは簡単に、KNXのグループアドレスに、0と1をインジェクトノードからおくるもの。
KNX-Easyというライブラリがあるので、それをを使いました。
node-red-contrib-knx-easy (node) – Node-RED
KNX-Easyのノードは、GatewayのIPアドレスが必要です。
前回、同じWin機でNode-REDとKNX Virtualを動かしたらKNX Virtualが落ちたので、あえてNode-REDとKNX VirtualをMacとWin機で分けてみました。
■ 状況
Node-RED : MACで起動 ( 192.168.0.100 )
KNX Virtual : Win機で起動 ( 192.168.0.106 )
で、Node-REDをデプロイすると、KNX Virtualが落ちます。
何度やってもだめでした。
ちなみに、KNX VirtualはC#で動いているそうです。
ちょっと、開発している人にきいてみます。
まとめ
残念ながら、Node-REDでKNX-EasyノードをつかってKNX VirtualのKNXデバイスを動かす試みは、KNX Virtualが落ちるという結果で失敗に終わりました。
落ちる理由がなんなのかわかりませんが、KNX Virtualの開発者に連絡をとり、なんとかNode-REDからKNX Virtualのデバイスが制御できないかを、これからもチャレンジしてみたいと思います。
ということで、Node-RED Advent Calendar 2019 12日目の記事はこれにて終了です。
明日は、yossihardさんの、「Node-RedからAzure Logic Appsを呼び出す」へとバトンを送ります。
ありがとうございました!