Skip to main content

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

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

pyfastnet-2.0.15.tar.gz (21.1 kB view details)

Uploaded Source

Built Distribution

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

pyfastnet-2.0.15-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

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

Hashes for pyfastnet-2.0.15.tar.gz
Algorithm Hash digest
SHA256 6dc9eee0717eabe1a236cab3943195f3e476515394861aa8744f870c39511ae8
MD5 bfc71c41deb5fa7862ce17385fc6a0db
BLAKE2b-256 058b1bda6170a12ea125e420b5970b4d1915f86e5647a69be42f8935a5b7ce20

See more details on using hashes here.

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

Hashes for pyfastnet-2.0.15-py3-none-any.whl
Algorithm Hash digest
SHA256 9a4d1b4bb354a5c298de2fcdaad832a7cce1cd4925e0fbb6d4753b4001444bf7
MD5 501499a510d9d642cd0eb6085a744a09
BLAKE2b-256 4e37e38598db236cf3f2ca081667c37172bccfd9364370726488b95f30156661

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