For years I have had a dedicated linux machine on my sailboats centered around remote monitoring and stats gathering. I have a fairly well developed set of tools from SignalK, Zabbix, Grafana and others that help keep an eye on the boat while I am on board and away. I have been using a Raspberry Pi computer to enable this, but in the last few months it has proven to be too underpowered to keep up. My search began for a better solution…
My first boat computer was an old Dell desktop which sat on the boat and used serial boards and relays to know when doors were opened, and when bilge pumps ran. This was in the mid 1990s and was not any sort of commercial product. At one point I seem to remember my BBS heritage coming out of the woodwork, and stringing a phone line to the computer to do dial out calls to my cell phone for alerts. There may have been some sketchy modem-to-SMS gateway involved as well.
Fast forward to the early 2000s, and having more exposure to hardware through my employer, I tried a series of “industrial” computers that were waterproof and ruggedized (at significant cost I might add) and ran everything from linux to Windows trying to build a better boat PC. I even went as far as purchasing a really expensive Planar touch screen and tried to build a chart plotter on my own. It didn’t really pan out.
Somewhere around that time, I stumbled on Soekris, who at the time made lower power computers on a single board. In the picture above, you can see the one I had on Jammy for many years. I also had several others at our family cabin, in a remote location with a solar panel installation, in a car, and at home. They were versatile computers that took lots of abuse, didn’t get too hot or have fans, and had a decent amount of ethernet and serial ports. The one above is running directly off of my battery bank, which fluctuated between 11.5-14 volts, and had a USB connection to the AT&T hotspot you see in the foreground, plus a serial/USB connection to a Maretron device, or an Actisense NGT device later in its life.
Soekris systems required pure Debian and some custom drivers, plus a rather esoteric installation process. But boy did they just chug along – and they had a nice watchdog to reboot when things went bad, and a serial console you could connect to when needed.
Soekris weren’t marine-grade, so to help prevent corrosion, I used a mix of plastic coverings, sealed cases, and Boeshield, which is an amazing product every boater should have on board, developed by Boeing.
The Soekris boards went through a number of revisions, from a really slow AMD CPU, to a more modern Intel Celeron-type processor in their final revision. Soekris went out of business in 2017 after 16 years of building what I would consider to be some of the best single board, low power, headless computers ever. I was sad when they closed up shop.
I continued using their products on the boat until 2013, and elsewhere I used them until late 2017 when I replaced a dedicated weather station computer that had been running for 6+ years at our family cabin, which was responsible for nileweather.com. I replaced them because newer, faster, and less power hungry options were available. I seem to remember this Soekris taking up about 5-6 watts on Jammy.
While the Soekris still holds the record for the longest running computer on any of my boats. Along the way I tried a number of other random solutions, some worth covering here.
As mentioned above, one of the more successful boat computers, although short lived, was a Jetway system in a ruggedized case from one of my go-to sources for industrial stuff, Logic Supply. The main computer board was originally designed for car applications, so it had a great power supply that handled wide voltages, and a few other features that came in hand on the boat. The computer was only one part of this experiment, as I also found and purchased a ruggedized touch screen monitor that I intended on using as a full chart plotter and boat server. The touch screen took a lot of fiddling to get it to work with Linux, and eventually I abandoned that part, and tried Windows XP along with Coastal Explorer. It worked reasonably well, but was not as stable as I would have liked, crashing during navigation while sending NMEA 0183 to my autopilot, and many other things. Windows just didn’t seem like the right thing to use as a permanent server, nor as something to replace chart plotters at the time.
Another interesting computer was the Remote Monitoring Systems RMS-100 which I had been investigating for my cabin solar projects. I had one of these on the boat for a while, and it was extremely good at providing a bunch of data in one place, much which you couldn’t get easily at the time. This product is a highly customized version of Linux running on proprietary hardware, mostly designed around controlling relays, monitoring current, and providing all fo that data via SNMP or on a web interface directly on the system. They are fantastic for solar and remote installations where you need a bullet proof solution with fluctuating battery and solar conditions. They also can take a wide DC input voltage, which makes them great for feeding directly off of boat DC battery power.
I used one on Jammy for almost a year, and was able to see my power status and other items years before SignalK and other tools provided this. However, it was a closed operating system with little ability to add my own processes and daemons, so as open source became more popular and opened access to NMEA 2000, this computer became less relevant.
The Pi Years
Original Raspberry Pi – Model A courtesy of SparkFun Electronics
Raspberry Pi hit the market in 2012 as the new exciting thing, and were being used in awesome ways all around the world. Given its low power usage, and tiny footprint, it seemed like the perfect boat computer.
I started with the first Pi revision which required a lot more work than today to setup. It was great from a power perspective, but it required converting the 12v DC on board to 5V USB power. I tried all sorts of funky ways of doing this, but was never really happy with the result.
Raspberry Pi 2 model B – used on Jammy and Grace
As they came out with new versions, I moved to them rather quickly given that the update usually meant faster CPUs, more RAM and better overall performance.
Somewhere during the Pi years, they came out with Raspbian Lite, which was a version of their Raspbian operating system designed to be slimmed down and for server-type installations. This primary operating system I loaded on all of my Raspberry Pi devices, including the ones on the boat. I always appreciate when vendors provide this sort of slimmed down OS to cut down on packages I will never use taking up disk space, and wasting CPU. On a boat, it sucks to have to download updates to graphical packages I will never use.
Fast forward a few more years, and the Raspberry Pi 3 Model B showed up, and looked even better. Built in WiFi, 4 USB ports, ethernet, and a bunch more CPUs and RAM.
For the last 2 years or so, this has been my primary computer on the boat. You still had to convert 12v to 5v, but the hardware available for that has gotten better – but it still was never perfect. I found a couple of converters meant for car/truck/RV setups that made it slightly better, and even some with integrated batteries to survive a power outage, but it always irked me that they didn’t run natively off of 12V DC. From the power usage perspective, a Pi could be expected to consume 5 watts worst case.
There are plenty of USB ports for an Actisense NMEA 2000 gateway and other connection methods to networks and busses. With the final version, I used both WiFi and ethernet to connect to my on board network. I found ethernet, not surprisingly, to be more reliable – the early firmware for the on-board WiFi chip was somewhat buggy. They seem to have corrected that in the last year or so, however.
The Pi is still an ARM-based processor system, which meant that some packages were not pre-compiled and available via normal package management tools. This meant either compiling your own (could be very slow on the Pi) or trusting some other random person’s repository (scary).
With the advent of more functionality within SignalK, and even more data available to capture on-boat, I started seeing issues with even the most powerful Pi keeping up. It actually became unresponsive quite a few times, and very high CPU usage.
My standard set of things running on the boat computer nowadays includes:
- SignalK, including a bunch of plugins & apps
- Grafana + Influx
- Zabbix Proxy / Agent
- Other low CPU monitoring and custom tools + the Future
Lets delve a little deeper into each of these.
SignalK has become a critical part of what I run on my boat. It consumes everything from all of my networks and provides a “single pane of glass”, to use a dorky outdated networking term, for me to see everything. I can see it while on the boat on my phone, using an app, on my fancy Pi Instrument Display, or remotely via many similar methods.
I can check on the wind and temperatures when there is a big storm, or just see how the batteries are doing. SignalK has given me the freedom I have always wanted with the data that is on my boat.
My NMEA 2000 network is pretty busy, and SignalK has to process and deal with all of that traffic all of the time. Besides that, I am also gathering data from my Victron system which represents even more CPU cycles that SignalK eats up. With the Raspberry Pi, I was seeing at least 1 full CPU, if not most of a second, dealing with just parsing the data coming off of the networks.
In addition to gathering the data, part of the joy of SignalK is the applications you can run via its webserver. I use Instrument Panel the most, which is a great way to arrange a virtual panel of all of the various data you want to see. But that takes more CPU cycles, and can be slow on initial load.
I could never use any of the chart plotter or map-based apps with my bus and network speeds and the CPU limits. Many other SignalK folks were happily using these on Pis, but mine was always too slow mainly because of the volume of traffic. With the Pi busy dealing with that, it couldn’t also do graphical displays.
With this limitation, and given that I wanted to continue running development versions and adding plugins, the Pi was not looking like a good option.
Grafana + Influx
A few months ago, Teppo Kurki released a plugin for SignalK that would log any/all of your data from SignalK into Influx, a time based database. You could install Grafana on top of that, and have yourself some amazing dashboards of your data over time. I wrote a bit about it in Fridge Optimizer now supports SignalK.
Influx and Grafana are pretty intensive applications, and not usually run on a Pi. Combine the amount of data I was gathering off of my networks, and then even trying to send a subset of it into Influx for analysis by Grafana, and I was really overloading my poor Pi. It was getting super hot, and even shutting down at times, becoming completely unresponsive.
The other big issue was the SD card – if you order a Raspberry Pi kit system, make sure you get a high quality, longer life SD card included, or replace it with one. Some of the kits I’ve seen have no-name SD cards which have unknown performance and life. I usually get a 32GB card from Samsung or other well known vendor. In the last year, they have even come out with EVO-style cards which should have much better performance and life.
Grafana and Influx were going to pummel this card to death even if it was a good one – I don’t think SD cards are a good choice for a longer term database and analysis work load.
Zabbix Proxy / Agent
Having started with computers back in the 1980s, and proceeded directly into network and systems administration, I have a strong background in monitoring and management. Even today, I use a suite of tools at home to monitor my house, boat, mobile platforms, family cabin and more. I’m also involved with a number of other marinas/businesses purely for the monitoring and stats gathering side of things.
For general network monitoring, graphs, and alerting, I have used Zabbix for years, and it has proven to be reliable and scalable. My sailboat network has a VPN back to my main Zabbix monitoring server, which connects in to the computer on the boat via a Zabbix proxy. The main server sends a list of what should be monitored, and the boat computer does the work, which is more efficient than monitoring things remotely.
I monitor all of the bandwidth, ports, services, processes, and devices on the boat that are supposed to be on all the time. I can see used bandwidth, port statistics, network latency, and much more. It is extremely helpful when testing new devices, and I have found many issues through when monitoring goes crazy. However, the zabbix proxy is active checking things on the network, and does take up some CPU time. It’s not huge, but it is something.
The Zabbix agent is used to gather complete performance information on the computer itself, and is helpful to see impacts of enabling more devices on the NMEA 2000 network, and what that does to SignalK.
I covered some of this before on my post about Sending AIS data to multiple servers over a limited cellular link – essentially, this is a program that snarfs AIS messages from a source, and sends them out to various AIS reporting websites.
I still do this mainly so my boat is always reported as accurately as possible, and because I enjoy contributing what I can back to the community. It is pretty low CPU, but I always want to make sure it is running. Not only is it providing data that others rely on, but it ensures that my boat always shows up on AIS accurately. I can use this remotely to check on her location, but more importantly, my friends and family use it to see what I am doing and if I am OK.
Other + Future
I run a number of custom scripts and security tools to ensure the server is updated and secure. There are also a handful of other useful utilities including monit to keep things running, and backup VPNs in case the Peplink has an issue, Amazon S3 replication, and more. All of these things take CPU when they run, and with the Pi, they were struggling to complete in reasonable times.
Besides these items, I know I will continue to expand what is running on the boat server. As more plugins are developed for SignalK that work with my hardware/network, those will get turned on and consume more processing power. I also expect the open source revolution on boats and IoT to continue driving even more opportunities for new processes as well.
Why not Off-Boat?
Several people suggested that I host the CPU intensive stuff off-boat given the CPU/storage/memory requirements, and complexity to setup. This is a long term discussion that I have had for years – I started a long time ago wanting to take all of the critical data on the boat and ship it off to the cloud, or a database somewhere, to be processed and normalized. Then I could write alert rules, dashboards, or just look at trends.
Over the years I have realized that shipping everything off boat is not likely to work for many people, especially like me with a crazy big network. I would have to downsample most of the data to something not realtime, and then ship off ONLY the things that I truly cared about.
Grace’s monthly bandwidth usage
This approach has a number of problems. First, you have to reduce the accuracy of the data by downsampling. Then you have to choose only what you want to send off boat. If you sent everything, you would need a really good internet connection all the time, which I can’t rely on. In addition, it likely would be so much data that I would use up my LTE allowances.
Additionally, if you were wanting to see the data or analysis right away, and you were dependent on your Internet connection, you could be cut off from your data at times when it was down, or waiting for data to get streamed up to the cloud, processed, and then visualized. For some of the data, this does not seem like the right approach.
I think my dream of shipping everything off boat is still a ways from happening. The only logical choice I can see right now is to keep it all on boat, and do the processing and analysis there. CPUs and storage are cheap and plentiful nowadays, and your cell phone has a tremendous amount of power compared to a Raspberry Pi. Eventually having an app on the phone that did the data processing and visualization is what I’d like to see, but that is beyond my skills to create myself. Ideally, you would have a low power computer like the Pi gather the data, but use a cell phone or tablet, with a much faster processor and even graphics assisted chips, to do the data analysis and visualization.
So I needed a bigger and better computer. I started by searching for folks like Soekris, and found a bunch, but they were still only slightly more powerful than a Pi.
I also went to one of my favorite places, Logic Supply, and looked at industrial and ruggedized PCs once again. Many of them were very expensive, and had tons of ports I didn’t need. In addition, they were huge once you got them in a fanless case.
There are tons of other smaller computers out there, but they all had a limit in some way. Many required conversions to run off of 12V DC, some had limited USB ports, and many had non-standard CPUs which required special treatment. I wanted something as mainstream as possible.
I had used Intel NUC computers for tons of things at work and at home for Windows based needs. A couple of years ago, my main monitoring server at home had been converted to an older Intel i3 NUC that I had laying around. Between work and home, I had worked on over 50 of these little square computers, why not try one on the boat?
Next Unit of Computing
Intel came out with the NUC or Next Unit of Computing back in 2013, and since then have released 8 generations. After reviewing the plethora of NUC models available, I decided on an i3 NUC and added 8GB RAM and a 250GB SSD. I felt that an i3 was more than powerful enough for what I wanted to do, while also not requiring the fan to be running all the time, generating a lot of heat and consuming a lot of power. 8GB of RAM seemed to be the best price point, and provided plenty of room to grow. I decided to spend a little more on the SSD – you could find alternatives that are cheaper – both for the space, and the performance.
If you are doing a price comparison against a Raspberry Pi, the NUC will lose. At the time I wrote this article, I paid around $460 for all of the components for the NUC. For a good Raspberry Pi kit or parts, I would have paid just shy of $100, so you can see they are not price comparable – but you are getting a significant amount of additional CPU, memory and storage – in all cases at least 4x if not 8-10x.
Working on a NUC is pretty easy. The first versions that I worked on a few years ago were just like the new ones – four screws on the bottom removes a cover that gives you access to thoughtfully placed spaces for RAM, storage, WiFi and expansion cards. This model has one mSATA port on the upper left which can be used for storage cards and other expansion devices, and RAM slots on the right.
The whole system is 4″ x 4″ and comes with a mounting bracket usually used for VESA mounts on the back of a monitor. That is a super compact package and fits well in my Internet Alcove.
Installing everything took only a couple of minutes – one screw for the SSD drive, and click the RAM into their slots.
The NUC has two USB ports on the front, along with a headphone jack and power button. I like having USB ports on both ends so I can plug in boat stuff without having to route it to one side.
The side has a micro SD card slot, which I didn’t think would be that useful, but it has proven to be convenient. Almost all marine electronics now use these for charts, updates, and other functions. Having a spare SD card reader always on the boat has helped when I have needed to transfer files, format a new card, etc.
The back of the unit has the power connector, fan exhausts, HDMI, ethernet, USB and USB-C.
One of the best things about the NUC is the power supply. They come with a 19V DC supply, but their boards will run on 12-19V DC according to the specs. I had seen this a few years ago, and made a mental note in the back of my mind that I bet it would run on boat power with no conversion. And I was right! This was a big plus as I wanted to run as much as possible on DC, and not invert or convert anything.
In terms of power usage, this model NUC is supposed to consume about 5W at idle, which is similar to the Raspberry Pi operating at full power. There are a ton of BIOS settings that I have played with, and have actually gotten closer to 4W. I’ve also slowed down the fans a bunch to prevent noise, although I may adjust that in the summer months to keep things cool. If you wanted to get max performance, you can also adjust the settings appropriately, and end up using 15W per Intel’s specs. AnandTech did some testing as well, and you can get it much higher with a full load, which I don’t intend on being my normal operating mode.
CPU usage on Raspberry Pi
This is what CPU utilization looked like on the Raspberry Pi 3 on average, but without Grafana and Influx. Very busy across the board, with idle time ranging from 13% to 50%. Adding Grafana and Influx left it with 0% idle, which is bad, as other things start backing up and suffering.
Here’s what is looks like on the NUC with the same workload – more than 90% CPU idle, which is much better.
This is what CPU utilization looks like now on the NUC,with Grafana and Influx running as well. Still 85% CPU idle.
Overall performance is great as htop shows above. Things are still busy, but the system is very responsive at all times, does not seem to heat up very much, and doesn’t run the fans very loud. I am seeing an average system load of ~1.0 which, while many people debate the validity of that stat, is acceptable to me. Brendan Gregg has a good write up on linux load averages and other tools to help determine system performance.
Taking a look at sysstat data from mpstat shows an overall average of ~84% idle which is good.
As I mentioned above, the BIOS options are extensive, and I suspect that I may end up tweaking these over time to adjust for more/less power usage and optimize performance.
The NUC is definitely not protected to the level that a chart plotter is, so that needs to factor into the decision as to whether this is right for you. My Internet alcove has other items in it including my Peplink router, switch, and other non-marinized devices. Some have been there 2+ years and show no signs of corrosion or otherwise.
You also have to consider whether the devices you have there will be around in 2 years, or if you will upgrade/replace them. In my case, given how much tech I go through, I expect that most of the stuff I have in the Internet Alcove will be replaced or updated every 2 years or so, and as such, I don’t go through crazy steps or expense to protect things.
I also have my boat in an area of the world that does not have massive humidity combined with salt water. That combined with aggressive air cycling using my Wallas heater, and good ventilation plan has left me with a very dry boat.
I have considered using conformal coating on some of my electronics that aren’t protected, but there are issues with doing this, of course, just like any other treatment. Boeshield and other protectors like Corrosion-X are also an option.
Could you run Windows on this? Of course, and if you paired with a nice monitor, you’d have a great boat computer. You could even spring for a bigger i5 or i7 processor model, which would likely be more important if you intended on running Coastal Explorer, Time Zero, or other intensive apps. I prefer running a linux server myself, but you could still run SignalK on Windows if you so chose, although it would require a bit more setup work.
Digital Yacht has actually productized this in their Aqua Compact Pro PC which appears to be an older generation NUC.
I think the NUC will be great for my boat given the amount of crazy things I do with my network. It is much faster than the Pi, handles the load for the various things I am doing, runs natively off of 12v (yay!) and doesn’t use too much power.
For a more power conscious sailboater with less instruments, I still believe a Raspberry Pi would be a better choice to run SignalK, unless you are interested in development.
In terms of longevity, I have only been running this system for a few months, and the summer hot temperatures are coming up. I want to see how things perform in the heat.
I am far happier with this solution both for the performance aspect and because I don’t have to hack power conversion stuff to get it to run correctly. It is a compact form factor, mounts easily with the included brackets, has plenty of ports, and seems to be just right for what I need today.