Heads up: older Venus OS releases required manual SignalK installation from SSH. v3.40+ ships SignalK as a built-in service — this guide assumes that path. If you're on an older Venus OS, update first.
Plug one end of the VE.Can–N2K cable into either of the Cerbo's two VE.Can ports. Plug the other end into a free T-connector on your NMEA 2000 backbone.
Backbone check: your NMEA 2000 backbone needs exactly two 120Ω terminating resistors, one at each end. Without them the Cerbo won't see any traffic. If this is new, borrow a multimeter and check for ~60Ω across CAN-H / CAN-L on a drop cable — that's the two 120Ω terminators in parallel.
Open the Cerbo Remote Console
On the same network as the Cerbo, point your browser at http://venus.local. If .local resolution doesn't work on your network, find the Cerbo's IP address from your router and use that instead.
If this is a fresh Cerbo, walk through the initial setup wizard first (language, VRM account link if you use one, etc.) before continuing.
Enable SignalK in Venus OS
In the Remote Console, go to Settings → Integrations → SignalK. Toggle SignalK to on. Venus will download the SignalK server (give it a minute on first install) and start it automatically.
Can't find the option? On some Cerbo models the default "Small" Venus OS image doesn't include SignalK. Switch to the Large image via Settings → Firmware → Online updates → Image type, apply the update, and SignalK will appear after reboot.
Open the SignalK Admin UI
Point your browser at http://venus.local:3000 (or the Cerbo's IP on port 3000). The SignalK Admin UI will ask you to create an admin user the first time — pick a username and password you'll remember, since you'll need it to install plugins.
Once you're in, the Dashboard tab should already show live NMEA 2000 data flowing — that's a good sanity check that your VE.Can wiring and terminators are right.
Install the SeaLink plugin from the SignalK Appstore
In the SignalK Admin UI, go to Appstore → Available. In the search box type sealink. Click Install next to signalk-sealink-plugin, then restart the SignalK server when prompted.
Configure the plugin
Once installed, go to Server → Plugin Config and find SeaLink Cloud in the list. Enable it and you'll see a configuration form with a Device Key field. Leave it empty for now — the shared final steps below will walk you through grabbing your key and pasting it in.
Raspberry Pi 5 (4GB or 8GB recommended — 2GB works but is tight).
64GB A2-rated microSD card and the official USB-C 5V/5A power supply.
An NMEA 2000 interface — this guide is written for the Actisense NGT-1 USB (with its matching USB cable), but HAT alternatives like the PICAN-M or MacArthur HAT also work. See the callout below.
An ethernet cable to your boat's router (recommended for initial setup over WiFi).
A powered, terminated NMEA 2000 backbone with a free drop port.
HAT setup differs from the USB flow: instead of lsusb and /dev/ttyUSB0, you enable an SPI / CAN device-tree overlay in /boot/firmware/config.txt, reboot, and verify the interface comes up as can0. In SignalK you then add a NMEA 2000 (canbus-js) connection pointing at can0 instead of an Actisense serial device. Each HAT vendor's docs walk through the overlay step.
Why this guide defaults to the Actisense NGT-1: it's the most reliable consumer-grade NMEA 2000 gateway we've tested, SignalK's actisense-serial parser is rock solid, and it shows up as a plain USB serial device with zero kernel-overlay headaches — the path of least resistance for first-time installs. Other USB gateways (Digital Yacht iKonvert, Yacht Devices YDNU, etc.) also work but configuration differs.
Flash Raspberry Pi OS (64-bit Bookworm or newer)
Download the Raspberry Pi Imager and flash Raspberry Pi OS Lite (64-bit) onto your microSD card.
Use the Imager's OS customisation dialog (gear icon) to pre-set your hostname, username, password, SSH, and WiFi credentials — that saves a lot of keyboard-and-monitor-on-the-boat pain.
First boot and SSH in
Slot the microSD into the Pi 5, plug in ethernet and power. Give it a minute to boot, then SSH in from your laptop:
ssh pi@sealink-pi.local
(Replace sealink-pi with whatever hostname you picked.) Update the system once you're in:
sudo apt update && sudo apt upgrade -y
Install Node.js 20 and the SignalK server
The official SignalK server is a Node.js application. Install Node 20 and the server with the upstream one-liner:
Follow the prompts: pick a vessel name, select the Actisense NGT-1 as your N2K source (or skip it for now and add it in step 6), and set up your SignalK admin user.
Canonical instructions: see the official SignalK Pi install docs. We keep this guide as a friendly summary — the upstream docs are always the source of truth.
Plug in the Actisense NGT-1
Using a HAT instead? Skip the USB-plug instructions below — your PICAN-M or MacArthur HAT is already seated on the Pi's GPIO header. After enabling the HAT's device-tree overlay and rebooting, verify the CAN interface is up with ip link show can0 (it should report state UP), then jump to Step 6 to add the connection in SignalK as a can0 source instead of an Actisense serial device.
Plug the NGT-1 into one of the Pi 5's USB-A ports. Connect its NMEA 2000 end to a free drop on your backbone. Confirm the Pi sees it:
lsusb
dmesg | tail -n 20
You should see an Actisense entry in lsusb and a new serial device appear — usually /dev/ttyUSB0. Note the exact path; you'll enter it in the next step.
Configure the Actisense connection in SignalK
Open the SignalK Admin UI at http://sealink-pi.local:3000. Go to Server → Connections → Add. Fill in:
Type: NMEA 2000
Source: Actisense NGT-1
Device:/dev/ttyUSB0 (or whatever you saw in the previous step)
Baud rate: 115200
Click Save, then restart the server. The Dashboard tab should now show NMEA 2000 traffic flowing from your instruments.
Install the SeaLink plugin from the SignalK Appstore
In the Admin UI, go to Appstore → Available, search sealink, click Install next to signalk-sealink-plugin, and restart the server when prompted.
Open the plugin config
Go to Server → Plugin Config, find SeaLink Cloud, and enable it. Leave the Device Key empty for now — the shared final steps below cover it.
Same three steps on both hardware paths. This is where the plugin becomes your boat.
Grab your Device Key from the dashboard
Open sealink.cloud/dashboard, log in, and click Setup → Device & API in the sidebar. You'll see a short Device Key string — tap the copy button next to it.
Paste the key into the plugin config and save
Back in the SignalK Admin UI, open the SeaLink Cloud plugin config, paste your Device Key into the Device Key field, and click Submit. The plugin will restart and begin batching data every 30 seconds.
Verify data is flowing
Switch back to your SeaLink dashboard browser tab. Within about 30 seconds you should see:
The Plugin Status pill turns green — that means the plugin is connected and batches are arriving.
Your sensor pills (wind, depth, battery, etc.) start lighting up with live values from your boat.
If you have GPS on the backbone, your boat appears on the map.
That's it — you're streaming. Welcome aboard.
Troubleshooting
Common stuck-points
The usual suspects when something doesn't light up the first time.
Plugin status still says "Connecting…" after two minutes
Usually a network issue. Check:
Your SignalK host can reach the public internet (curl https://sealink.cloud should return HTML, not a timeout).
The marina's captive portal — some require a browser-based login before any device can reach external sites.
Your firewall isn't blocking outbound HTTPS on port 443.
If the plugin never transitions, restart the SignalK server and watch the SignalK Server Log for SeaLink plugin lines — errors there usually say exactly what's wrong.
Dashboard shows "No data received yet"
The plugin is running but your dashboard hasn't seen a batch yet. Check these in order:
In the SignalK Admin UI's Data Browser tab, confirm NMEA values are actually updating — if the browser is empty, SignalK isn't getting data from the backbone, and the problem is upstream of SeaLink.
In the plugin config, confirm the Device Key is pasted correctly and that you clicked Submit.
Give it 30–60 seconds after saving the key — the plugin batches on a timer.
SignalK Appstore doesn't show the SeaLink plugin
Go to Appstore → Installed and click the Refresh button at the top to re-fetch the plugin catalog from npm. If it's still missing, check that your SignalK server has internet access (the Appstore queries npm directly, so no internet = no catalog).
You can also install from npm manually via SSH: cd ~/.signalk && npm install signalk-sealink-plugin then restart the SignalK server.
Cerbo: SignalK option is missing from Venus OS menu
On some Cerbo firmware builds SignalK is only included in the Large image. Switch image types via Settings → Firmware → Online updates → Image type → Large, apply the update, and the SignalK toggle will appear after reboot.
If you're on Venus OS older than v3.40, update first — earlier versions required manual SignalK installation that this guide doesn't cover.
Pi 5 + Actisense: /dev/ttyUSB0 not found
Confirm the NGT-1 is actually detected:
lsusb | grep -i actisense
If nothing shows up, the NGT-1 isn't being recognized — try a different USB cable (many failures are cable-related, not adapter-related) and a different USB port. If lsusb shows it but /dev/ttyUSB0 is missing, you may be missing the ftdi_sio kernel driver — sudo modprobe ftdi_sio and try again.
Also check dmesg | tail -n 20 immediately after plugging it in — kernel messages usually tell you exactly what device path was assigned (sometimes /dev/ttyUSB1 if something else is already on USB0).
My plugin version is out of date — how do I update?
In the SignalK Admin UI, go to Appstore → Installed. Any plugin with an available update shows an Update button next to it. Click it, restart the SignalK server when prompted, and you're on the latest version.
SeaLink will show a blue banner across the top of your dashboard when a newer plugin version is available, so you'll always know to check.
Still stuck, or ready to dive in?
Reach out if you're hitting a wall — or jump back to your dashboard to paste your device key.