DeeBridgeとNode-REDを組み合わせて使うと、DALIアプリケーションのテストや開発がかなり簡単に行えます。
ただし、Node-REDでの開発は普通のプログラムとはちょっと勝手が異なるところがあるので、私自身Try and Errorを繰り返しながらやっています。
このサイト(Digital-light)では、この知見を共有していければいいなと思っているので、今回、自分が調べたことをメモを残しておきます。
連続したDALIコマンドをNode-REDから送る方法
DALIにおいてDTR(Data Transfer Register)を使うコマンドやTYPE8のコマンドは、複数のコマンドを連続して送り続ける必要があります。
Node-REDの場合は基本的な使い方では1つのフローから1つづつしかメッセージを送らないので、連続してコマンドを送るには、実際にアドレス0にシーン0を設定する方法を解説しながらご紹介します。
例)アドレス0のSCENE0を10%(170)に設定する
DALIの器具アドレスA0に、シーン1は10%で点灯するようにするためのコマンドです。
DALIコマンドは
コマンド | DATA(DEC) | DATA(HEX) | 説明 |
---|---|---|---|
DTR0=170 | 163 170 | A3 AA | DTR0に170をいれる |
SET SCENE1(DTR0) | 1 64 | 01 40 | シーン1に10%を入れる |
SET SCENE1(DTR0) | 1 64 | 01 40 | シーン1に10%を入れる |
* SET SCENE1が2回おくられます。
Node-REDのフロー
上記のNode-REDのサンプルフローです。
functionノードの中はこのようになってます。
ご協力 きむらけい(@dotnsf)さん
でも、これだとうまくいかないんです。
連続したDALIコマンドをDeeBridgeに送るときの注意
先のフローだとコマンドは連続で送られしまい、DALI MONITORで確認すると2つ目のコマンドまでは受け取るのですが、3つ目のコマンドを受け取りません。
Delayノードを使う
1つ目に行った対策はDelayノードを使うです。
DelayノードをDeeBridge(TCP Outノード)とfunctionノードの間に挿入し、DALIコマンドを200msにしました。
いろいろためしたところ、0.2秒に1つのメッセージという設定が一番よさそうです。
ただし、set scene0のコマンドは別の理由でうまくいかないので、全点灯ON/OFFを繰り返す、次のコマンドでテストしました。
これでテストすると、先程のように200msに1コマンドのdelayをかけることで動作しました。
SET SCENE1(DTR0)は別のやり方
実はSET SCENE1は100ms以内に2回連続して送信しなければならないコマンドなので、上記のDelayを使うと機能しません。
そんなコマンドに対して、DeeBridgeでは100ms以内にコマンドを2回おくる方法があります。
それが
#DRR: [address],[command]
#DRW: [address],[command]
の2種類です。
具体的には、Injectionノードを使って
#DRW:1,64
と送ると、DALIモニターにはSET SCENE1(DTR0) が2回送られます。
ちなみに、
DRR: レスポンスがある
DRW: レスポンスなし
です。
あと、これが使えるのは下のような場合
TYPE8で色温度を設定するコマンドを送る場合、SET TEMPRARY CCTというコマンドを100ms以内に2回おくらなければならないのですが、この場合にも #DRW:3,231 とすれば対応できます。
SET SCENE1(DTR0)をNode-REDで書く場合
ということで、Node-REDにてSET SCENE1(DTR0)を行う場合は、
このように、DRWを使って書くとよいです。
上記は、2つしかコマンドを送ってませんが、複数DALIコマンドを送る場合は
このように全体的には200msの遅延をいれて、100ms以内に連続で送るコマンドはDRWを使います。
これからTYPE8で調色やRGBの呼び出しをするときも、この方法を使えば対応できそうです。
まとめ
少しづつTYPE8の調色やRGBなどの話をもらうことが増えてきたので、これからもこの方法で色々開発をしていきたいと思います。