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-nmea0183-logger

v2.9.8

Published

NMEA0183 logger with GPS track, events, AIS, DSC, weather, engine/fuel/maintenance, and electrical monitoring for SignalK

Readme

signalk-nmea0183-logger

A Signal K server plugin that logs raw NMEA0183 sentences to daily files and provides a mobile-first web interface for reviewing voyages, tracks, events, weather, and sea state data.

Built for cruising sailors who want a reliable, self-hosted record of every passage — viewable from any device on the boat network, with or without internet.

Features

Data logging

  • Logs all NMEA0183 sentence types to timestamped daily files
  • Per-sentence-type filtering (enable/disable GPS, AIS, wind, depth, etc.)
  • AIS throttling per MMSI to reduce file size
  • GPS deduplication (skip GGA/GLL when RMC is available)
  • Automatic file splitting when size limit is reached
  • Automatic gzip compression of old logs (configurable, default 7 days)
  • Transparent decompression — compressed logs are accessible as if uncompressed

Analysis & visualization

  • GPS track on OpenSeaMap with OpenStreetMap base layer
  • Voyage statistics — distance, duration, SOG avg/max, TWS, engine hours
  • Automatic event detection — engine start/stop, course changes, wind shifts, low battery
  • Manual events — add hazard, sighting, VHF, note, or custom markers with free-text notes
  • GPS quality indicator — green/orange/red dot based on invalid fix percentage
  • Weather & sea state — hourly data from Open-Meteo, matched to your track position
  • AIS position decoding — Class A (types 1-3) and Class B (type 18) vessel tracks

Voyages

  • Combine multiple daily logs into a named voyage
  • Per-day colored tracks on a single map
  • Combined statistics with weighted averages and best-day highlighting
  • Per-day comparison table
  • Day-filter on events — show all or filter by day
  • Auto-detect multi-day trips based on time gaps between logs

Export

  • GPX — full-resolution track with events as waypoints
  • GPX+AIS — includes nearby vessel tracks
  • CSV — summary, events, engine periods, weather intervals, track data
  • All exports work on both single-day logs and multi-day voyages

Mobile-first PWA

  • Installable as home screen app (iOS Safari, Android Chrome)
  • Dark theme, large touch targets (40px+ buttons)
  • Offline capable — cached logs and stats viewable without internet
  • Orange offline indicator bar when network is unavailable
  • Print-friendly voyage reports

Installation

From npm (recommended)

In your Signal K server admin panel:

  1. Go to Appstore → search for signalk-nmea0183-logger
  2. Click Install

Or via command line:

cd ~/.signalk
npm install signalk-nmea0183-logger

From source

cd ~/.signalk/node_modules
git clone https://github.com/YOUR_USERNAME/signalk-nmea0183-logger.git
cd signalk-nmea0183-logger

Restart Signal K after installation:

sudo systemctl restart signalk

Configuration

After installation, enable the plugin in Signal K AdminServerPlugin ConfigNMEA0183 Logger.

Settings

| Setting | Default | Description | |---------|---------|-------------| | Language | English | UI and event strings (English / Dutch) | | Public API Port | 3033 | Separate HTTP server, no authentication | | Include Timestamp | true | Prepend ISO timestamp to each logged sentence | | AIS Throttle | 30 sec | Max one VDM per MMSI per interval | | GPS Dedup | true | Skip GGA/GLL when RMC is present | | Max File Size | 50 MB | Split to new part file when exceeded | | Compress After | 7 days | Gzip logs older than N days (0 = disabled) |

Event detection thresholds

| Event | Default | Description | |-------|---------|-------------| | Course change | 30° | Smoothed COG change threshold | | Wind change | 5 kn | Smoothed TWS change threshold | | Engine RPM | 100 | RPM below this = engine off | | Battery low | 12.0 V | Alert when voltage drops below |

Sentence filter

Each NMEA sentence type can be individually enabled/disabled. Groups include Navigation, Compass, Wind, Depth, Speed, Waypoint/Route, Environment, AIS, and Misc.

Usage

Accessing the interface

Open http://your-signalk-host:3033 in any browser. The interface is also accessible through Signal K Admin → WebappsNMEA0183 Logger.

Installing as PWA

iPhone (Safari): Share → Add to Home Screen Android (Chrome): Menu (⋮) → Install app

Creating a voyage

  1. Go to the Voyages tab
  2. Click + Create voyage or 🔍 Auto-detect
  3. Select daily logs, give it a name
  4. View combined stats, per-day tracks, and merged events

Adding events

In any day view, scroll to the events section and click + Add event. Choose a type (hazard ⚠️, sighting 🐬, VHF 📻, note 📝, custom 📌), enter details, and optionally set a specific time.

Adding notes to events

Click the ✏️ icon next to any event (auto-detected or manual) to add a free-text note. Notes appear in GPX and CSV exports.

ESP32 engine monitoring (optional)

The plugin accepts NMEA0183 sentences via UDP from an ESP32 running ESPHome, enabling engine data logging alongside navigation data.

Supported sentences from ESP32

| Sentence | Data | Example | |----------|------|---------| | $IIRPM,E,1,2200,,A | Engine RPM | Pulse counter via optocoupler | | $IIXDR,C,85.3,C,COOLANT | Temperature | DS18B20 sensors | | $IIXDR,V,13.2,V,BATT | Battery voltage | ADC with voltage divider | | $IIMTA,22.5,C | Air temperature | Engine room sensor |

Signal K connection

Add a UDP connection in Signal K AdminServerConnections:

  • Type: UDP
  • Port: 10112
  • Input type: NMEA0183

API

All endpoints are served on the public API port (default 3033), no authentication required.

Logs

| Method | Endpoint | Description | |--------|----------|-------------| | GET | /api/logs | List all log files | | GET | /api/logs/:fn | Raw lines (with ?lines=N&filter=TEXT) | | GET | /api/logs/:fn/stats | Parsed statistics | | GET | /api/logs/:fn/gpx | GPX track (?ais=1 for AIS, ?events=0 to exclude) | | GET | /api/logs/:fn/csv | CSV export | | GET | /api/logs/:fn/download | Download raw log file | | GET | /api/logs/:fn/weather | Weather & sea state from Open-Meteo | | GET | /api/logs/:fn/events | Manual events and notes | | POST | /api/logs/:fn/events | Add/delete events, add/delete notes |

Voyages

| Method | Endpoint | Description | |--------|----------|-------------| | GET | /api/voyages | List all voyages | | POST | /api/voyages | Create, update, or delete ({action, ...}) | | GET | /api/voyages/:id/stats | Combined multi-day statistics | | GET | /api/voyages/:id/gpx | Multi-day GPX (?ais=1 for AIS tracks) | | GET | /api/voyages/:id/csv | Multi-day CSV with per-day breakdown | | GET | /api/voyages/auto-detect | Suggest voyage groupings |

System

| Method | Endpoint | Description | |--------|----------|-------------| | GET | /api/stats | Server status, sentence counts | | GET | /api/lang | Available languages | | GET | /api/lang/:code | Translation strings |

Architecture

signalk-nmea0183-logger/
├── index.js              Main plugin: lifecycle, HTTP server, API routes,
│                         stats cache, log compression, voyage logic
├── lib/
│   ├── parser.js         NMEA sentence parser, AIS decoder, GPS quality
│   ├── events.js         Detector classes (SmoothedChange, StateToggle, LevelCrossing)
│   ├── export.js         GPX and CSV generators
│   └── weather.js        Open-Meteo API client with 30-min cache
├── public/
│   ├── app.html          Single-file frontend (CSS + HTML + JS)
│   ├── sw.js             Service worker for offline support
│   ├── icon.svg          PWA and Signal K app icon
│   ├── manifest.json     PWA manifest
│   └── index.html        Redirect to public API port
└── package.json

Data files

Stored in ~/.signalk/plugin-config-data/signalk-nmea0183-logger/nmea0183-logs/:

| File | Description | |------|-------------| | nmea0183_YYYY-MM-DD.log | Daily log file | | nmea0183_YYYY-MM-DD.log.gz | Compressed old log | | nmea0183_YYYY-MM-DD.events.json | Manual events and notes for a log | | voyages.json | Voyage definitions |

Deploy from source

# Develop locally, then deploy to the boat
rsync -avz --exclude node_modules --exclude '*.log' \
  signalk-nmea0183-logger/ \
  [email protected]:~/.signalk/node_modules/signalk-nmea0183-logger/

ssh [email protected] sudo systemctl restart signalk

License

MIT