Enterprise gateway internet connected speed

Is there a way to test the download/upload speed on the gateway. For example I"m connecting via the esim capability and want to test the actual speed like the speedtest.com

I know in the gateway settings it shows the strengh, but doesn’t show actual speed.

My concern is that the cell speed is impacting the performance to the MQTT broker.

Can you provide some info on the cellular antennae that is provided?

I’m using this node configuration and it’s responding back that the performance on cellular is .059Mbps download speed. Would getting a high gain antennae work faster?

Even on wifi I’m only getting 2Mbps download speed, do you think this is an antennae issue?

[
{
“id”: “cellular_status_flow”,
“type”: “tab”,
“label”: “Cellular Diagnostics”,
“disabled”: false,
“info”: “Monitor cellular connection quality and performance”
},
{
“id”: “inject_check”,
“type”: “inject”,
“z”: “cellular_status_flow”,
“name”: “Check every 30s”,
“props”: [{“p”: “payload”}],
“repeat”: “30”,
“crontab”: “”,
“once”: true,
“onceDelay”: 0.1,
“topic”: “”,
“payload”: “”,
“payloadType”: “date”,
“x”: 140,
“y”: 100,
“wires”: [[“exec_signal_check”]]
},
{
“id”: “exec_signal_check”,
“type”: “exec”,
“z”: “cellular_status_flow”,
“command”: “cat /sys/class/net/wwan0/operstate && echo ‘—’ && ip addr show wwan0 && echo ‘—’ && cat /proc/net/dev | grep wwan0”,
“addpay”: false,
“append”: “”,
“useSpawn”: “false”,
“timer”: “”,
“oldrc”: false,
“name”: “Check Interface”,
“x”: 360,
“y”: 100,
“wires”: [[“parse_status”], , ]
},
{
“id”: “parse_status”,
“type”: “function”,
“z”: “cellular_status_flow”,
“name”: “Parse Connection Info”,
“func”: “const output = msg.payload;\nconst timestamp = new Date().toISOString();\n\nmsg.payload = {\n timestamp: timestamp,\n raw_output: output,\n interface_up: output.includes(‘up’),\n has_ip: output.includes('inet ')\n};\n\nreturn msg;”,
“outputs”: 1,
“noerr”: 0,
“x”: 580,
“y”: 100,
“wires”: [[“debug_status”]]
},
{
“id”: “debug_status”,
“type”: “debug”,
“z”: “cellular_status_flow”,
“name”: “Connection Status”,
“active”: true,
“tosidebar”: true,
“console”: false,
“tostatus”: false,
“complete”: “payload”,
“targetType”: “msg”,
“x”: 800,
“y”: 100,
“wires”:
},
{
“id”: “inject_speed_test”,
“type”: “inject”,
“z”: “cellular_status_flow”,
“name”: “Run Speed Test”,
“props”: [{“p”: “payload”}],
“repeat”: “”,
“crontab”: “”,
“once”: false,
“onceDelay”: 0.1,
“topic”: “”,
“payload”: “”,
“payloadType”: “date”,
“x”: 140,
“y”: 200,
“wires”: [[“exec_speed_test”]]
},
{
“id”: “exec_speed_test”,
“type”: “exec”,
“z”: “cellular_status_flow”,
“command”: “curl -o /dev/null -s -w ‘Download Speed Test:\nTime: %{time_total}s\nSpeed: %{speed_download} bytes/sec\n’ http://speedtest.tele2.net/1MB.zip”,
“addpay”: false,
“append”: “”,
“useSpawn”: “false”,
“timer”: “”,
“oldrc”: false,
“name”: “Speed Test (1MB)”,
“x”: 370,
“y”: 200,
“wires”: [[“debug_speed”], , ]
},
{
“id”: “debug_speed”,
“type”: “debug”,
“z”: “cellular_status_flow”,
“name”: “Speed Results”,
“active”: true,
“tosidebar”: true,
“console”: false,
“tostatus”: false,
“complete”: “payload”,
“targetType”: “msg”,
“x”: 600,
“y”: 200,
“wires”:
},
{
“id”: “inject_ping_test”,
“type”: “inject”,
“z”: “cellular_status_flow”,
“name”: “Ping AWS”,
“props”: [{“p”: “payload”}],
“repeat”: “60”,
“crontab”: “”,
“once”: true,
“onceDelay”: 0.1,
“topic”: “”,
“payload”: “”,
“payloadType”: “date”,
“x”: 130,
“y”: 300,
“wires”: [[“exec_ping”]]
},
{
“id”: “exec_ping”,
“type”: “exec”,
“z”: “cellular_status_flow”,
“command”: “ping -c 5 -W 3 8.8.8.8 && echo ‘—AWS—’ && ping -c 3 -W 3 YOUR_AWS_ENDPOINT_HERE”,
“addpay”: false,
“append”: “”,
“useSpawn”: “false”,
“timer”: “”,
“oldrc”: false,
“name”: “Ping Test”,
“x”: 340,
“y”: 300,
“wires”: [[“parse_ping”], , [“debug_ping_error”]]
},
{
“id”: “parse_ping”,
“type”: “function”,
“z”: “cellular_status_flow”,
“name”: “Parse Ping Stats”,
“func”: “const output = msg.payload;\nconst lines = output.split(‘\n’);\n\nlet googlePing = null;\nlet awsPing = null;\nlet currentSection = ‘google’;\n\nfor (let line of lines) {\n if (line.includes(‘—AWS—’)) {\n currentSection = ‘aws’;\n continue;\n }\n \n const match = line.match(/min\/avg\/max\/mdev = ([0-9.]+)\/([0-9.]+)\/([0-9.]+)\/([0-9.]+)/);\n if (match) {\n const stats = {\n min: parseFloat(match[1]),\n avg: parseFloat(match[2]),\n max: parseFloat(match[3]),\n mdev: parseFloat(match[4])\n };\n \n if (currentSection === ‘google’) {\n googlePing = stats;\n } else {\n awsPing = stats;\n }\n }\n}\n\nmsg.payload = {\n timestamp: new Date().toISOString(),\n google: googlePing,\n aws: awsPing,\n raw: output\n};\n\nreturn msg;”,
“outputs”: 1,
“noerr”: 0,
“x”: 550,
“y”: 300,
“wires”: [[“debug_ping_parsed”]]
},
{
“id”: “debug_ping_parsed”,
“type”: “debug”,
“z”: “cellular_status_flow”,
“name”: “Ping Stats”,
“active”: true,
“tosidebar”: true,
“console”: false,
“tostatus”: false,
“complete”: “payload”,
“targetType”: “msg”,
“x”: 760,
“y”: 300,
“wires”:
},
{
“id”: “debug_ping_error”,
“type”: “debug”,
“z”: “cellular_status_flow”,
“name”: “Ping Errors”,
“active”: true,
“tosidebar”: true,
“console”: false,
“tostatus”: false,
“complete”: “payload”,
“targetType”: “msg”,
“x”: 560,
“y”: 360,
“wires”:
}
]