Node-REDのメモ TCP通信編
Node-REDでTCP通信操作をするときの設定手順のメモ。
鶏頭で忘れっぽいのでメモ。
Node-REDは起動済みでブラウザで接続済みであるものとします。
[
{
"id": "2506be7d.1b5332",
"type": "tab",
"label": "UDP",
"disabled": false,
"info": ""
},
{
"id": "44364ec0.0b59b8",
"type": "udp out",
"z": "2506be7d.1b5332",
"name": "",
"addr": "localhost",
"iface": "",
"port": "4000",
"ipv": "udp4",
"outport": "",
"base64": false,
"multicast": "false",
"x": 550,
"y": 80,
"wires": []
},
{
"id": "20cee006.2fee4",
"type": "inject",
"z": "2506be7d.1b5332",
"name": "",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 150,
"y": 80,
"wires": [
[
"44364ec0.0b59b8"
]
]
},
{
"id": "eb875fd8.7aa5f8",
"type": "udp in",
"z": "2506be7d.1b5332",
"name": "",
"iface": "",
"port": "4000",
"ipv": "udp4",
"multicast": "false",
"group": "",
"datatype": "utf8",
"x": 160,
"y": 140,
"wires": [
[
"a6b72636.514e2"
]
]
},
{
"id": "a6b72636.514e2",
"type": "debug",
"z": "2506be7d.1b5332",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 520,
"y": 140,
"wires": []
}
]
ここでは、簡単にfunctionノードで固定文字列を返すものを作っています。
~/.node-red/lib/functions/
に指定したフォルダとファイル名で保存されるmsg.payload = "<h1> ぼ~っと生きてんじゃね~よ! </H1>";
return msg;
[
{
"id": "7508e635.c8bf48",
"type": "tab",
"label": "HTTP_REST",
"disabled": false,
"info": ""
},
{
"id": "c7938d8a.3ae9d",
"type": "http in",
"z": "7508e635.c8bf48",
"name": "",
"url": "/rest_api_1",
"method": "get",
"upload": false,
"swaggerDoc": "",
"x": 160,
"y": 60,
"wires": [
[
"fb01d5fd.b76918",
"86c0f820.b0a56"
]
]
},
{
"id": "fb01d5fd.b76918",
"type": "function",
"z": "7508e635.c8bf48",
"name": "ぼ~っと生きてんじゃね~よ!",
"func": "msg.payload = \"<h1> ぼ~っと生きてんじゃね~よ! </H1>\";\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"x": 430,
"y": 60,
"wires": [
[
"8d3518af.f9da7",
"86c0f820.b0a56"
]
]
},
{
"id": "8d3518af.f9da7",
"type": "http response",
"z": "7508e635.c8bf48",
"name": "",
"statusCode": "",
"headers": {},
"x": 690,
"y": 60,
"wires": []
},
{
"id": "86c0f820.b0a56",
"type": "debug",
"z": "7508e635.c8bf48",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 700,
"y": 120,
"wires": []
}
]
ここではテストツールにwscatを使うこととします。
wscat は 以下のコマンドでインストールできます。
sudo npm install -g wscat
クライアントとしてWebsocketでデータを送信してみます
あらかじめ、ターミナル or コンソールで以下のコマンドを実行します。 以下の場合、上記設定例にあわせてマシン名PiDev25.localのマシンでポート番号5000で待ち受けしています。
wscat --listen 5000
Node-RED側で Websocketの送信をトリガするとwscatの表示に送信したデータが表示されます。
以下の表示例でデータが受信できていることが確認できます。
listening on port 5000 (press CTRL+C to quit)
client connected
< 0
< 1
< true
< false
< 文字列
< {"data1":0,"data2":1,"data3":"data"}
wscatを終了するのはCTRL-Cを入力します。
[
{
"id": "75e44664.73e018",
"type": "tab",
"label": "Websocket_send",
"disabled": false,
"info": ""
},
{
"id": "49b725b6.0e0934",
"type": "websocket out",
"z": "75e44664.73e018",
"name": "",
"server": "",
"client": "99ad88ce.8bcf7",
"x": 600,
"y": 40,
"wires": []
},
{
"id": "762ccf62.73a48",
"type": "inject",
"z": "75e44664.73e018",
"name": "",
"topic": "",
"payload": "0",
"payloadType": "num",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 40,
"wires": [
[
"49b725b6.0e0934"
]
]
},
{
"id": "fe2498d8.71c17",
"type": "inject",
"z": "75e44664.73e018",
"name": "",
"topic": "",
"payload": "1",
"payloadType": "num",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 80,
"wires": [
[
"49b725b6.0e0934"
]
]
},
{
"id": "47ef3c99.d6eefc",
"type": "inject",
"z": "75e44664.73e018",
"name": "",
"topic": "",
"payload": "true",
"payloadType": "bool",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 120,
"wires": [
[
"49b725b6.0e0934"
]
]
},
{
"id": "f97b4d60.afc278",
"type": "inject",
"z": "75e44664.73e018",
"name": "",
"topic": "",
"payload": "false",
"payloadType": "bool",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 160,
"wires": [
[
"49b725b6.0e0934"
]
]
},
{
"id": "6d15d519.6289ec",
"type": "inject",
"z": "75e44664.73e018",
"name": "",
"topic": "",
"payload": "文字列",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 200,
"wires": [
[
"49b725b6.0e0934"
]
]
},
{
"id": "87c94e6f.db3458",
"type": "inject",
"z": "75e44664.73e018",
"name": "オブジェクト",
"topic": "",
"payload": "{\"data1\":0,\"data2\":1,\"data3\":\"data\"}",
"payloadType": "json",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 110,
"y": 240,
"wires": [
[
"49b725b6.0e0934",
"e7c2219c.07acf8"
]
]
},
{
"id": "175e465.15aaa3a",
"type": "inject",
"z": "75e44664.73e018",
"name": "バッファ",
"topic": "",
"payload": "[0,1,2,3]",
"payloadType": "bin",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 120,
"y": 280,
"wires": [
[
"49b725b6.0e0934",
"e7c2219c.07acf8"
]
]
},
{
"id": "e7c2219c.07acf8",
"type": "debug",
"z": "75e44664.73e018",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 520,
"y": 280,
"wires": []
},
{
"id": "99ad88ce.8bcf7",
"type": "websocket-client",
"z": "",
"path": "ws://PiDev25.local:5000/ws/data01",
"tls": "",
"wholemsg": "false"
}
]
サーバとしてWebsocketでデータを送信してみます
ターミナル or コンソールで以下のコマンドを実行します。 以下の場合、サーバのマシン名がPiDev25.local、サーバ側がポート番号1880、パス/ws/wstest1で待ち受けしているものとします。
wscat --connect ws://PiDev25.local:1880/ws/wstest1
Node-RED側で Websocketの送信をトリガするとwscatの表示に送信したデータが表示されます。
以下の表示例でデータが受信できていることが確認できます。
connected (press CTRL+C to quit)
< 0
< 1
< true
< false
< 文字列
< {"data1":0,"data2":1,"data3":"data"}
wscatを終了するのはCTRL-Cを入力します。
[
{
"id": "22d6d63b.99a952",
"type": "tab",
"label": "Websocket_send_server",
"disabled": false,
"info": ""
},
{
"id": "d64e2a6a.27ead8",
"type": "websocket out",
"z": "22d6d63b.99a952",
"name": "",
"server": "d7536de3.b48578",
"client": "",
"x": 520,
"y": 40,
"wires": []
},
{
"id": "79358fcc.5a5a68",
"type": "inject",
"z": "22d6d63b.99a952",
"name": "",
"topic": "",
"payload": "0",
"payloadType": "num",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 40,
"wires": [
[
"d64e2a6a.27ead8"
]
]
},
{
"id": "cd6acb87.0a77",
"type": "inject",
"z": "22d6d63b.99a952",
"name": "",
"topic": "",
"payload": "1",
"payloadType": "num",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 80,
"wires": [
[
"d64e2a6a.27ead8"
]
]
},
{
"id": "7991d417.429124",
"type": "inject",
"z": "22d6d63b.99a952",
"name": "",
"topic": "",
"payload": "true",
"payloadType": "bool",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 120,
"wires": [
[
"d64e2a6a.27ead8"
]
]
},
{
"id": "ee88046b.37b298",
"type": "inject",
"z": "22d6d63b.99a952",
"name": "",
"topic": "",
"payload": "false",
"payloadType": "bool",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 160,
"wires": [
[
"d64e2a6a.27ead8"
]
]
},
{
"id": "7eac2c2e.6fa39c",
"type": "inject",
"z": "22d6d63b.99a952",
"name": "",
"topic": "",
"payload": "文字列",
"payloadType": "str",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 130,
"y": 200,
"wires": [
[
"d64e2a6a.27ead8"
]
]
},
{
"id": "650517e9.5e34a8",
"type": "inject",
"z": "22d6d63b.99a952",
"name": "オブジェクト",
"topic": "",
"payload": "{\"data1\":0,\"data2\":1,\"data3\":\"data\"}",
"payloadType": "json",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 110,
"y": 240,
"wires": [
[
"d64e2a6a.27ead8",
"5871022e.6bbb1c"
]
]
},
{
"id": "d197151e.8b01e",
"type": "inject",
"z": "22d6d63b.99a952",
"name": "バッファ",
"topic": "",
"payload": "[0,1,2,3]",
"payloadType": "bin",
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"x": 120,
"y": 280,
"wires": [
[
"d64e2a6a.27ead8",
"5871022e.6bbb1c"
]
]
},
{
"id": "5871022e.6bbb1c",
"type": "debug",
"z": "22d6d63b.99a952",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 520,
"y": 280,
"wires": []
},
{
"id": "d7536de3.b48578",
"type": "websocket-listener",
"z": "",
"path": "/ws/wstest1",
"wholemsg": "false"
}
]
クライアントとしてWebsocketでデータを受信してみます
ターミナル or コンソールで以下のコマンドを実行します。 以下の場合、上記設定例にあわせてマシン名PiDev25.localのマシンでポート番号5002で待ち受けしています。
wscat --listen 5002
接続されたあと、適当に文字列を入力するとNode-RED側で受信され、メッセージ処理ノードが実行されます。
listening on port 5002 (press CTRL+C to quit)
client connected
> 適当に文字を入力する → Node-REDに送信される
wscatを終了するのはCTRL-Cを入力します。
[
{
"id": "a45bd125.622fb8",
"type": "tab",
"label": "Websocket_recv",
"disabled": false,
"info": ""
},
{
"id": "24a93730.cf2a7",
"type": "websocket in",
"z": "a45bd125.622fb8",
"name": "",
"server": "45ba6028.84fc88",
"client": "",
"x": 220,
"y": 60,
"wires": [
[
"15576052.1536"
]
]
},
{
"id": "15576052.1536",
"type": "debug",
"z": "a45bd125.622fb8",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 630,
"y": 60,
"wires": []
},
{
"id": "45ba6028.84fc88",
"type": "websocket-listener",
"z": "",
"path": "ws://PiDev25.local:5002/ws/wsdata2",
"wholemsg": "false"
}
]
サーバとしてWebsocketでデータを受信してみます
ターミナル or コンソールで以下のコマンドを実行します。 以下の場合、サーバのマシン名がPiDev25.local、サーバ側がポート番号1880、パス/ws/wstest2で待ち受けしているものとします。
wscat --connect ws://PiDev25.local:1880/ws/wsdata2
接続されたあと、適当に文字列を入力するとNode-RED側で受信され、メッセージ処理ノードが実行されます。
connected (press CTRL+C to quit)
> 適当に文字を入力する → Node-REDに送信される
wscatを終了するのはCTRL-Cを入力します。
[
{
"id": "15604b9.9721eb4",
"type": "tab",
"label": "Websocket_recv_server",
"disabled": false,
"info": ""
},
{
"id": "80f59585.469758",
"type": "websocket in",
"z": "15604b9.9721eb4",
"name": "",
"server": "11528a5d.783b0e",
"client": "",
"x": 140,
"y": 60,
"wires": [
[
"f37c8fe9.6307c"
]
]
},
{
"id": "f37c8fe9.6307c",
"type": "debug",
"z": "15604b9.9721eb4",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 630,
"y": 60,
"wires": []
},
{
"id": "11528a5d.783b0e",
"type": "websocket-listener",
"z": "",
"path": "/ws/wsdata2",
"wholemsg": "false"
}
]