npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

signalk-ais-navionics-converter

v1.0.9

Published

Signal K plugin that converts AIS data into NMEA 0183 (TCP) and can also generate NMEA 2000 AIS PGNs, with optional AIS position reporting to vesselfinder.com

Readme

SignalK AIS to NMEA0183 / NMEA2000 Converter

A SignalK plugin that converts AIS vessel data to NMEA 0183 sentences and broadcasts them via TCP to clients like 'Navionics Boating App' or 'OpenCpn'. Optionally

  • creates AIS NMEA2000 records for a selectable can bus interface
  • includes AIS data for vessels from aisfleet.com
  • forwards AIS data to VesselFinder.com

It is intended for vessels that do not have their own AIS receiver.

By using additional AIS plugins for SignalK (like AISHub) more AIS vessels are recognized and transferred.

IMPORTANT: The following are required for the plugin to function:

  • a valid GPS position (visible in the SignalK Data Browser) in navigation.position
  • MMSI of your own vessel maintained in SignalK server settings (Server → Settings)

Content

Features

  • TCP Server: Broadcasts NMEA 0183 AIS messages (Type 1 - Position report AIS class A, Type 19 - Extended position report AIS class B, Type 5 - static and voyage related data class A and Type 24 - static data report class B) to connected clients
  • Websocket Server: Same data broadcasted by the TCP server is send via a separate Websocket Server to connected clients. In addition the vessel data is broadcasted as JSON object ({"mmsi": 123456, ....})
  • NMEA200 PGN creation: Optionally the plugin generates NMEA2000 'Position Report' PGN 129038 (Class A) / PGN 129039 (Class B), PGN 129794 (Class A Static and Voyage Related Data), PGN 129809+129810 (Class B static data Part A+B) and sends them to the selected CAN bus interface.
  • Smart Update Logic:
    • Sends updates immediately when vessel data changes
    • Resends unchanged vessels periodically to prevent timeout in navigation apps
    • Sends complete dataset to newly connected clients
  • Cloud Integration: Fetches nearby vessels from AISFleet.com API and merges with local AIS data
  • Data Quality:
    • Filters stale data based on configurable age threshold
    • Corrects invalid COG/Heading values (360° → 0°)
    • Optionally sets SOG to 0 for vessels with outdated position data
    • Adds timestamp suffix to vessel names with old position data
  • VesselFinder.com Support: Optional UDP forwarding of AIS Type 1 messages
  • Flexible Filtering: Skip vessels without callsign or valid identification
  • Debug Options: Detailed logging for specific MMSI or all vessels

Warning: AIS data provided by this plugin can assist navigation. However, it never replaces the skipper's responsibility. I exclude any liability for damages resulting from the use of this plugin.

Installation

  1. Install via SignalK App Store
  2. Restart SignalK server
  3. Configure the plugin in SignalK admin interface → Server → Plugin Config → AIS to NMEA0183 / NMEA2000 converter for TPC clients (e.g. Navionics)

Configuration Parameters

Basic Settings

TCP Port

  • Default: 10113
  • Description: Port for the NMEA 0183 TCP server. Configure your navigation app (e.g., Navionics, OpenCpn) to connect to this port.

Websocket Port

  • Default: 10114
  • Description: All AIS (NMEA 0183) messages are send by an own websocket server on this port to connected clients. In addition the data of the vessels is send as JSON. Data can then be used by other plugins / apps (as clients). For the communication with the Navionics app, this port is not needed. If port is set to 0 no Websocket server is started.

Update Interval for Changed Vessels

  • Default: 15 (seconds)
  • Description: How often to check for and send updates when vessel data changes. Lower values = more real-time updates but higher CPU usage.

Update Interval for Unchanged Vessels

  • Default: 60 (seconds)
  • Description: How often to resend data for vessels that haven't changed. Important for apps like Navionics to prevent vessels from disappearing. Set to 0 to disable (not recommended).

Data Filtering

Skip Vessels Without Callsign

  • Default: false
  • Description: When enabled, vessels without a callsign will not be transmitted.

Skip Vessels With Stale Data

  • Default: true
  • Description: When enabled, vessels with outdated position data will not be transmitted.

Stale Data Threshold

  • Default: 60 (minutes)
  • Description: Position data older than this threshold will be considered stale and filtered out (if "Skip Vessels With Stale Data" is enabled).

Timestamp Added to Ship Name

  • Default: 5 (minutes, 0=disabled)
  • Description: Adds a timestamp suffix to the vessel name if position data is older than specified minutes. Format: SHIPNAME MIN15, SHIPNAME HOUR2, or SHIPNAME DAY3. Vessel names are truncated to 20 characters.

Speed Over Ground (SOG) Correction

Minimum SOG for Alarm

  • Default: 0.2 (m/s)
  • Description: SOG values below this threshold will be set to 0. Used by the AIS encoder.

Maximum Minutes Before SOG Set to Zero

  • Default: 0 (minutes, 0=disabled)
  • Description: Automatically sets SOG to 0 for vessels whose position timestamp is older than specified minutes. Prevents false collision warnings in navigation apps for vessels with outdated data. Set to 0 to disable this feature.

NMEA2000 PGN Creation

  • Default: false
  • Description: When enabled, the plugin generates NMEA2000 'Position Report' PGN 129038 (Class A) / PGN 129039 (Class B), PGN 129794 (Class A Static and Voyage Related Data), PGN 129809+129810 (Class B static data Part A+B) and sends them to the selected CAN bus interface. This option is only visible, if miminum 1 CAN interface (including virtual CAN interfaces) is available! Since Socket CAN is only available for Linux, the option will not be visible in Windows or MAC environments. If there is more than one existing interface, the corresponding interface can be selected.

VesselFinder Integration

Enable VesselFinder Forwarding

  • Default: false
  • Description: When enabled, AIS Type 1 and Type 19 messages (position reports for AIS class A and B) are forwarded to VesselFinder.com via UDP.

VesselFinder Host

  • Default: ais.vesselfinder.com
  • Description: Hostname for VesselFinder UDP server.

VesselFinder UDP Port

  • Default: 5500
  • Description: UDP port for VesselFinder server.

VesselFinder Update Rate

  • Default: 60 (seconds)
  • Description: How often to send position updates to VesselFinder.

AISFleet Cloud Integration

Include Vessels from AISFleet.com

  • Default: true
  • Description: Fetches nearby vessels from AISFleet.com cloud API and merges them with local SignalK vessel data. Requires internet connection and own position (in SignalK key "navigation.position" must exist). If the plugin "AIS Fleet" is already installed and enabled in SignalK, this option is not shown.

Radius for Cloud Vessels

  • Default: 10 (nm / nautical miles)
  • Description: Radius around own vessel position to fetch cloud vessels from AISFleet.com (1-100 nm).

Debug Options

Debug All Vessel Details

  • Default: false
  • Description: Enables detailed debug logging for all vessels in the server log. Option only visible if plugin is in debug mode. Useful for troubleshooting or understanding of send data.

Debug MMSI

  • Default: empty
  • Description: Debug output will be filtered for only this MMSI. Option only visible if plugin is in debug mode. Leave empty to disable.

Debug Stale

  • Default: false
  • Description: Stale vessels will be shown in debug log - option only visible if plugin is in debug mode and debug all vessel details is enabled

Debug JSON

  • Default: false
  • Description: JSON data of vessels will be shown in debug log - option only visible if plugin is in debug mode and debug all vessel details is enabled

Debug AIS data

  • Default: false
  • Description: AIS NMEA0183 data output will be shown in debug log - option only visible if plugin is in debug mode and debug all vessel details is enabled

Debug corrected SOG

  • Default: false
  • Description: Vessels with corrected SOG will be shown in the debug log - option only visible if plugin is in debug mode and debug all vessel details is enabled

How It Works

Data Flow

  1. Data Collection:

    • Fetches vessel data from SignalK API (http://<IP_OF_SIGNALK_SERVER>:<PORT_SIGNALK_SERVER>/signalk/v1/api/vessels)
      • use other SignalK plugins (like AisHub WS) to receive more vessels for SignalK with AIS information
    • Optionally fetches nearby vessels from AISFleet.com API (if plugin "AIS Fleet" is not installed or not enabled)
    • Merges both sources, preferring newer timestamps
  2. Data Processing:

    • Filters out stale data based on age threshold
    • Corrects invalid navigation values (COG 360° → 0°)
    • Applies SOG correction for outdated positions
    • Filters vessels without valid name AND callsign
  3. NMEA Generation:

    • Creates AIS Type 1 (class A) or Type 19 (class B) messages (position reports)
    • Creates AIS Type 5 (class A) or Type 25 (class B) messages (static vessel data)
    • Encodes as NMEA 0183 sentences
  4. Broadcasting:

    • Sends to all connected TCP clients
    • Sends to all connected Websocket clients
    • Optionally forwards to VesselFinder.com via UDP
    • Resends periodically to prevent client timeouts

Merge Logic

When the same vessel exists in both SignalK and AISFleet cloud data:

  • Position/Navigation: Uses data with newer timestamp
  • Name: Prefers any non-"Unknown" value
  • Callsign: Prefers any non-empty value

Client Connection Handling

When a new TCP client connects:

  • Complete dataset of all vessels is sent immediately
  • Client appears in "clients" count in logs
  • Ensures navigation app shows all vessels right away

Usage with Navionics Boating App

  1. Configure plugin with desired settings
  2. In Navionics app:
    • Go to Menu → Connected devices
      • Add new connection (via + sign in upper right corner)
      • Enter name for the connection (e.g. SignalkAIS)
      • Enter SignalK server IP address
      • Enter configured TCP port (default: 10113 - same setting like in SignalK plugin)
      • Select TCP (not UDP)
      • Save connection
    • Go to Menu → Chart options → AIS settings
      • turn 'Display AIS targets' on
  3. Vessels should appear on chart immediately and in 'Connected devices' you should see as status for the connection: 'connected' (in green) and 'AIS data reception'

Usage with OpenCpn

  1. Configure plugin with desired settings
  2. In OpenCpn:
    • Go to Menu → Tools → Options → Connections
      • Add new connection as follows: OpenCPN Screenshot1 OpenCPN Screenshot2
      • Save connection
    • Go to Menu → AIS
      • enable AIS targets
  3. Vessels should appear on chart immediately

Troubleshooting

No vessels appear in navigation app

  • Check that plugin is enabled and TCP server is running
  • Verify TCP port in app matches plugin configuration
  • Check firewall settings on SignalK server
  • Enable debug logging to see if vessels are being sent

Vessels disappear after a while

  • Increase "Update Interval for Unchanged Vessels" (recommended: 60 seconds)
  • Check if "Skip Vessels With Stale Data" is filtering out vessels
  • Increase "Stale Data Threshold" if needed

False collision warnings

  • Enable "Maximum Minutes Before SOG Set to Zero"
  • Set appropriate threshold (e.g., 5-10 minutes)
  • This prevents CPA calculations for vessels with outdated position

Too many/few vessels

  • Adjust "Stale Data Threshold" to filter outdated vessels
  • Enable/disable "Include Vessels from AISFleet.com" (if plugin "AIS Fleet" is not installed)
  • Adjust "Radius for Cloud Vessels" to control area coverage

Debug Logging

To enable debug output:

  1. In SignalK admin interface: Server → Settings → Logging
  2. Change setting for plugin AIS to NMEA 0183 converter for TPC clients (e.g. Navionics) to debug logging
  3. Restart SignalK
  4. Check logs in Server → Logs

Debug information includes:

  • Number of vessels sent/unchanged
  • Connected clients count
  • Vessel filtering reasons
  • AIS sentence output (when Debug MMSI is set)
  • NMEA2000 sentence output (when NMEA2000 creation is enabled and debug MMSI is set)

Requirements

  • SignalK server (Node.js version)
  • Own vessel position (for AISFleet cloud integration, if "AIS Fleet" plugin is not installed)
  • Own vessel MMSI
  • Navigation app with NMEA 0183 TCP support (e.g. Navionics boating app, OpenCpn,...)

API Description

The Plugin provides two HTTP API endpoints that allow external clients or user interfaces to query system capabilities and integration status.

  1. http://:/plugins/signalk-ais-navionics-converter/can-interfaces — List available CAN and vCAN interfaces Returns a JSON object containing all detected CAN and vCAN interfaces on the host system, including their operational state. Only interfaces that physically exist on the system are listed.

Example response:

json { "can0": { "state": "up" }, "vcan0": { "state": "up" } } This endpoint is typically used by configuration UIs to allow users to select an active NMEA2000 interface.

  1. http://:/plugins/signalk-ais-navionics-converter/aisfleet-status — Check AIS Fleet plugin availability Returns whether the AIS Fleet plugin is installed on the system and whether it is currently enabled.

Example response:

json { "installed": true, "enabled": false } This allows the UI to determine whether AIS Fleet functionality can be integrated or activated.

  1. http://:/plugins/signalk-ais-navionics-converter/openapi — OpenAPI definition of the plugin

License

MIT

Author

Dirk Behrendt

Contributing

Issues and pull requests are welcome!

Changelog

Version 1.0.0

  • Initial release
  • TCP server for NMEA 0183 AIS broadcasting
  • SignalK and AISFleet cloud data integration
  • VesselFinder.com UDP forwarding
  • Smart filtering and data correction
  • Configurable update intervals

Version 1.0.1

  • enhanced debug logs

Version 1.0.2

  • Changed to "Embedded Plugin Configuration Forms"

Version 1.0.3

  • AIS message types for class A / B separated
  • AIS Websocket server added

Version 1.0.4

  • minor bug corrections for unavailable ROT / Heading

Version 1.0.5

  • bug fixing Heading

Version 1.0.6

  • configuration parameter added - Timeout in seconds to fetch the data from AISFleet.com

Version 1.0.7

  • Option for creation of AIS NMEA2000 sentences (PGN) added.
  • OpenAPI for available CAN interfaces and availability of plugin AISFleet added

Version 1.0.8+1.0.9

  • Adjustments for latest versions of SignalK