Node-REDのHowTo(その3)

Node-REDのメモ TCP通信編

Node-REDでTCP通信操作をするときの設定手順のメモ。
鶏頭で忘れっぽいのでメモ。

Node-REDは起動済みでブラウザで接続済みであるものとします。

UDPで送信

UDPで受信

フローの例


[
    {
        "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": []
    }
]
 

HTTPでREST API

HTTP入力ノードの作成

レスポンス生成ノードの作成

ここでは、簡単にfunctionノードで固定文字列を返すものを作っています。

msg.payload = "<h1> ぼ~っと生きてんじゃね~よ! </H1>";
return msg;

HTTP出力ノードの作成

入力、レスポンス生成、出力を接続

ブラウザでアクセス接続

フローの例


[
    {
        "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": []
    }
]

Websocketでデータを送受信

テストツールのインストール

ここではテストツールにwscatを使うこととします。
wscat は 以下のコマンドでインストールできます。

sudo npm install -g wscat

Websocketでデータ送信(クライアント)

クライアントとして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でデータ送信(サーバ)

サーバとして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でデータを受信(クライアント)

クライアントとして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でデータを受信(サーバ)

サーバとして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"
    }
]