おんどとりでIoT その4 node-REDのメッセージ

メッセージの内容

 functionノードでは、プログラムを記述できるのですが、メッセージ自体がどういうものかがわかっていないと、送られてくるメッセージに対して追加や変更ができません。

 メッセージを見るためにはdebugノードを使います。左のノード・パレットから、injectとdebugノードをドラッグ&ドロップで中央部のパレットに置き、線で結びます。最小限の構成です。debugノードをダブルクリックして、msgからcomplete msg objectに変更します。Deployします。

 timestamp(inject)ノードの左のボタンをクリックすると、メッセージが送られ、右のdebugタブにメッセージ全体が表示されます。

 三角印をマウスでクリックすると、整形されてわかりやすく表示できます。

 debugノードをダブルクリックします。complete msg objectからmsg.payloadに変更しDeployします。


 そうすると、メッセージのpayloadだけが表示されます。これがデフォルトの表示で、メッセージ本体になります。表示されている数値は、システムが用意したものと思われます。次は、明示的に、送るメッセージを作ります。

 timestamp(inject)ノードをダブルクリックします。string(文字列)を選びます。

 文字を打ち込みます。

 Deployして、テストの文字列です(inject)の左のボタンを押すと、debug欄にはpayloadの「テストの文字列です」が表示されます。

 debugノードをcomplete msg objectに変更したときの出力は次のようになります。

 injectとdebugノードの間にfunctionノードを入れます。Delpoyして実行しても、前回と同じメッセージが表示されます。

 デフォルトのfunctionノードには、送られてきたメッセージをそのまま戻す、というプログラムが書かれているからです。

 functionノードを変更します。functionノードをダブルクリックして、プログラム・エリアに、1行追加します。

msg.payload = msg.payload + '追加しました。';

 完了を押し、Delpoyします。文字列に追加されました。このように、functionノードは、メッセージに対して加工ができます。プログラム言語はjavascriptです。

 メッセージ本体はpayloadですが、ほかの項目も送ることができます。デフォルトで項目として存在していたtopicは空っぽですが、それに数字を代入します。

 Delpoyして実行すると、送られていることがわかります。

メッセージをsocketプログラムでおんどとりに送る

 functionノードを、下記のプログラムに変更します。

buf = [0xAB,0x01,0x16,0x52,0x0b,0x00,0x01,0x33,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x38,0x00];
msg.payload = new Buffer(buf);
return msg;

 左のノード・パレットからtcp requestを置きます。このノードをダブルクリックし、おんどとりのIPアドレス、ポート、タイムアウトの数字を入れます。

 functionノードからtcp requestへむずび、Delpoyを押し、プログラムを動かします。

 debugエリアには10進で送っているpayloadの値が表示されています。

 ラズパイで、ネットワークのトラフィックを可視化するtcpdumpを動かします。ポートを57172に限定して観測します。

 sudo tcpdump -i eth0 port 57172 -X -vv

 node-REDが動いているラズパイのIPアドレスは192.168.111.50です。おんどとりのIPアドレス192.168.111.52へ「0xAB,0x01,0x16,0x52,0x0b,0x00,0x01,0x33,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x38,0x00」が送られている様子がわかります。その結果、おんどとりからデータが送られてきています。

 tcp requestが受け取ったデータをそのままdebugに表示しました。

 16進に変更するために、functionノードを追加して、下記のプログラムを入れます。

msg.payload= msg.payload.toString('hex');

 16進で温度データが読み出せました。

   01 33 06 13 00 b6 04 b8 04 00 00 00 00 00 00 00 00 00 46 00