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.14.tar.gz (20.8 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.14-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file pyfastnet-2.0.14.tar.gz.

File metadata

  • Download URL: pyfastnet-2.0.14.tar.gz
  • Upload date:
  • Size: 20.8 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.14.tar.gz
Algorithm Hash digest
SHA256 7d9a59c181c77722071d0a415634406a77f8d59dd09b4bfbff1f41bee75f9520
MD5 670531401c425dc95355f9c15aff5715
BLAKE2b-256 432c95287256505cf064ac242019a4701fe0e73c33ea49a6b7007f306fa7e859

See more details on using hashes here.

File details

Details for the file pyfastnet-2.0.14-py3-none-any.whl.

File metadata

  • Download URL: pyfastnet-2.0.14-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.14-py3-none-any.whl
Algorithm Hash digest
SHA256 9b273aa71612b86d2b0cec0bc56c84c17c8ea6cdfd6c2fb956fe670958459e0b
MD5 307a0e8cf7fce3aa47cddaec60e5253b
BLAKE2b-256 0877be43a6f11e8d7fd66380f2b0d1191b4e407269db23ce05a34a9a13a518b7

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