signalk-nmea0183-logger
v2.9.8
Published
NMEA0183 logger with GPS track, events, AIS, DSC, weather, engine/fuel/maintenance, and electrical monitoring for SignalK
Maintainers
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:
- Go to Appstore → search for
signalk-nmea0183-logger - Click Install
Or via command line:
cd ~/.signalk
npm install signalk-nmea0183-loggerFrom source
cd ~/.signalk/node_modules
git clone https://github.com/YOUR_USERNAME/signalk-nmea0183-logger.git
cd signalk-nmea0183-loggerRestart Signal K after installation:
sudo systemctl restart signalkConfiguration
After installation, enable the plugin in Signal K Admin → Server → Plugin Config → NMEA0183 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 → Webapps → NMEA0183 Logger.
Installing as PWA
iPhone (Safari): Share → Add to Home Screen Android (Chrome): Menu (⋮) → Install app
Creating a voyage
- Go to the Voyages tab
- Click + Create voyage or 🔍 Auto-detect
- Select daily logs, give it a name
- 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 Admin → Server → Connections:
- 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.jsonData 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 signalkLicense
MIT
