A Python library for decoding FastNet protocol data streams.
Project description
pyfastnet
Python library for decoding the FastNet protocol used by B&G Hydra/H2000 instruments. Developed for personal use and published for general interest.
Purpose
Feed a raw byte stream from a FastNet bus into the library. It handles synchronisation, checksum validation, and decoding — returning structured instrument data ready for further processing.
Installation
pip install pyfastnet
Example usage
#!/usr/bin/env python3
import serial
from fastnet_decoder import FrameBuffer
fb = FrameBuffer()
ser = serial.Serial(
port="/dev/ttyUSB0",
baudrate=28800,
bytesize=serial.EIGHTBITS,
stopbits=serial.STOPBITS_TWO,
parity=serial.PARITY_ODD,
timeout=0.1,
)
try:
while True:
data = ser.read(256)
if not data:
continue
fb.add_to_buffer(data)
fb.get_complete_frames()
while not fb.frame_queue.empty():
frame = fb.frame_queue.get()
for channel, decoded in frame["values"].items():
print(channel, decoded)
finally:
ser.close()
Output format
Each decoded frame is a dict with to_address, from_address, command, and values. Each entry in values is keyed by channel name:
{
"to_address": "Entire System",
"from_address": "Normal CPU (Wind Board in H2000)",
"command": "Broadcast",
"values": {
"Apparent Wind Speed (Knots)": {
"channel_id": "0x4D",
"value": 7.0,
"display_text": "7.0",
"layout": None,
},
"Apparent Wind Angle": {
"channel_id": "0x51",
"value": -6.0,
"display_text": "-6.0",
"layout": "-[data]",
},
"True Wind Direction": {
"channel_id": "0x6D",
"value": 213.0,
"display_text": "213.0°M",
"layout": "°M",
},
}
}
Position (LatLon) frames
Position frames (command LatLon) appear under the "LatLon" key. The raw coordinate
string (DDMM.mmm with hemisphere letters) is carried in display_text; value is
None. The originating source's marker byte is preserved in channel_id (e.g. 0x47,
0x4E) but does not affect the key:
"LatLon": {
"channel_id": "0x4E",
"value": None,
"display_text": "3352.450S15113.920E",
"layout": None,
}
Layout field
The layout field describes the indicator symbol shown on the physical display around the numeric value:
layout |
Meaning | Sign |
|---|---|---|
None |
No indicator symbol | positive |
"[data]=" |
= after value (starboard) |
positive |
"=[data]" |
= before value (port) |
negative |
"[data]-" |
- after value (starboard) |
positive |
"-[data]" |
- before value (port) |
negative |
"H[data]" |
H prefix — heading |
positive |
"°M" |
Magnetic bearing suffix | positive |
"u[data]" |
u prefix — upwind (VMG) |
positive |
"d[data]" |
d prefix — downwind (VMG) |
positive |
"L[data]" |
L before — leeway port |
negative |
"[data]L" |
L after — AP compass target |
positive |
"[data]°C" |
Celsius suffix | positive |
"[data]°F" |
Fahrenheit suffix | positive |
"[data]z" / "z[data]" |
Dog-leg symbol — AP off course | positive |
"TBC" |
Symbol seen but not yet identified | positive |
Debug API
from fastnet_decoder import set_log_level
import logging
set_log_level(logging.DEBUG)
fb.get_buffer_size() # bytes currently in buffer
fb.get_buffer_contents() # hex string of buffer contents
Companion apps
- fastnet2ip — reads FastNet from serial, broadcasts NMEA 0183 via UDP
- fastnet2ip_n2k — reads FastNet from serial, broadcasts NMEA 2000 via UDP
Both run on Raspberry Pi, macOS, or Linux.
Acknowledgments
- trlafleur — background research
- Oppedijk — protocol documentation
- timmathews — C++ reference implementation
Project details
Release history Release notifications | RSS feed
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 pyfastnet-2.0.15.tar.gz.
File metadata
- Download URL: pyfastnet-2.0.15.tar.gz
- Upload date:
- Size: 21.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 |
6dc9eee0717eabe1a236cab3943195f3e476515394861aa8744f870c39511ae8
|
|
| MD5 |
bfc71c41deb5fa7862ce17385fc6a0db
|
|
| BLAKE2b-256 |
058b1bda6170a12ea125e420b5970b4d1915f86e5647a69be42f8935a5b7ce20
|
File details
Details for the file pyfastnet-2.0.15-py3-none-any.whl.
File metadata
- Download URL: pyfastnet-2.0.15-py3-none-any.whl
- Upload date:
- Size: 12.7 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 |
9a4d1b4bb354a5c298de2fcdaad832a7cce1cd4925e0fbb6d4753b4001444bf7
|
|
| MD5 |
501499a510d9d642cd0eb6085a744a09
|
|
| BLAKE2b-256 |
4e37e38598db236cf3f2ca081667c37172bccfd9364370726488b95f30156661
|