本日はEnOceanのスイッチを使ってNode-REDで値の取得を行った。
EnOceanとは

ボタンを押したり、ライトをオンにするような動きや光、温度から発生したエネルギーを用いることでバッテリーの代わりに電力の供給を行うことができる。また、前述したエネルギーハーベスティングと呼ばれる技術により、電池や配線が不要で信号の送信を行うことができる。
使用した機器について

EnOcean EASYFIT・・・スイッチを押すときと話すときに発電することで、配線と電源を必要とせずに使用することができる

EnOcean usb400j・・・受信モジュール
実際にNode-REDへの接続方法
まず初めにNode-REDに「node-red-node-serialport」をインストールする。

インストールすることで下記のノードが使用できるようになる。

今回は「serial in」を使用した。PCに「EnOcean usb400j」を差し込みNode-REDの「serial in」の設定を行う。

シリアルポートの設定を行い、スイッチからの信号を受信できるようにする。

シリアルポートの設定を行うためにデバイスマネージャーからポートの確認を行う。

今回はCOM5に「EnOcean usb400j」を差し込んででいるため、シリアルポートの選択でCOM5を選択する。また、下記のように入力の設定を行う。

このように設定することでスイッチを押すとき、離すときに信号を受信することができる。


受信した信号をjson形式に変換させる
このまま受信してしまうとデータの内容が分からないため、json形式で見ることができるようにする。
先程、受信するために作ったフローにfunctionノードを追加し下記のコードを記述する。

var date = new Date();
//
var ESP3_Packet = msg.payload;
//
var Header = ESP3_Packet.slice(1, 5);
var DataLength = 256 * ESP3_Packet
+ ESP3_Packet
;
//
var RawData = ESP3_Packet.slice(6, 6 + DataLength);
var ERP2_Header = RawData.slice(0, 1).toString("hex");
var EEP = "RPS";
var OriginatorID = "00000000";
var Data1 = "00";
var Data4 = "00000000";
//
var OptionalData = ESP3_Packet.slice(6 + DataLength, 8 + DataLength);
var SubTelNum = OptionalData.slice(0, 1);
var dBm = OptionalData.slice(1, 2);
//
switch (ERP2_Header) {
//normal telegram
case "20"://RPS telegram
EEP = "RPS";
OriginatorID = RawData.slice(1, 5).toString("hex");
Data1 = RawData.slice(5, 6).toString("hex");
break;
case "21"://1BS normal telegram
EEP = "1BS";
OriginatorID = RawData.slice(1, 5).toString("hex");
Data1 = RawData.slice(5, 6).toString("hex");
break;
case "22"://4BS normal telegram
EEP = "4BS";
OriginatorID = RawData.slice(1, 5).toString("hex");
Data4 = RawData.slice(5, 9).toString("hex");
break;
//teach-in telegram
case "61"://1BS teach-in telegram
EEP = "1BS teach-in";
OriginatorID = RawData.slice(3, 7).toString("hex");
Data1 = RawData.slice(7, 8).toString("hex");
break;
case "62"://4BS teach-in telegram
EEP = "4BS teach-in";
OriginatorID = RawData.slice(3, 7).toString("hex");
Data4 = RawData.slice(7, 11).toString("hex");
break;
default:
break;
}
msg.payload = {
Time: date.toString(),
OriginatorID: OriginatorID,
EEP: EEP,
Data1: Data1,
Data4: Data4,
SubTelNum: SubTelNum,
dBm: dBm
};
return msg;
このfunctionノードをserialinポートとdebugポートの間に挿入し、デプロイする。

この状態でスイッチを押すと下記のような結果となる。

この状態であればDATA1の値がスイッチを押した時は”84″、離した時は”00″となっており変化していることが読み取れる。
追記
受信機を取り付けていれば下記のようなセンサからの信号もNode-REDでスイッチセンサと同様のフローで受信することができる。

EnOcean マグネットコンタクトセンサー EMCSJ・・・磁気を近づけることで信号を送信することができる。

EnOcean 人感センサー EOSCJ・・・室内の光や太陽からエネルギーを得て人の動きを検知することができる。