tomo

Node-REDを使用し、EnOceanスイッチの値の取得方法 2023/07/04 (2日目)

本日は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・・・室内の光や太陽からエネルギーを得て人の動きを検知することができる。