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