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)
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 |
| 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_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 | None — None 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pylibnmea2k-0.2.0.tar.gz.
File metadata
- Download URL: pylibnmea2k-0.2.0.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
02a83877c670b2da2fd4fa4c39475135b6daee96955418c16f0150e0f3def462
|
|
| MD5 |
a6083e011fb2200ca5f19caba8902786
|
|
| BLAKE2b-256 |
9d27194fe3530b653c59045221e868983c036c782cc7ad5092f542d05940068b
|
File details
Details for the file pylibnmea2k-0.2.0-py3-none-any.whl.
File metadata
- Download URL: pylibnmea2k-0.2.0-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8845d74e6f8884b95466bc60197ba5723b50e4e4ad62f887eec87a1d3470de70
|
|
| MD5 |
ae19004845cc7b7e8f6d398de25c8178
|
|
| BLAKE2b-256 |
d4ee0635ef88bdb7549607b8992e0dda8ca0e2686ecfa22169d5946c3a864c21
|