Posts: 1,277
Threads: 105
Joined: Mar 2016
Reputation:
79
2017-05-29, 02:47 PM
(This post was last modified: 2017-05-29, 02:54 PM by PaddyB.)
I have a BMP180 working, at the moment the NMEA generator makes an NMEA sentance which opencpn dashboard can read-
$OCMDA,,,1.018,B,22.3,,,,,,,,,,,,,,,*3D
What I want to do is have the logbook konni to automatically record pressure as well - do do this apparently it will look for a sentence like..
$WIMDA,30,I,1.02,B,10.1,C,,C,,,,C,158.69,T,,M,3.89 ,N,2,M*37
So -
How do I get a data feed created in node-red to be seen by openplotter so I can make a new nmea sentence? I can get node-red to see a udp feed it's created itself to be seen by node-red but can't get it into openplotter.
Or is there a way for force the nmea generator to write a sentence like$WIMDA,.... instead of $OCMDA,,,1.018,B,22.3,,,,,,,,,,,,,,,*3D ?
I'd like to get node-red working just to know how
TIA
Posts: 287
Threads: 44
Joined: Mar 2016
Reputation:
5
2017-05-29, 03:44 PM
(This post was last modified: 2017-05-29, 03:49 PM by SkipperEarly.)
Strange! - at my install its exactly opposite!
I get a OCXDR sentence generated which is not shown in the ocpn dashboard, would need the OCMDA - tried to use NMEA converter but gave at the end up as its shown correctly in node-red.
but would also like to use the Konni-logbook with automatic airpressure setting. - I always thought as the dashboard cant show the pressure so the konni will not get it. - but what you observed is totally strange.
BTW - this konni-logbook is really great but would be even better if it is not embedded into ocpn but a separate program in OP as it could then be extended to record automatically also other measures which have nothing to do with ocpn (e.g engine temp, water or fuel levels etc )
just my 2cent!
below the code of my node-red showing pressure and temperature:
[{"id":"e5c38364.12994","type":"websocket in","z":"f471eda8.b7901","name":"","server":"e4c90bec.5fa188","client":"","x":134.25,"y":39,"wires":[["451e867a.4de5e8"]]},{"id":"451e867a.4de5e8","type":"json","z":"f471eda8.b7901","name":"","x":55,"y":105.00000476837158,"wires":[["a468cc97.41c4d","e184c036.78eb4"]]},{"id":"a468cc97.41c4d","type":"jsonpath","z":"f471eda8.b7901","expression":"$.updates..values[?(@.path==\"environment.outside.pressure\")]..value","split":true,"name":"environment.outside.pressure","x":295.00000762939453,"y":105.25000381469727,"wires":[["12298bf.d0d1974","7f7a4106.19ebd"]]},{"id":"e184c036.78eb4","type":"jsonpath","z":"f471eda8.b7901","expression":"$.updates..values[?(@.path==\"environment.outside.temperature\")]..value","split":true,"name":"environment.outside.temperature","x":304.25000762939453,"y":275.5000057220459,"wires":[["21df329f.e12cee","1663880c.4e0a88"]]},{"id":"12298bf.d0d1974","type":"delay","z":"f471eda8.b7901","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"minute","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":278.75,"y":175.25,"wires":[["2731bba2.40ab64"]]},{"id":"1663880c.4e0a88","type":"delay","z":"f471eda8.b7901","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"minute","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"x":273.25,"y":351.5,"wires":[["716908ce.c5e2a8"]]},{"id":"2731bba2.40ab64","type":"function","z":"f471eda8.b7901","name":"Convert to hPa","func":"msg.payload = msg.payload /100 ;\nmsg.payload = msg.payload.toFixed(2);\nreturn msg;","outputs":1,"noerr":0,"x":460.75,"y":177,"wires":[["1ac22cae.ef1e53"]]},{"id":"716908ce.c5e2a8","type":"function","z":"f471eda8.b7901","name":"convert to C","func":"msg.payload = msg.payload -272.15 ;\nmsg.payload = msg.payload.toFixed(2);\nreturn msg;","outputs":1,"noerr":0,"x":448.25,"y":352.5,"wires":[["402d52b1.9012ec"]]},{"id":"1ac22cae.ef1e53","type":"ui_chart","z":"f471eda8.b7901","name":"","group":"8dd292.ec172d7","order":1,"width":"0","height":"0","label":"Surface Pressure (hPa)","chartType":"line","legend":"false","xformat":"HH:mm","interpolate":"linear","nodata":"","ymin":"","ymax":"","removeOlder":"72","removeOlderPoints":"","removeOlderUnit":"3600","cutout":"","colors":["#ffff00","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"x":651,"y":170,"wires":[["2516898a.615516"],[]]},{"id":"301e5b12.5b5234","type":"ui_text","z":"f471eda8.b7901","group":"8dd292.ec172d7","order":2,"width":"0","height":"0","name":"current pressure (hPa)","label":"current pressure","format":"{{msg.payload | number:0}} hPa","layout":"row-spread","x":715.2500152587891,"y":102.50000286102295,"wires":[]},{"id":"d5a4d076.9693f","type":"ui_text","z":"f471eda8.b7901","group":"312485dc.fe0b0a","order":4,"width":"0","height":"0","name":"current temperature ©","label":"current temperature","format":"{{msg.payload | number:1}} °","layout":"row-spread","x":716.7500152587891,"y":278.50000381469727,"wires":[]},{"id":"402d52b1.9012ec","type":"ui_chart","z":"f471eda8.b7901","name":"","group":"312485dc.fe0b0a","order":3,"width":0,"height":0,"label":"Temperature ©","chartType":"line","legend":"false","xformat":"HH:mm","interpolate":"basis","nodata":"","ymin":"","ymax":"","removeOlder":"72","removeOlderPoints":"","removeOlderUnit":"3600","cutout":"","colors":["#ffff00","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"x":647,"y":350.75,"wires":[["dcf50a07.943a98"],[]]},{"id":"2516898a.615516","type":"file","z":"f471eda8.b7901","name":"Chart dump","filename":"/home/pi/.ds-charts/pressure.dump","appendNewline":true,"createDir":true,"overwriteFile":"true","x":750.75,"y":205.25,"wires":[]},{"id":"3b896c8.024a794","type":"json","z":"f471eda8.b7901","name":"","x":497.5,"y":428.25,"wires":[["1ac22cae.ef1e53"]]},{"id":"dcf50a07.943a98","type":"file","z":"f471eda8.b7901","name":"Chart dump","filename":"/home/pi/.ds-charts/temperature.dump","appendNewline":true,"createDir":true,"overwriteFile":"true","x":757.25,"y":392.75,"wires":[]},{"id":"710d185d.82de18","type":"file in","z":"f471eda8.b7901","name":"Chart dump pres","filename":"/home/pi/.ds-charts/pressure.dump","format":"utf8","x":318.25000762939453,"y":429,"wires":[["3b896c8.024a794"]]},{"id":"57473e88.b056f","type":"inject","z":"f471eda8.b7901","name":"Startup Pressure","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"x":101.75,"y":432.75,"wires":[["710d185d.82de18"]]},{"id":"c1b1d297.1468f","type":"inject","z":"f471eda8.b7901","name":"Startup Temp","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"x":93,"y":477,"wires":[["a743378e.6513c8"]]},{"id":"a743378e.6513c8","type":"file in","z":"f471eda8.b7901","name":"Chart dump temp","filename":"/home/pi/.ds-charts/temperature.dump","format":"utf8","x":315,"y":478,"wires":[["96369024.2516a"]]},{"id":"96369024.2516a","type":"json","z":"f471eda8.b7901","name":"","x":501,"y":474,"wires":[["402d52b1.9012ec"]]},{"id":"7f7a4106.19ebd","type":"function","z":"f471eda8.b7901","name":"Convert to hPa","func":"msg.payload = msg.payload /100 ;\nmsg.payload = msg.payload.toFixed(2);\nreturn msg;","outputs":1,"noerr":0,"x":460,"y":147,"wires":[["301e5b12.5b5234"]]},{"id":"21df329f.e12cee","type":"function","z":"f471eda8.b7901","name":"convert to C","func":"msg.payload = msg.payload -272.15 ;\nmsg.payload = msg.payload.toFixed(2);\nreturn msg;","outputs":1,"noerr":0,"x":449,"y":323,"wires":[["d5a4d076.9693f"]]},{"id":"e4c90bec.5fa188","type":"websocket-listener","z":"","path":"ws://localhost:3000/signalk/v1/stream","wholemsg":"false"},{"id":"8dd292.ec172d7","type":"ui_group","z":"","name":"Pressure","tab":"b2f9c8f1.cf11b8","disp":false,"width":"6"},{"id":"312485dc.fe0b0a","type":"ui_group","z":"","name":"Temperature","tab":"b2f9c8f1.cf11b8","order":2,"disp":false,"width":"6"},{"id":"b2f9c8f1.cf11b8","type":"ui_tab","z":"","name":"Environment","icon":"dashboard"}]
Posts: 1,277
Threads: 105
Joined: Mar 2016
Reputation:
79
(2017-05-29, 03:44 PM)SkipperEarly Wrote: Strange! - at my install its exactly opposite!
I get a OCXDR sentence generated which is not shown in the ocpn dashboard, would need the OCMDA - tried to use NMEA converter but gave at the end up as its shown correctly in node-red.
but would also like to use the Konni-logbook with automatic airpressure setting. - I always thought as the dashboard cant show the pressure so the konni will not get it. - but what you observed is totally strange. This is what I put into the nmea generator to get an nmea sentence which the opencpn dashboard understands, just tried it with your node-red flow minus the file saving (Thanx! Saves me together one : and it seems to work just fine. Having data all on the same screen with opencpn is very handy under way.
Quote:BTW - this konni-logbook is really great but would be even better if it is not embedded into ocpn but a separate program in OP as it could then be extended to record automatically also other measures which have nothing to do with ocpn (e.g engine temp, water or fuel levels etc )
Very unlikely, the konni logbook is written as a plugin for opencpn, to stand alone it would mean pretty much starting from scratch. But hope on the horizon , looks like Sailoog has something in his far reaching sights : I've been using RDDtools to log data which seems like a very good database for time based data but bit of a run around to get it to do things.
Posts: 3,074
Threads: 64
Joined: Mar 2016
Reputation:
297
PaddyB, if opencpn digest $OCMDA sentences, it must also digest $WIMDA. 2 first characters do not define the sentence type, that is the talker ID. Maybe the plugin do not support MDA sentences. Plugins are independent from opencpn core and they support different sentences.
Very important info: https://opencpn.org/wiki/dokuwiki/doku.p..._sentences
Definitely we need a data logging tool on OP core...
Posts: 1,277
Threads: 105
Joined: Mar 2016
Reputation:
79
(2017-05-30, 05:58 PM)Sailoog Wrote: PaddyB, if opencpn digest $OCMDA sentences, it must also digest $WIMDA. 2 first characters do not define the sentence type, that is the talker ID. Maybe the plugin do not support MDA sentences. Plugins are independent from opencpn core and they support different sentences.
Very important info: https://opencpn.org/wiki/dokuwiki/doku.p..._sentences
Definitely we need a data logging tool on OP core...
I think there's something a bit odd with the logbook konni, I've had it working before with WIMDA sentence but not a IIMDA sentence exactly the same,,,
http://www.cruisersforum.com/forums/f129...ost2037644
The plugin says something about it it preferences:
Can't get it working now , and it crashes on a win10 laptop when trying to OK after selecting that box.
Anyway, I think it's more an opencpn question rather than openplotter.
Also failed completely trying to send anything to kplex/openplotter from node-red, tried virtual com ports with socat in a linux terminal, which would show up as a dev/pts/3 device and stream data looking at cat but nothing from the nmea diagnostic.
WOW - from sadness to joy! Just double checked everything, changed the SK-base-d.py file so it outputs WIMDA sentence from nmea generator instead of OC and it works!!
Weird!
Posts: 1,277
Threads: 105
Joined: Mar 2016
Reputation:
79
OK, sailoog - after some head scratching I can now get nmea messages into kplex from node red. So what seems to happen is.... The sentence created by the nmea generator from a BMP180 sensor $OC....... gets seen by the Opencn dashboard but not the logbook. This sentence created by node red gets recognised by the konni logboog and inserted when a new line is created..
"$WIMDA,30,I,1.02,B,10.1,C,,C,,,,C,158.69,T,,M,3.89 ,N,2,M*17↵"
Strange but true...
One day the world will all use signalk and be a better place
Posts: 3,074
Threads: 64
Joined: Mar 2016
Reputation:
297
really weird, do you mean that logbook only accept MDA sentences from one talker???
We need to keep OC as talker for NMEA sentences generated by some tools like calculation or NMEA generator because we need to filter them. If we do not filter them it could be possible to create dangerous loops.
Good work with node red.
Posts: 287
Threads: 44
Joined: Mar 2016
Reputation:
5
@PaddyB can you please share the node-red code - thanks
have also raised a bug/feature report on ocpn logbook tracker as FS#2233 - pi logbook NMEA input,
suggest everyone votes for it then it may get attention to the ocpn developers
Posts: 1,277
Threads: 105
Joined: Mar 2016
Reputation:
79
2017-06-01, 08:42 AM
(This post was last modified: 2017-06-01, 08:49 AM by PaddyB.)
(2017-05-31, 07:44 PM)SkipperEarly Wrote: @PaddyB can you please share the node-red code - thanks
have also raised a bug/feature report on ocpn logbook tracker as FS#2233 - pi logbook NMEA input,
suggest everyone votes for it then it may get attention to the ocpn developers
Voted , good call .
Node red to convert "$OCMDA,30.06,I,1.018,B,20.2,C,,,,,,,,,,,,,,*1F" into "$WIMDA,30.06,I,1.018,B,20.2,C,,,,,,,,,,,,,,*d"
This has it's own kplex entries - in-10.10.10.1:10108 and out-127.0.0.1:10112. Maybe not necessary, I don't fully understand the inner workings of UDP/TCP yet.
Code: [
{
"id": "a40d315e.6d623",
"type": "udp in",
"z": "dcf0a43.0c79158",
"name": "",
"iface": "",
"port": "10112",
"ipv": "udp4",
"multicast": "false",
"group": "",
"datatype": "utf8",
"x": 200,
"y": 500,
"wires": [
[
"983684db.178fa8",
"4bdefe26.a6557"
]
]
},
{
"id": "8f7e9341.ce0e1",
"type": "debug",
"z": "dcf0a43.0c79158",
"name": "",
"active": false,
"console": "false",
"complete": "false",
"x": 1090,
"y": 500,
"wires": []
},
{
"id": "4bdefe26.a6557",
"type": "debug",
"z": "dcf0a43.0c79158",
"name": "",
"active": false,
"console": "false",
"complete": "false",
"x": 390,
"y": 600,
"wires": []
},
{
"id": "983684db.178fa8",
"type": "switch",
"z": "dcf0a43.0c79158",
"name": "Filter just pressure",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "regex",
"v": "OCMDA*",
"vt": "str",
"case": true
}
],
"checkall": "true",
"outputs": 1,
"x": 430,
"y": 520,
"wires": [
[
"85be98e1.ebdaf8"
]
]
},
{
"id": "85be98e1.ebdaf8",
"type": "function",
"z": "dcf0a43.0c79158",
"name": " '$OC\" to\"$WI\"",
"func": "var nmeaFull=msg.payload;\n\nvar nmea=nmeaFull.substring(6 ); //\nnmea = '$WIMDA' + nmea;\n\n\nmsg.payload = nmea;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 610,
"y": 520,
"wires": [
[
"15037269.71db2e"
]
]
},
{
"id": "f276f15e.2e3c6",
"type": "udp out",
"z": "dcf0a43.0c79158",
"name": "",
"addr": "10.10.10.1",
"iface": "",
"port": "10108",
"ipv": "udp4",
"outport": "",
"base64": false,
"multicast": "false",
"x": 1120,
"y": 560,
"wires": []
},
{
"id": "5d7d539b.4836dc",
"type": "function",
"z": "dcf0a43.0c79158",
"name": "calc checksum",
"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;",
"outputs": 1,
"noerr": 0,
"x": 840,
"y": 600,
"wires": [
[
"8f7e9341.ce0e1",
"f276f15e.2e3c6"
]
]
},
{
"id": "15037269.71db2e",
"type": "function",
"z": "dcf0a43.0c79158",
"name": "Strip front and back",
"func": "var nmeaFull=msg.payload;\n\nvar nmeaStripped=nmeaFull.substring(1, nmeaFull.indexOf(\"*\")); //cut of the leading \"$\" and the bad checksum\nmsg.payload = nmeaStripped;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"x": 820,
"y": 500,
"wires": [
[
"5d7d539b.4836dc"
]
]
}
]
|