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:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Openplotter on RPis
#1
I've been messing around with SignalK for about a year now. I got started for a simple reason... my Yacht Devices NMEA interfaces wouldn't send "Attitude" sentences for "pitch" and "roll/heel" into OpenCPN. I was promised an update for those devices from YD, but that never happened. So I started looking for other solutions and that's when I discovered SignalK. 

I began running SK on my Mac mini, but that required an open Terminal window, which could be accidentally terminated and wasn't persistent over a reboot. My first RPi4-4GB was the answer. I installed it and powered it with a 15w 12volt-to-5v transformer from Amazon, so it runs right of my boat 12 volt panel. I gave it Raspberry 7" touchscreen display and it filled a hole where there had been (I assume) SSB or HAM radio head. It was a perfect fit:
[Image: IMG_3115-scaled.jpg]

I love the data I get from it. I love that it runs off the house battery bank (i.e. no inverter, like for my Mac). I love that I can log into it remotely from my Mac and work on it. Because of all this, I bought a second RPi4-8gb to just run OpenCPN. I now have a network switch and new router, so all my RPi's, Radar, ethernet devices, etc. are all hard-lined into the boat's ethernet network and the router handles the wifi. I selected carefully, so everything is 12 volt and no 120VAC is needed.

On all my wireless devices, I run WilhelmSK. I spent a lot of time maximizing the data I get out of SignalK. I've never before had access to so much data - and have that data derive other data - Fantastic! Here's some screen shots of some of my WSK screens:

[Image: Screen-Shot-2021-03-19-at-10.38.45-AM.png]
Basic start screen with AWA/speed, Time, Outside Temp & Fusion Radio control.

[Image: Screen-Shot-2021-03-19-at-10.36.45-AM.png]
Battery monitoring screen with data fed from a Victron BM702 (already installed in the boat). Added Victron V.E. Direct USB cable and its associated SignalK plugin.

[Image: Screen-Shot-2021-03-19-at-10.36.57-AM.png]
Water depth & tidal information at boat's location using Signalk-Tide-Watch, signalk-airmar-plugin (for transducer off-set), & derived-data Plugins.

[Image: Screen-Shot-2021-03-19-at-11.43.31-AM.png]
Current outside conditions at the boat (on left) and current "reported" observations from the nearest NOAA weather reporting station (based on location) on right (for some reason they aren't sending forecast info today). This panel uses a Ruuvi tag and it's associated SK plugin, derived-data plugin, signalk-barometer-trend plugin, and signalk-noaa-weather plugin.

[Image: Screen-Shot-2021-03-19-at-11.50.13-AM.png]
Interior Observations. Using More Ruuvi Tags, Ruuvi-Tag Plugin, and RPi Monitor Plugin. Notice how little Memory Usage (6%) there is on a 4GB RPi running just the SignalK server.

[Image: Screen-Shot-2021-03-19-at-10.38.02-AM.png]
Sailing data, including Pitch/Roll and an AutoPilot control. 

[Image: Screen-Shot-2021-03-19-at-10.38.10-AM.png]
AutoPilot Navigation pane. No plugins needed for this page. It's all Wilhelm & SignalK. If use OpenCPN to activate a route, data for the rest of the "..." fields would have information if I were underway.

[Image: Screen-Shot-2021-03-19-at-12.09.47-PM.png]
This WilhelmSK pane is Freeboard Chart Plotter plugin with NOAA MBTile Charts loaded (from Signal-Charts plugin). I use OpenCPN on this RPi with Chart Downloader to keep this chart set current, but don't use it for navigation, as stated earlier. It is a minimal version of OpenCPN and I don't run it on this Pi except to update this chart set. Nav Pi with OpenCPN is separate and on its own. The purple dots are other vessels from an AIS overlay are provided by Freeboard. I didn't have to do anything other than make sure my AIS is on and feeding into the N2K network.

Some observations:

Since building this out, I discovered SignalK & OpenCPN (with ALL my charts) were too much of a load on one RPi, so I added a second Pi, which just runs OpenCPN. I suspect this is due to limitations of the SD Card more than the processor. Regardless, I now have two and the first just runs OpenPlotter (SignalK) and serves all the data. It has an RPi4-specific USB hat on it, so the usb interfaces for the VHF radio (NMEA0183), the wireless keyboard (cheap $20 Logitech with trackpad), the Victron Battery Monitor, the TouCAN USB Bus, etc. all have places to directly connect, giving me up to 7 useable USB ports in all. I think I'm using 5 right now.

I use Rusoku's TouCAN Marine as the NMEA2000-to-USB network adapter. I already had this as I was messing around with the TouCAN Plugin on OpenCPN on the Mac. It took a bit of work in Terminal (found a manual which helped greatly) to get this installed, but it's been a fine piece of gear and using can0 seems to be a VERY fast way to get n2k data into SK.

SignalK seems to "buffer" some data. As a result of how OpenCPN reads that data, I get "jumps" of speed in my OCPN track. It might be network latency. I thought it might have been boat roll the first time I noticed it, but I see it does this in the harbor when the boat is moving smoothly. These "jumps" show up in the OCPN track as speed bursts of 20+ knots. My boat maxes out at about 9kts, so I know this is inaccurate and am considering options to make data reporting to OpenCPN more accurate.

I notice I've become MUCH less reliant on one technology, such as the ol' Raymarine chart plotter or JUST the NMEA2000 network. I've used OpenCPN for years now, so that's not much of a stretch, but I don't even look at the Raymarine chart plotter anymore. The only reason it's there is as a "low-level" back-up (redundancy) should something happen to SK and because it has the GPS in it, providing the N2K network with our vessel's position information. It is also a good secondary autopilot control/backup. But other than that, I don't even take the cover off it anymore.

I want to network the old Ford Lehman and had been considering options, such as the Actisense EMU-1. However, that is a pricey piece of gear to add more data into the NMEA2000 network, so I'll soon look for other options to get info straight into SignalK (I'm open to suggestions!). I'm really impressed with how easy Ruuvi tags were to work with, so perhaps other options will be just as easy/helpful for engine monitoring, rather than converting to N2K and then back to SK. I can always send that data back out onto NMEA2000, although I'm not sure why I'd want to...

I messed around with interfacing my Renogy Commander Solar Charge Controller, but had no luck with the srne-to-signalk plug in. It's a challenging thing, because the USB/RS485 device has it's own drivers and they kind of mess up my other stuff when it's plugged in. That cable is "half-duplex," so it doesn't send any info unless something is asking for specific info to begin with, so that is beyond my abilities currently. No luck with that, but that's simply "extra" at this point, as the Victron Battery Monitor does the heavy lifting (Vitron BM702 is another gauge I never look at, but I do check its data on SK often!). 

Did I mention Ruuvi Tags?! Easiest thing I've done with SignalK and WilhelmSK so far. Worked perfectly and not difficult to set up. Although the Ruvvi plugin SK path reads "relativeHumidity." For some of the extra derived-data, I needed to use signalk-path-mapper to change the path from "environment.outside.relativeHumidity" to just "environment.outside.humidity." Once that happened, a whole bunch of additional calculated data was available from other plugins, including wind chill, heat index, barometer trends, etc., etc. I may add a couple extra Ruuvi Tags - one in our freezer (which we don't use much) and one where the diesel heater is to monitor heat levels inside that locker.

Did I mention that I have access to all this data remotely from my phone? I've made iPhone versions of many of these panes. I have a new Netgear router with a LTE cellular modem built in. We are liveaboards, so we have high-speed internet at the dock, but "fall-over" onto cellular when we unplug. In the router, I port-forward port 3000 to Openplotter.local. I just need to know my current IP address and I can access this data from anywhere. I'm often caught showing off my "stuff" at the local boat chandlery. I get made fun of a lot for being to nerdy, but I think they are just jealous.

Future upgrades might include adding SSD drives to the Pis, as the SD chips seem to be rather slow and I worry about read/write integrity on them. Although I used Samsung 128gb chips for both, which are well rated, I understand they don't last forever. Making a backup at some point needs to become a priority, but that'll probably happen right after I lose one...

I should note all this has happened without me adding extra gear. I did add both RPis, a couple of interface cables, and the Ruuvi Tags. The rest was all a matter of interfacing what I already had on board and reworking the existing gear to fit my needs through SignalK. I'd say it's coming along nicely!


If you've read this far, thanks for reading! This is probably more info than needed, but it's "How I did it..."

Steve
Reply
#2
(2021-03-19, 09:39 PM)SCarns Wrote: I've been messing around with SignalK for about a year now. I got started for a simple reason... my Yacht Devices NMEA interfaces wouldn't send "Attitude" sentences for "pitch" and "roll/heel" into OpenCPN. I was promised an update for those devices from YD, but that never happened. So I started looking for other solutions and that's when I discovered SignalK. 

I began running SK on my Mac mini, but that required an open Terminal window, which could be accidentally terminated and wasn't persistent over a reboot. My first RPi4-4GB was the answer. I installed it and powered it with a 15w 12volt-to-5v transformer from Amazon, so it runs right of my boat 12 volt panel. I gave it Raspberry 7" touchscreen display and it filled a hole where there had been (I assume) SSB or HAM radio head. It was a perfect fit:
[Image: IMG_3115-scaled.jpg]

I love the data I get from it. I love that it runs off the house battery bank (i.e. no inverter, like for my Mac). I love that I can log into it remotely from my Mac and work on it. Because of all this, I bought a second RPi4-8gb to just run OpenCPN. I now have a network switch and new router, so all my RPi's, Radar, ethernet devices, etc. are all hard-lined into the boat's ethernet network and the router handles the wifi. I selected carefully, so everything is 12 volt and no 120VAC is needed.

On all my wireless devices, I run WilhelmSK. I spent a lot of time maximizing the data I get out of SignalK. I've never before had access to so much data - and have that data derive other data - Fantastic! Here's some screen shots of some of my WSK screens:

[Image: Screen-Shot-2021-03-19-at-10.38.45-AM.png]
Basic start screen with AWA/speed, Time, Outside Temp & Fusion Radio control.

[Image: Screen-Shot-2021-03-19-at-10.36.45-AM.png]
Battery monitoring screen with data fed from a Victron BM702 (already installed in the boat). Added Victron V.E. Direct USB cable and its associated SignalK plugin.

[Image: Screen-Shot-2021-03-19-at-10.36.57-AM.png]
Water depth & tidal information at boat's location using Signalk-Tide-Watch, signalk-airmar-plugin (for transducer off-set), & derived-data Plugins.

[Image: Screen-Shot-2021-03-19-at-11.43.31-AM.png]
Current outside conditions at the boat (on left) and current "reported" observations from the nearest NOAA weather reporting station (based on location) on right (for some reason they aren't sending forecast info today). This panel uses a Ruuvi tag and it's associated SK plugin, derived-data plugin, signalk-barometer-trend plugin, and signalk-noaa-weather plugin.

[Image: Screen-Shot-2021-03-19-at-11.50.13-AM.png]
Interior Observations. Using More Ruuvi Tags, Ruuvi-Tag Plugin, and RPi Monitor Plugin. Notice how little Memory Usage (6%) there is on a 4GB RPi running just the SignalK server.

[Image: Screen-Shot-2021-03-19-at-10.38.02-AM.png]
Sailing data, including Pitch/Roll and an AutoPilot control. 

[Image: Screen-Shot-2021-03-19-at-10.38.10-AM.png]
AutoPilot Navigation pane. No plugins needed for this page. It's all Wilhelm & SignalK. If use OpenCPN to activate a route, data for the rest of the "..." fields would have information if I were underway.

[Image: Screen-Shot-2021-03-19-at-12.09.47-PM.png]
This WilhelmSK pane is Freeboard Chart Plotter plugin with NOAA MBTile Charts loaded (from Signal-Charts plugin). I use OpenCPN on this RPi with Chart Downloader to keep this chart set current, but don't use it for navigation, as stated earlier. It is a minimal version of OpenCPN and I don't run it on this Pi except to update this chart set. Nav Pi with OpenCPN is separate and on its own. The purple dots are other vessels from an AIS overlay are provided by Freeboard. I didn't have to do anything other than make sure my AIS is on and feeding into the N2K network.

Some observations:

Since building this out, I discovered SignalK & OpenCPN (with ALL my charts) were too much of a load on one RPi, so I added a second Pi, which just runs OpenCPN. I suspect this is due to limitations of the SD Card more than the processor. Regardless, I now have two and the first just runs OpenPlotter (SignalK) and serves all the data. It has an RPi4-specific USB hat on it, so the usb interfaces for the VHF radio (NMEA0183), the wireless keyboard (cheap $20 Logitech with trackpad), the Victron Battery Monitor, the TouCAN USB Bus, etc. all have places to directly connect, giving me up to 7 useable USB ports in all. I think I'm using 5 right now.

I use Rusoku's TouCAN Marine as the NMEA2000-to-USB network adapter. I already had this as I was messing around with the TouCAN Plugin on OpenCPN on the Mac. It took a bit of work in Terminal (found a manual which helped greatly) to get this installed, but it's been a fine piece of gear and using can0 seems to be a VERY fast way to get n2k data into SK.

SignalK seems to "buffer" some data. As a result of how OpenCPN reads that data, I get "jumps" of speed in my OCPN track. It might be network latency. I thought it might have been boat roll the first time I noticed it, but I see it does this in the harbor when the boat is moving smoothly. These "jumps" show up in the OCPN track as speed bursts of 20+ knots. My boat maxes out at about 9kts, so I know this is inaccurate and am considering options to make data reporting to OpenCPN more accurate.

I notice I've become MUCH less reliant on one technology, such as the ol' Raymarine chart plotter or JUST the NMEA2000 network. I've used OpenCPN for years now, so that's not much of a stretch, but I don't even look at the Raymarine chart plotter anymore. The only reason it's there is as a "low-level" back-up (redundancy) should something happen to SK and because it has the GPS in it, providing the N2K network with our vessel's position information. It is also a good secondary autopilot control/backup. But other than that, I don't even take the cover off it anymore.

I want to network the old Ford Lehman and had been considering options, such as the Actisense EMU-1. However, that is a pricey piece of gear to add more data into the NMEA2000 network, so I'll soon look for other options to get info straight into SignalK (I'm open to suggestions!). I'm really impressed with how easy Ruuvi tags were to work with, so perhaps other options will be just as easy/helpful for engine monitoring, rather than converting to N2K and then back to SK. I can always send that data back out onto NMEA2000, although I'm not sure why I'd want to...

I messed around with interfacing my Renogy Commander Solar Charge Controller, but had no luck with the srne-to-signalk plug in. It's a challenging thing, because the USB/RS485 device has it's own drivers and they kind of mess up my other stuff when it's plugged in. That cable is "half-duplex," so it doesn't send any info unless something is asking for specific info to begin with, so that is beyond my abilities currently. No luck with that, but that's simply "extra" at this point, as the Victron Battery Monitor does the heavy lifting (Vitron BM702 is another gauge I never look at, but I do check its data on SK often!). 

Did I mention Ruuvi Tags?! Easiest thing I've done with SignalK and WilhelmSK so far. Worked perfectly and not difficult to set up. Although the Ruvvi plugin SK path reads "relativeHumidity." For some of the extra derived-data, I needed to use signalk-path-mapper to change the path from "environment.outside.relativeHumidity" to just "environment.outside.humidity." Once that happened, a whole bunch of additional calculated data was available from other plugins, including wind chill, heat index, barometer trends, etc., etc. I may add a couple extra Ruuvi Tags - one in our freezer (which we don't use much) and one where the diesel heater is to monitor heat levels inside that locker.

Did I mention that I have access to all this data remotely from my phone? I've made iPhone versions of many of these panes. I have a new Netgear router with a LTE cellular modem built in. We are liveaboards, so we have high-speed internet at the dock, but "fall-over" onto cellular when we unplug. In the router, I port-forward port 3000 to Openplotter.local. I just need to know my current IP address and I can access this data from anywhere. I'm often caught showing off my "stuff" at the local boat chandlery. I get made fun of a lot for being to nerdy, but I think they are just jealous.

Future upgrades might include adding SSD drives to the Pis, as the SD chips seem to be rather slow and I worry about read/write integrity on them. Although I used Samsung 128gb chips for both, which are well rated, I understand they don't last forever. Making a backup at some point needs to become a priority, but that'll probably happen right after I lose one...

I should note all this has happened without me adding extra gear. I did add both RPis, a couple of interface cables, and the Ruuvi Tags. The rest was all a matter of interfacing what I already had on board and reworking the existing gear to fit my needs through SignalK. I'd say it's coming along nicely!


If you've read this far, thanks for reading! This is probably more info than needed, but it's "How I did it..."

Steve

Thanks for sharing - nice setup.

How did you integrate the Autopilot controls and how do you read Autopilot status ?
Thanks
Reply
#3
(2021-03-25, 12:35 PM)affinite Wrote: Thanks for sharing - nice setup.

How did you integrate the Autopilot controls and how do you read Autopilot status ?
Thanks

It’s a function of WhilhelmSK. There’s nothing really to do.

That said, I first installed the “@Signalk/Signalk-autopilot” plug-in to make sure SignalK and my AP were communicating. Then I installed WhilhelmSK plugin in SignalK. 

Inside WilhelmSK, I give the connection settings the login information and it does all the work. I can even activate/deactivate the AP from my AppleWatch!

It is very cool.
Reply
#4
Thanks
Agree its cool but only if you have Apple on board I guess
I dont think he does WhilhelmSK for Android or Linux   Sad
Reply
#5
(2021-03-19, 09:39 PM)SCarn Wrote: SignalK seems to "buffer" some data. As a result of how OpenCPN reads that data, I get "jumps" of speed in my OCPN track. It might be network latency. I thought it might have been boat roll the first time I noticed it, but I see it does this in the harbor when the boat is moving smoothly. These "jumps" show up in the OCPN track as speed bursts of 20+ knots. My boat maxes out at about 9kts, so I know this is inaccurate and am considering options to make data reporting to OpenCPN more accurate.

This is a real concern.   Has anyone else noticed this?  

 What if you delete the signalk connection in opencpn, and instead convert signalk to nmea in the signalk server and use that in opencpn?  Same lag?

What if you connect the gps to gpsd (or opencpn directly connects to gps)   ?

     There are really a lot of ways to route data these days, would be good if you can try several and report the results.

It would be good to determine where this lag is.   It's quite possibly just a small logic change to fix.

The other issue is wifi not deterministic and does not have guarenteed latency.   This is why I am skeptical of wireless wind sensors for autopilots.   It needs a dedicated wifi link if wifi can work, or other RF link where both sides are on realtime operating systems.
Reply
#6
(2021-03-26, 06:54 PM)seandepagnier Wrote: This is a real concern.   Has anyone else noticed this?  

 What if you delete the signalk connection in opencpn, and instead convert signalk to nmea in the signalk server and use that in opencpn?  Same lag?

What if you connect the gps to gpsd (or opencpn directly connects to gps)   ?

     There are really a lot of ways to route data these days, would be good if you can try several and report the results.

It would be good to determine where this lag is.   It's quite possibly just a small logic change to fix.

The other issue is wifi not deterministic and does not have guarenteed latency.   This is why I am skeptical of wireless wind sensors for autopilots.   It needs a dedicated wifi link if wifi can work, or other RF link where both sides are on realtime operating systems.

I agree about the wifi. I do use it aboard, but I have cat-5 wired all the primary devices together. Gigabit ethernet is so noticeably faster and Pi's already have bandwidth issues with SD cards, so why not remove the wifi bottleneck when there's a better solution?Cat 5 cables are cheap. My handheld devices are the ones that are wifi.

I believe I solved the lagging issue. First of all, I had two sources coming into SignalK. As a result, I had many "Source Priorities" applied to determine which source provided which path, etc. As soon as I removed all those filters and the extraneous source, leaving just the can0 adapter, SignalK processed many more deltas/second while receiving less actual data (I had some stuff off to reduce network flow). The canbus adapter is seriously fast. 

The other device I removed from SignalK was a Yacht Devices YDNU USB adapter, which I moved over and hung on the OpenCPN Pi to give OpenCPN a direct feed. OpenCPN does channel data back through to SignalK as well as receive a couple of missing NMEA0183 sentences from SignalK (albeit at a lower OCPN priority). I had to be very careful to not create any loops. So far so good. Route data is sent from OpenCPN back through signalk. I've never found OpenCPN's SignalK source to be very worthwhile. TCP was always faster and more reliable in my experience to date, but I may give it another try just to make sure.

So everything now seems fine. I'm headed out tomorrow to shake down my dual Pi set up for the first time and give WilhelmSK a real shot at "remote control". I'll definitely notice if the latency issue continues.  I'll let you know if there's any issues.

Steve
Reply
#7
@SCarns,

What type is your autopilot and how is it connected?

I am trying to workout if I can command my Autohelm ST4000 over NMEA0183 from WilhelmSK. Wind and Wpt work but I have only engaged it from the AP control head. is that what you do? engage from the control head?
Reply
#8
(2021-04-30, 06:32 PM)Techstyle Wrote: @SCarns,

What type is your autopilot and how is it connected?

I am trying to workout if I can command my Autohelm ST4000 over NMEA0183 from WilhelmSK.  Wind and Wpt work but I have only engaged it from the AP control head.  is that what you do?  engage from the control head?

Most of the time, yes, as it is conveniently located at the helm. Although I have used WilhelmSK in my watch to disengage and re-engage a couple times.

I have an Raymarine Evolution 400. I can’t see why it wouldn’t work over NMEA0183, unless there’s some sort of specific N2K PGN that controls it, but APB might be enough. Try it with the @SignalK/signalk-autopilot plugin first and see if it works. Same programmer wrote WilhelmSK and I think WSK relies on that plugin. So if the plugin works, WilhelmSK should.
Reply
#9
Thanks, I will try it tomorrow. I am definitely receiving APB at the Autohelm ST4000 and see the inputs , and if I put the AP in Wind or waypoint mode then it will attempt to steer - this gave me an error before connecting to the Pi. just don't know where the state change (Auto, Standby, wind, track) is triggered - i don't think it is in APB but I could be wrong.
Reply
#10
Does anyone know if WhilhelmSK will integrate with Tinypilot? I love these screens you have built!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)