Skip to main content

Minimal, fast NMEA 2000 single-frame PGN decoder

Project description

pylibnmea2k

Minimal, fast NMEA 2000 single-frame PGN decoder for Python.

Decodes Yacht Devices YDWG-02 text format:

HH:MM:SS.mmm R 0xCANID DD DD DD DD DD DD DD DD

Returns typed dataclasses. No dependencies beyond the standard library.

Install

pip install pylibnmea2k

Usage

import pylibnmea2k

# Stateless
msg = pylibnmea2k.decode(line)

# Stateful wrapper (same interface)
decoder = pylibnmea2k.Decoder()
msg = decoder.decode(line)

# Filter to specific PGNs — non-matching frames cost ~0.5 µs and return None
decoder = pylibnmea2k.Decoder(include_pgns={pylibnmea2k.PGN_WIND, pylibnmea2k.PGN_COG_SOG})
msg = decoder.decode(line)

decode() returns a typed dataclass or None if the PGN is unsupported or fields are not available.

Supported PGNs

PGN Name Key fields
127245 Rudder position_deg
127250 Vessel Heading hdg_deg
127251 Rate of Turn rot_rad_s
127257 Attitude yaw_deg, pitch_deg, roll_deg
127505 Fluid Level level_pct, capacity_l, fluid_type
127508 Battery Status voltage_v, current_a, temp_k
128259 Speed Through Water stw_kn
128267 Water Depth depth_m, offset_m
129025 Position Rapid Update lat, lon
129026 COG & SOG Rapid Update cog_deg, sog_kn
129033 Date / Time date_days, time_s, local_offset_min
129283 Cross Track Error xte_m
130306 Wind speed_ms, angle_deg, reference
130310 Outside Environmental Params water_temp_k, air_temp_k, pressure_hpa
130311 Environmental Parameters temp_source, humidity_source, temp_k, humidity_pct, pressure_hpa

Fast-packet (multi-frame) PGNs are not currently supported.

Result types

All dataclasses include pgn, priority, and source fields. Optional fields are float | NoneNone means the device reported "not available".

msg = pylibnmea2k.decode(line)
if isinstance(msg, pylibnmea2k.CogSog):
    print(f"COG {msg.cog_deg:.1f}°  SOG {msg.sog_kn:.1f} kn")

if isinstance(msg, pylibnmea2k.Wind):
    ref = ["True(N)", "Magnetic", "Apparent", "True(boat)", "True(water)"][msg.reference]
    print(f"Wind {msg.speed_ms:.1f} m/s at {msg.angle_deg:.1f}° ({ref})")

Performance

Struct-based decoding with no library dependencies. On a typical ARM Cortex-A7 at 650 MHz, decoding a matching PGN takes ~30–45 µs; discarding a non-matching frame takes ~0.5 µs.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pylibnmea2k-0.2.3.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pylibnmea2k-0.2.3-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

Details for the file pylibnmea2k-0.2.3.tar.gz.

File metadata

  • Download URL: pylibnmea2k-0.2.3.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pylibnmea2k-0.2.3.tar.gz
Algorithm Hash digest
SHA256 08bfde669e33d56abc9d32d845edfb6eb85c4813b0ca56176ed4a421abff454e
MD5 bdec9061a4a5c527a5fd4d85c94c3c4e
BLAKE2b-256 f22128a710d05263651e96f41b2c54f9c56247b87dd042f22baa9afdc2db6949

See more details on using hashes here.

File details

Details for the file pylibnmea2k-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: pylibnmea2k-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 8.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pylibnmea2k-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 062fef9c4e23f18de122c1e175b6ded4970aa3caf612b7b664dfd1a0f7a106d3
MD5 642e623a46595301a766e19ee2205d6f
BLAKE2b-256 9340f4a3d41caf17d6cf67737b3b13e9f41f0d957f6cec363607959e9394bee4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page