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
npm install signalk-ais-navionics-converterA 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)
- Features
- Installation
- Configuration Parameters
- Basic Settings
- TCP Port
- Websocket Port
- Update Interval for Changed Vessels
- Update Interval for Unchanged Vessels
- Data Filtering
- Skip Vessels Without Callsign
- Skip Vessels With Stale Data
- Stale Data Threshold
- Timestamp Added to Ship Name
- Speed Over Ground (SOG) Correction
- Minimum SOG for Alarm
- Maximum Minutes Before SOG Set to Zero
- NMEA2000 PGN Creation
- VesselFinder Integration
- Enable VesselFinder Forwarding
- VesselFinder Host
- VesselFinder UDP Port
- VesselFinder Update Rate
- AISFleet Cloud Integration
- Include Vessels from AISFleetcom
- Radius for Cloud Vessels
- Debug Options
- Debug All Vessel Details
- Debug MMSI
- Debug Stale
- Debug JSON
- Debug AIS
- Debug corrected SOG
- How It Works
- Data Flow
- Merge Logic
- Client Connection Handling
- Usage with Navionics Boating App
- Usage with OpenCpn
- Troubleshooting
- No vessels appear in navigation app
- Vessels disappear after a while
- False collision warnings
- Too manyfew vessels
- Debug Logging
- Requirements
- API Description
- License
- Author
- Contributing
- Changelog
- 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.
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)
#### 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).
#### 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.
#### 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.
#### 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.
#### 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 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
1. Data Collection:
- Fetches vessel data from SignalK API (http://)
- 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
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
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
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'
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
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)
- 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,...)
1. http://
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.
2. http://
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.
3. http://
MIT
Dirk Behrendt
Issues and pull requests are welcome!