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-sealink-cloud

v0.10.6

Published

Signal K to SeaLink.cloud — auto-discovery, offline queue, wind gusts, moon phases, and NMEA 2000 network health monitoring

Readme

signalk-sealink-cloud

Signal K server plugin that streams NMEA vessel data to SeaLink.cloud for remote monitoring.

Features

  • Auto-discovery — common NMEA paths (wind, depth, temperature, batteries, solar) are mapped automatically with friendly names
  • Unit conversion — converts Signal K SI units (m/s, Kelvin, radians) to nautical units (kts, degrees C, degrees)
  • Wind gust tracking — calculates rolling max wind speed over 1-min, 5-min, 1-hr, 12-hr, and 24-hr windows (replaces signalk-gusts plugin)
  • Moon data — computes moon phase, illumination, age, distance, and next full/new moon dates (replaces signalk-moon-plugin)
  • Batched transmission — collects data points and sends them in configurable intervals (default: 30 seconds)
  • Offline queue — failed batches are persisted to disk and retried when the connection returns; survives plugin restarts, bounded by count and age
  • Position reporting — sends GPS position to the SeaLink.cloud Location endpoint
  • Dynamic battery/solar — automatically discovers all battery banks and solar panels via wildcard patterns
  • Custom mappings — map any Signal K data path to a SeaLink.cloud data key
  • Per-path control — disable any individual path from being sent

Installation

In the Signal K server admin UI, go to Appstore and search for sealink-cloud, or install via npm:

npm install signalk-sealink-cloud

Configuration

  1. In Signal K admin UI, go to Server -> Plugin Config -> SeaLink.cloud
  2. Enter your Boat ID and Device Key (found in your SeaLink.cloud dashboard under Setup -> Device & API)
  3. Optionally configure:
    • Send Interval — how often to send data (5-300 seconds, default 30)
    • Send Position — enable/disable GPS position reporting
    • Queue Data When Offline — persist failed batches to disk and retry when the connection returns (default: on)
    • Max Queued Batches — maximum number of batches to hold on disk; oldest dropped first (default: 500 ≈ 4 hours at 30s interval)
    • Max Queue Age (hours) — drop queued batches older than this (default: 48)
    • Calculate Wind Gusts — enable/disable built-in gust calculation (default: on)
    • Gust Wind Source Path — which wind path to use for gust calculation (default: environment.wind.speedApparent)
    • Calculate Moon Data — enable/disable built-in moon calculations (default: on)
    • Moon Calculation Interval — how often to recalculate moon data (5-1440 minutes, default 60)
    • Use Default Mappings — auto-map common NMEA paths with unit conversion
    • Custom Mappings — add your own Signal K path to SeaLink key mappings
    • Disabled Paths — exclude specific Signal K paths from being sent

Default Mappings

| Signal K Path | SeaLink Key | Unit | |--------------|-------------|------| | environment.wind.speedApparent | wind.speed | kts | | environment.wind.speedTrue | wind.speedTrue | kts | | environment.wind.angleApparent | wind.angle | degrees | | environment.wind.directionTrue | wind.direction | degrees | | environment.water.temperature | water.temp | degrees C | | environment.depth.belowTransducer | depth | m | | environment.depth.belowSurface | depth.surface | m | | environment.depth.belowKeel | depth.keel | m | | environment.outside.temperature | environment.temp | degrees C | | environment.outside.pressure | environment.pressure | hPa | | environment.outside.humidity | environment.humidity | % | | navigation.speedOverGround | navigation.sog | kts | | navigation.headingTrue | navigation.hdg | degrees | | navigation.headingMagnetic | navigation.hdgMag | degrees | | navigation.courseOverGroundTrue | navigation.cog | degrees | | electrical.batteries..voltage | battery.{name}.voltage | V | | electrical.batteries..current | battery.{name}.current | A | | electrical.batteries..capacity.stateOfCharge | battery.{name}.soc | % | | electrical.batteries..capacity.timeRemaining | battery.{name}.timeLeft | h | | electrical.solar..panelPower | solar.{name}.power | W | | electrical.solar..panelCurrent | solar.{name}.current | A | | electrical.solar..panelVoltage | solar.{name}.voltage | V | | electrical.solar..yieldToday | solar.{name}.yield | Wh |

Wind Gust Data

When gust calculation is enabled, the plugin tracks the maximum apparent wind speed over rolling time windows and sends these additional data points:

| SeaLink Key | Description | |-------------|-------------| | wind.gust.1min | Max wind speed in the last 1 minute (kts) | | wind.gust.5min | Max wind speed in the last 5 minutes (kts) | | wind.gust.1hr | Max wind speed in the last 1 hour (kts) | | wind.gust.12hr | Max wind speed in the last 12 hours (kts) | | wind.gust.24hr | Max wind speed in the last 24 hours (kts) |

The wind source path is configurable — use environment.wind.speedApparent (default) or environment.wind.speedTrue.

Moon Data

When moon calculation is enabled, the plugin computes astronomical moon data and sends these additional data points:

| SeaLink Key | Description | |-------------|-------------| | moon.phase | Current moon phase (e.g. FullMoon, WaxingCrescent) | | moon.illumination | Moon illumination (%) | | moon.age | Moon age in days (0 to ~29.5) | | moon.distance | Distance from Earth to Moon (km) | | moon.nextFullMoon | Next full moon date (ISO 8601 UTC) | | moon.nextNewMoon | Next new moon date (ISO 8601 UTC) |

Moon data changes slowly, so the default calculation interval is 60 minutes.

Offline Queue

When the plugin can't reach SeaLink.cloud (connectivity loss, server downtime, timeout, etc.), failed batches are written to disk in the plugin's Signal K data directory under queue/ as one JSON file per batch. Writes are atomic — an interrupted write will never corrupt the queue.

On every send cycle, the plugin drains up to 10 queued batches (oldest first) before sending the current batch. If a drain send fails, the plugin assumes it's still offline and stops trying until the next cycle. When the connection returns, batches are replayed to the server in their original chronological order.

The queue is bounded by both count and age — whichever limit is hit first causes the oldest batches to be dropped. With the defaults (500 batches, 48 hours), a 30-second send interval gives you roughly 4 hours of uninterrupted offline capacity before the count limit takes effect.

The queue survives plugin restarts and Signal K server reboots. The current queue depth is shown in the plugin status line in the Signal K admin UI.

To disable the queue entirely (restoring the old drop-on-failure behavior), set Queue Data When Offline to off.

Custom Mappings

Add custom mappings in the plugin configuration to map any Signal K path:

{
  "signalkPath": "tanks.freshWater.0.currentLevel",
  "sealinkKey": "tank.freshwater.level",
  "unit": "%"
}

Note: custom mappings receive raw SI values (no unit conversion is applied by the plugin).

API Endpoints Used

  • POST /DataPoint/Ingest — batch data point ingestion
  • POST /Location/AddLocation — GPS position reporting

License

MIT