LoginSignup
2
0

More than 3 years have passed since last update.

Node-REDのwebsocketノードでハマった話

Last updated at Posted at 2020-02-24

Raspberry Pi上で起動させたNode-REDと、クラウドのwebsocketサーバーとの通信でハマった出来事およびその解決方法を備忘録も兼ねてこちらに記します。
こちらについてはネットを調べても解決方法があまり多くは出てこなかったので、同じようなことで悩まれた方がいたら見ていただけますと幸いです。
※2/25追記
この件の原因については、websocket outノードのヘルプに理由が書かれておりました。。
灯台元ぐらし。。

やりたかったこと

クラウドにあるwebsocketサーバーからのリクエストを、クライアントとなるRaspberry Pi上のNode-REDで受信し、その内容の一部と付加したいデータを組み合わせたデータを生成、レスポンスとしてサーバーに返したい。

■ノード配置イメージ
Web 1920 – 1.png

■websocket in/outプロパティ設定
スクリーンショット 2020-02-24 22.06.35.png

問題

websocket inノードからの値は問題なくfunctionノードに渡っているものの、なぜかwebsocket outノードまで流れていきませんでした。
しかし、functionノードにInjectノードを接続しフローを作って実行させてみると、問題なくwebsocket outノードが機能している。。この違いは何。。。
zu2.png

原因と解決方法

websocket inおよびInjectノードからのフローにおいて、functionノードから出力されるペイロードのデータに違いはありませんでした。
結論として問題はmsgオブジェクト自体にありました。

functionノードにDebugノードを繋ぎ、ログ出力対象をmsgオブジェクト全体にしてwebsocket inからのフローでログを確認すると、"_session"というパラメーターが"payload"と"_msgid"以外に付与されていることに気がつきました。
(中身の"type"プロパティより、websocketノード関連のプロパティであることは明白ですね)

■Debugノード出力結果(websocket inからのフロー)
スクリーンショット 2020-02-24 22.05.20.png

もしやと思い、この"_session"パラメーターをchangeノードで削除してみました。

■変更後ノード配置イメージ
スクリーンショット 2020-02-24 23.13.41.png
■changeノードプロパティ
スクリーンショット 2020-02-24 23.12.48.png

その結果、問題なくサーバー側へデータを送信することができました。

この"_session"パラメータの存在についてですが、
・ループ防止の観点でセッション情報がmsgオブジェクトに付与されている?
・そもそも目的としていた動作をwebsocket in/outノードで行うこと自体が主流ではない?
等考えられますが、ひとまず目的の動作ができているので、今は良しといたします。。。

(2/25追記)
アドバイスいただきwebsocket outノードのヘルプを確認したところ本件について記載が載っておりました。
スクリーンショット 2020-02-25 0.51.25.png
「WebSocket Inノードが生成したメッセージをブロードキャストしたい場合には、フロー中でmsg._sessionプロパティを削除します。」
。。。バッチリ書いてある。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0