This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How fast / reliable is wifi?
#1
This is a copy of post in YBW after some digging around last night - better than I expected Cool

________
Onboard I'm using wifi much more to get at data, gps & ais are hard wired serial/usb adaptors into a rapsberry pi running openplotter. After that it's predominantly an xperia tablet used to access it all, running opencpn and a web page for some other thermometer stuff. 

So last nights project was to see how quick & reliable it is.

Chain of events :-

Lapop running node-red creates a nmea083 sentence - $test,1496480573343*e. Big long number is a unix timestamp, milliseconds since 1970 or something.

This then gets sent out over wifi using UDP, goes to a mobile phone which runs the local wifi network, then it's read by a the Raspberry Pi running openplotter also connected to the mobile over wifi. 

Openplotter uses a program called kplex written by our very own Laika which joins together all the other nmea messages - gps, ais and a couple of temperature/barometer messages. 

It then spits it back out over wifi using TCP, through the mobile and then the laptop reads this and records to a file the time taken and how many sentences which it sent before didn't make it back .

The laptop sends these messages every 0.01 seconds, so 100 messages a second.

Running for a few minutes this morning some results are =>



Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=6mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=6mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=6mS, Lost sentences =425
Code:
Time=17mS, Lost sentences =424
Code:
Time=10mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=6mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=8mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=9mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=6mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=6mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=11mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=4mS, Lost sentences =425
Code:
Time=5mS, Lost sentences =425
Code:
Time=3mS, Lost sentences =425


Last message was number 48272. 

So not bad really, I thought UDP would have been much worse. This is at anchor with no other wifi networks nearby.

So.......... is wifi acceptable for data as opposed to hard wiring? I've had an NMEA wire break before, they are on the small side and a bit vulnerable . 

One caveat before the doom and gloom gents start to predict death and destruction, there must be at least half a dozen gps recievers onboard, plus standalone ais (which hasn't been connected for years but would take 10 mins to sort out) So if the sky falls in on wifi it's not a great catastrophe . [Image: cool.png]
Also, since gps/ais only have 0183 outputs it seems daft to convert that to wifi, they'll remain hardwired. 

Thoughs??





Code:
[    {
[color=#222222][size=medium]        "id": "1a8c0fc.0e7d9f",[/size][/color]
[color=#222222][size=medium]        "type": "debug",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "active": false,[/size][/color]
[color=#222222][size=medium]        "console": "false",[/size][/color]
[color=#222222][size=medium]        "complete": "payload",[/size][/color]
[color=#222222][size=medium]        "x": 670,[/size][/color]
[color=#222222][size=medium]        "y": 240,[/size][/color]
[color=#222222][size=medium]        "wires": [][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "25625a13.c6f476",[/size][/color]
[color=#222222][size=medium]        "type": "switch",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "Filter test",[/size][/color]
[color=#222222][size=medium]        "property": "payload",[/size][/color]
[color=#222222][size=medium]        "propertyType": "msg",[/size][/color]
[color=#222222][size=medium]        "rules": [[/size][/color]
[color=#222222][size=medium]            {[/size][/color]
[color=#222222][size=medium]                "t": "regex",[/size][/color]
[color=#222222][size=medium]                "v": "test*",[/size][/color]
[color=#222222][size=medium]                "vt": "str",[/size][/color]
[color=#222222][size=medium]                "case": true[/size][/color]
[color=#222222][size=medium]            }[/size][/color]
[color=#222222][size=medium]        ],[/size][/color]
[color=#222222][size=medium]        "checkall": "true",[/size][/color]
[color=#222222][size=medium]        "outputs": 1,[/size][/color]
[color=#222222][size=medium]        "x": 340,[/size][/color]
[color=#222222][size=medium]        "y": 240,[/size][/color]
[color=#222222][size=medium]        "wires": [[/size][/color]
[color=#222222][size=medium]            [[/size][/color]
[color=#222222][size=medium]                "a9547564.72c128"[/size][/color]
[color=#222222][size=medium]            ][/size][/color]
[color=#222222][size=medium]        ][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "72625563.796c4c",[/size][/color]
[color=#222222][size=medium]        "type": "udp out",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "addr": "192.168.43.97",[/size][/color]
[color=#222222][size=medium]        "iface": "",[/size][/color]
[color=#222222][size=medium]        "port": "10115",[/size][/color]
[color=#222222][size=medium]        "ipv": "udp4",[/size][/color]
[color=#222222][size=medium]        "outport": "",[/size][/color]
[color=#222222][size=medium]        "base64": false,[/size][/color]
[color=#222222][size=medium]        "multicast": "false",[/size][/color]
[color=#222222][size=medium]        "x": 710,[/size][/color]
[color=#222222][size=medium]        "y": 60,[/size][/color]
[color=#222222][size=medium]        "wires": [][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "c65a4ccb.a8fd1",[/size][/color]
[color=#222222][size=medium]        "type": "inject",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "topic": "",[/size][/color]
[color=#222222][size=medium]        "payload": "",[/size][/color]
[color=#222222][size=medium]        "payloadType": "date",[/size][/color]
[color=#222222][size=medium]        "repeat": "",[/size][/color]
[color=#222222][size=medium]        "crontab": "",[/size][/color]
[color=#222222][size=medium]        "once": false,[/size][/color]
[color=#222222][size=medium]        "x": 120,[/size][/color]
[color=#222222][size=medium]        "y": 100,[/size][/color]
[color=#222222][size=medium]        "wires": [[/size][/color]
[color=#222222][size=medium]            [[/size][/color]
[color=#222222][size=medium]                "547c51f5.cb6f4"[/size][/color]
[color=#222222][size=medium]            ][/size][/color]
[color=#222222][size=medium]        ][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "547c51f5.cb6f4",[/size][/color]
[color=#222222][size=medium]        "type": "function",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "Variables",[/size][/color]
[color=#222222][size=medium]        "func": "// initialise the counter to 0 if it doesn't exist already\nvar count = global.get('count')||0;\ncount += 1;\n// store the value back\nglobal.set('count',count);\n// make it part of the outgoing msg object\nmsg.count = count;\nmsg.payload='test,' + msg.payload;\nreturn msg;",[/size][/color]
[color=#222222][size=medium]        "outputs": 1,[/size][/color]
[color=#222222][size=medium]        "noerr": 0,[/size][/color]
[color=#222222][size=medium]        "x": 300,[/size][/color]
[color=#222222][size=medium]        "y": 100,[/size][/color]
[color=#222222][size=medium]        "wires": [[/size][/color]
[color=#222222][size=medium]            [[/size][/color]
[color=#222222][size=medium]                "f66ff3a1.4e4a4"[/size][/color]
[color=#222222][size=medium]            ][/size][/color]
[color=#222222][size=medium]        ][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "9f07121d.329d1",[/size][/color]
[color=#222222][size=medium]        "type": "debug",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "active": true,[/size][/color]
[color=#222222][size=medium]        "console": "false",[/size][/color]
[color=#222222][size=medium]        "complete": "true",[/size][/color]
[color=#222222][size=medium]        "x": 720,[/size][/color]
[color=#222222][size=medium]        "y": 180,[/size][/color]
[color=#222222][size=medium]        "wires": [][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "f66ff3a1.4e4a4",[/size][/color]
[color=#222222][size=medium]        "type": "function",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "calc checksum",[/size][/color]
[color=#222222][size=medium]        "func": "var nmea = msg.payload;\nvar checksum = 0; \n\nfor(var i = 0; i < nmea.length; i++) { \n  checksum = checksum ^ nmea.charCodeAt(i); \n}\nchecksum = checksum.toString(16);    //convert to hex\nnmea = '$' + nmea + '*' + checksum;  //make the full nmea sentence again\n\nmessage = 'Full message =' + nmea + '\\r\\n' + 'Checksum = ' + checksum ;\n\nmsg.payload = nmea;\nmsg.payload = msg.payload+\"\\r\\n\"\n\n\nreturn msg;",[/size][/color]
[color=#222222][size=medium]        "outputs": 1,[/size][/color]
[color=#222222][size=medium]        "noerr": 0,[/size][/color]
[color=#222222][size=medium]        "x": 480,[/size][/color]
[color=#222222][size=medium]        "y": 100,[/size][/color]
[color=#222222][size=medium]        "wires": [[/size][/color]
[color=#222222][size=medium]            [[/size][/color]
[color=#222222][size=medium]                "72625563.796c4c",[/size][/color]
[color=#222222][size=medium]                "9f07121d.329d1"[/size][/color]
[color=#222222][size=medium]            ][/size][/color]
[color=#222222][size=medium]        ][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "a9547564.72c128",[/size][/color]
[color=#222222][size=medium]        "type": "function",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "func": "// initialise the counter to 0 if it doesn't exist already\n\nvar count = global.get('count');\nvar count2 = global.get('count2')||0;\ncount2 += 1;\n// store the value back\nglobal.set('count2',count2);\n// make it part of the outgoing msg object\nvar countOut = count2 -count;\nmsg.count=countOut;\nvar msgIn=msg.payload;\n\nvar msgOut=msgIn.substring(6);     //\n//msgOut = msgIn;\nvar timetaken = Date.now()- msgOut;\n\nmsg.payload = 'Time=' + timetaken + 'mS' + ', Lost sentences =' + msg.count;\n\nreturn msg;",[/size][/color]
[color=#222222][size=medium]        "outputs": 1,[/size][/color]
[color=#222222][size=medium]        "noerr": 0,[/size][/color]
[color=#222222][size=medium]        "x": 470,[/size][/color]
[color=#222222][size=medium]        "y": 240,[/size][/color]
[color=#222222][size=medium]        "wires": [[/size][/color]
[color=#222222][size=medium]            [[/size][/color]
[color=#222222][size=medium]                "1a8c0fc.0e7d9f",[/size][/color]
[color=#222222][size=medium]                "e5d3de97.1c586"[/size][/color]
[color=#222222][size=medium]            ][/size][/color]
[color=#222222][size=medium]        ][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "65d55ace.f09904",[/size][/color]
[color=#222222][size=medium]        "type": "tcp in",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "server": "client",[/size][/color]
[color=#222222][size=medium]        "host": "192.168.43.97",[/size][/color]
[color=#222222][size=medium]        "port": "10109",[/size][/color]
[color=#222222][size=medium]        "datamode": "stream",[/size][/color]
[color=#222222][size=medium]        "datatype": "utf8",[/size][/color]
[color=#222222][size=medium]        "newline": "\\r\\n",[/size][/color]
[color=#222222][size=medium]        "topic": "",[/size][/color]
[color=#222222][size=medium]        "base64": false,[/size][/color]
[color=#222222][size=medium]        "x": 150,[/size][/color]
[color=#222222][size=medium]        "y": 240,[/size][/color]
[color=#222222][size=medium]        "wires": [[/size][/color]
[color=#222222][size=medium]            [[/size][/color]
[color=#222222][size=medium]                "25625a13.c6f476"[/size][/color]
[color=#222222][size=medium]            ][/size][/color]
[color=#222222][size=medium]        ][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "578a76be.b957f8",[/size][/color]
[color=#222222][size=medium]        "type": "inject",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "topic": "",[/size][/color]
[color=#222222][size=medium]        "payload": "",[/size][/color]
[color=#222222][size=medium]        "payloadType": "date",[/size][/color]
[color=#222222][size=medium]        "repeat": "",[/size][/color]
[color=#222222][size=medium]        "crontab": "",[/size][/color]
[color=#222222][size=medium]        "once": false,[/size][/color]
[color=#222222][size=medium]        "x": 180,[/size][/color]
[color=#222222][size=medium]        "y": 360,[/size][/color]
[color=#222222][size=medium]        "wires": [[/size][/color]
[color=#222222][size=medium]            [[/size][/color]
[color=#222222][size=medium]                "3e0cde76.1fb5b2"[/size][/color]
[color=#222222][size=medium]            ][/size][/color]
[color=#222222][size=medium]        ][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "3e0cde76.1fb5b2",[/size][/color]
[color=#222222][size=medium]        "type": "function",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "func": "var set=0;\nglobal.set('count2',set);\nglobal.set('count',set);\nreturn msg;",[/size][/color]
[color=#222222][size=medium]        "outputs": 1,[/size][/color]
[color=#222222][size=medium]        "noerr": 0,[/size][/color]
[color=#222222][size=medium]        "x": 380,[/size][/color]
[color=#222222][size=medium]        "y": 360,[/size][/color]
[color=#222222][size=medium]        "wires": [[/size][/color]
[color=#222222][size=medium]            [][/size][/color]
[color=#222222][size=medium]        ][/size][/color]
[color=#222222][size=medium]    },[/size][/color]
[color=#222222][size=medium]    {[/size][/color]
[color=#222222][size=medium]        "id": "e5d3de97.1c586",[/size][/color]
[color=#222222][size=medium]        "type": "file",[/size][/color]
[color=#222222][size=medium]        "z": "9917e517.f54cb8",[/size][/color]
[color=#222222][size=medium]        "name": "",[/size][/color]
[color=#222222][size=medium]        "filename": "C:\\Users\\User\\Documents\\test.txt",[/size][/color]
[color=#222222][size=medium]        "appendNewline": true,[/size][/color]
[color=#222222][size=medium]        "createDir": false,[/size][/color]
[color=#222222][size=medium]        "overwriteFile": "false",[/size][/color]
[color=#222222][size=medium]        "x": 710,[/size][/color]
[color=#222222][size=medium]        "y": 300,[/size][/color]
[color=#222222][size=medium]        "wires": [][/size][/color]
[color=#222222][size=medium]    }[/size][/color]
]
Reply
#2
I wouldn't think that WIFI would be much of a problem, as long as signal is good and interference is limited. I'm trying to think of circumstances when there would be a "one time only" critical message that would be sent out - in most cases the originating device is sending the same or similar information repeatedly anyway (think depth, wind speed, gps position, etc.). So, even with UDP not doing error checking, the network would eventually receive a good message.
Reply
#3
Well... some GPIO inputs, MQTT messages or some actions are critical because they are sent just once. To prevent this they have their own signal k input channel.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)