ReTerminalでEnOceanスイッチの信号を受けてMQTTでComfortClickに送り照明シーンを変更する方法

前回の記事を受けて実践編です。

ComfortClickをつかってMQTTブローカー設置とデバイスデータを受ける方法

今回は、ReTerminalにEnOceanのUSBドングルを差し、EnOceanのスイッチデータを受信してそれによってComfortClickの照明シーンを切り替える方法をご紹介します。

ReTerminalのEnOcean Node-REDのフロー

Image from Gyazo

[{"id":"2fa8b98e84f83d2c","type":"serial in","z":"abac3c1268fa03e7","name":"","serial":"941751e5dc8f2ce8","x":150,"y":100,"wires":[["180715535edd2ba7"]]},{"id":"f6a6388e742f5128","type":"debug","z":"abac3c1268fa03e7","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":540,"y":420,"wires":[]},{"id":"0d87404a6c1a56bb","type":"switch","z":"abac3c1268fa03e7","name":"","property":"payload.OriginatorID","propertyType":"msg","rules":[{"t":"eq","v":"002e5871","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":330,"y":260,"wires":[["e17d7c7453c652a1"],[]]},{"id":"180715535edd2ba7","type":"function","z":"abac3c1268fa03e7","name":"EnOceanDecorder","func":"//EnOcean telegram decoder\n//2017.10.8 created\n//\nvar date = new Date();\n//\nvar ESP3_Packet = msg.payload;\n//\nvar Header = ESP3_Packet.slice(1, 5);\nvar DataLength = 256 * ESP3_Packet[1] + ESP3_Packet[2];\n//\nvar RawData = ESP3_Packet.slice(6, 6 + DataLength);\nvar ERP2_Header = RawData.slice(0, 1).toString(\"hex\");\nvar EEP = \"RPS\";\nvar OriginatorID = \"00000000\";\nvar Data1 = \"00\";\nvar Data4 = \"00000000\";\n//\nvar OptionalData = ESP3_Packet.slice(6 + DataLength, 8 + DataLength);\nvar SubTelNum = OptionalData.slice(0, 1);\nvar dBm = OptionalData.slice(1, 2);\n//\nswitch (ERP2_Header) {\n    //normal telegram\n    case \"20\"://RPS telegram\n        EEP = \"RPS\";\n        OriginatorID = RawData.slice(1, 5).toString(\"hex\");\n        Data1 = RawData.slice(5, 6).toString(\"hex\");\n        break;\n    case \"21\"://1BS normal telegram\n        EEP = \"1BS\";\n        OriginatorID = RawData.slice(1, 5).toString(\"hex\");\n        Data1 = RawData.slice(5, 6).toString(\"hex\");\n        break;\n    case \"22\"://4BS normal telegram\n        EEP = \"4BS\";\n        OriginatorID = RawData.slice(1, 5).toString(\"hex\");\n        Data4 = RawData.slice(5, 9).toString(\"hex\");\n        break;\n    //teach-in telegram\n    case \"61\"://1BS teach-in telegram\n        EEP = \"1BS teach-in\";\n        OriginatorID = RawData.slice(3, 7).toString(\"hex\");\n        Data1 = RawData.slice(7, 8).toString(\"hex\");\n        break;\n    case \"62\"://4BS teach-in telegram\n        EEP = \"4BS teach-in\";\n        OriginatorID = RawData.slice(3, 7).toString(\"hex\");\n        Data4 = RawData.slice(7, 11).toString(\"hex\");\n        break;\n    default:\n        break;\n}\n\nmsg.payload = {\n    Time: date.toString(),\n    OriginatorID: OriginatorID,\n    EEP: EEP,\n    Data1: Data1,\n    Data4: Data4,\n    SubTelNum: SubTelNum,\n    dBm: dBm\n};\n\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":250,"y":180,"wires":[["0d87404a6c1a56bb"]]},{"id":"e17d7c7453c652a1","type":"function","z":"abac3c1268fa03e7","name":"スイッチデータの送信","func":"var data = msg.payload.Data1;\nvar value;\n\nif ( data == 84 ) {\n    value = true;\n    msg.payload = value;\n    return msg;\n\n} else if (data == 88) {\n    value = false;\n    msg.payload = value;\n    return msg;\n}\n\n//node.warn(data);\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":340,"wires":[["f6a6388e742f5128"]]},{"id":"941751e5dc8f2ce8","type":"serial-port","serialport":"/dev/ttyUSB0","serialbaud":"57600","databits":"8","parity":"none","stopbits":"1","waitfor":"","dtr":"none","rts":"none","cts":"none","dsr":"none","newline":"100","bin":"bin","out":"time","addchar":"","responsetimeout":"10000"}]

このようなフローを作成し、EnOceanスイッチからのデータをtrue/falseで送るようにします。

ReTerminalのEnOcean Node-REDのフローの修正

Image from Gyazo

ComfortClickのMQTTブローカーにつなげるためにフローを修正します。

Image from Gyazo

Image from Gyazo

こちらの詳細は前回の記事をご覧ください。
ComfortClickをつかってMQTTブローカー設置とデバイスデータを受ける方法

ComfortClick側で確認

Image from Gyazo

EnOceanスイッチを押すとvalueが変化すればOKです。

ComfortClcikで照明シーンを作成

次はEnOceanスイッチを押すと照明シーンが呼び出されるようにしたいので、ComfortClickで照明シーンを作成します。

Image from Gyazo

DevicesからSceneを追加。

Image from Gyazo

シーンが発動するためのTriggersからAddをクリック

Image from Gyazo

EnOceanボタンのOnが押された時のトリガーを選択。

このままだと押しても正しくSceneが実行されたかわからないので、PhilipsHueを使います。

ComfortClcikにHueを追加

Image from Gyazo

DevicesにHueを追加します。

Image from Gyazo

これでSceneにHueをいれて正しく動いているのが確認する準備ができました。

sceneにHue Lapmを入れる

Image from Gyazo

SceneのデバイスにHue Lamp1を追加しPowerがTrueになるようにします。

Image from Gyazo

これでEnOceanのTrue側のボタンを押して点灯することを確認。

では、On用のシーンとOff用のシーンを作ります。

Image from Gyazo

Sceneをコピー&ペーストして、Scene-OnとScene-Offを作成しました。

Image from Gyazo

Scene-OffのTriggersでEditを押します。

Image from Gyazo

Valueをfalseにします。

Image from Gyazo

Hue Lamp1のValueもfalseにします。

EnOceanスイッチを押すと、Hue Lamp1がOn/Offすれば完了です。

まとめ

以上、ReTerminalでEnOceanスイッチの信号を受けてMQTTでComfortClickに送り照明シーンを変更する方法をご紹介しました。

今回はsceneの動作確認にHueLampを使いましたが、もちろん、KNXやDALIのデバイスもsceneの中に組み込んであげれば、同様にsceneの呼び出しが可能です。