Falconの思うままに

PASCAL好きが、気ままにマニアックなネタを

洗濯検知のNodeRedフロー解説

さて、洗濯検知はTWILITE CUEで行っていますが、
これを受信して活用するのはラズパイ側のNodeRedです。
 
非常に簡単なフローで紹介するまでもないですが、
受信したシリアルデータをMODBUSとINFLUXDBへ
上げるまでを行っています。
 
このあたり非常にNodeRedの柔軟性を発揮するところで
フローは何通りも書けます。
それを最適化して簡潔なフローとなりました。
 
基本的にfunctionノードを多用したくないという
思いはあります。 

TWILITEからのメッセージ処理
functionノードの中身は以下のようにします。
ちなみにJavaScript書けない人なので手探りです(笑)
ご存じPASCAL LOVEな人ですから...
   
var t,lid,lqi,snumm,ev,evkind,v;

t=msg.payload;

lqi   =parseInt(t.substr(9,2),16);
lid   =parseInt(t.substr(23,2),16);
snum  =parseInt(t.substr(29,2),16);
evkind=parseInt(t.substr(49,2),16);
ev    =parseInt(t.substr(53,2),16);
v     =parseInt(t.substr(69,4),16);

var nmsg = {
    "payload" : {
     "array" : [ lid,lqi,evkind,ev,v],
     "json"  : {
                  "LID": lid,
                  "LQI":lqi,
                  "KIND":evkind,
                  "EVENT":ev, 
                  "VOLTAGE":v
               }
    }
};

return nmsg; 
このようにMODBUS用の配列

payload.array

とINFLUXDBへ流す用のJSON形式

payload.json

を生成して、changeノードで payloadへ変換して流し込んでいます。
もっといい方法あったら、どなたか教授ください。
 
MODBUSに書いておくと、OpenPLCからデータを拾えますので、ラダーもしくはST言語で処理を書きます。
INFLUXDBへは可視化の為に流しておきます。
下準備ができましたので、この後はOpenPLC側を考えます。
処理結果はまたNodeRedへ戻すのですが、OpenPLCを活用する実験としてやっています。
今回の処理ははっきり言って、NodeRedで全部処理できますが
そこは研究ということで。
 
ではでは