Files

Raymarine LightHouse Protocol Decoder

A Python toolkit for decoding sensor data from Raymarine AXIOM/LightHouse multicast networks.

See PROTOCOL.md for detailed protocol analysis and field mappings.

Protocol Discovery Summary

Key Finding: Raymarine uses Google Protocol Buffers over UDP multicast, NOT standard NMEA 0183.

Decoding Status

Sensor Status Field Notes
GPS Position Reliable 2.1, 2.2 64-bit doubles, decimal degrees
Compass Heading Variable 3.2 32-bit float, radians
Wind Direction Variable 13.4 32-bit float, radians (true)
Wind Speed Variable 13.5, 13.6 32-bit float, m/s (true/apparent)
Depth Variable 7.1 32-bit float, meters
Water Temperature Reliable 15.9 32-bit float, Kelvin
Air Temperature Variable 15.3 32-bit float, Kelvin
Tank Levels Reliable 16 Repeated field with ID, status, level %
House Batteries Reliable 20 Repeated field with ID and voltage
Engine Batteries Reliable 14.3.4 Deep nested (3 levels) with voltage

Why Variable?

Without Raymarine's proprietary protobuf schema, we're reverse-engineering blind:

  • Same field numbers mean different things in different packet types
  • Packet structure varies by size (344 bytes vs 2056 bytes)
  • No message type identifiers in headers

See PROTOCOL.md for the full technical analysis.

Multicast Groups & Sources

Group Port Source IP Device Data
226.192.206.98 2561 10.22.6.115 Unknown Navigation (mostly zeros)
226.192.206.99 2562 198.18.1.170 AXIOM 12 (Data Master) Heartbeat/status
226.192.206.102 2565 198.18.1.170 AXIOM 12 (Data Master) Primary sensor data
226.192.219.0 3221 198.18.2.191 AXIOM PLUS 12 RV Display sync

Primary Data Source: 198.18.1.170 broadcasts GPS, wind, depth, heading, temperatures, tank levels, and battery voltages.

Data Encoding

  • Wire format: Protobuf (fixed64 doubles + fixed32 floats)
  • Angles: Radians (multiply by 57.2958 for degrees)
  • Wind speed: m/s (multiply by 1.94384 for knots)
  • Depth: Meters (divide by 0.3048 for feet)
  • Temperature: Kelvin (subtract 273.15 for Celsius)
  • Tank levels: Percentage (0-100%)
  • Battery voltage: Volts (direct value)

Quick Start

No installation required - clone and run. Uses only Python standard library.

git clone https://github.com/terbonium/axiom-nmea.git
cd axiom-nmea

Optional: Install as a package for use in your own projects:

pip install -e .

Usage

# Run the decoder with live dashboard (requires network access to Raymarine VLAN)
python debug/protobuf_decoder.py -i YOUR_VLAN_IP

# JSON output (for integration with other systems)
python debug/protobuf_decoder.py -i YOUR_VLAN_IP --json

# Decode from pcap file (offline analysis)
python debug/protobuf_decoder.py --pcap samples/raymarine_sample.pcap

Replace YOUR_VLAN_IP with your VLAN interface IP (e.g., 198.18.5.5).

Sample Output

============================================================
  RAYMARINE DECODER (Protobuf)                    16:13:21
============================================================
  GPS:     24.932652, -80.627569
  Heading: 35.2°
  Wind:    14.6 kts @ 68.5° (true)
  Depth:   7.5 ft (2.3 m)
  Temp:    Air 24.8°C / 76.6°F, Water 26.2°C / 79.2°F
  Tanks:   Stbd Fuel: 75.2% (199gal), Port Fuel: 68.1% (180gal), ...
  Batts:   Aft House: 26.3V, Stern House: 27.2V, Port Engine: 26.5V
------------------------------------------------------------
  Packets: 9444  Decoded: 8921  Uptime: 124.5s
============================================================

Directory Structure

axiom-nmea/
├── debug/              # Debug and analysis tools (see debug/README.md)
├── examples/           # Example applications
│   ├── quickstart/     # Minimal library usage example
│   ├── nmea-server-example/  # TCP NMEA sentence server
│   ├── pcap-to-nmea/   # Convert pcap to NMEA sentences
│   ├── sensor-monitor/ # Real-time sensor update monitor
│   ├── victron-bridge/ # Victron Venus OS integration
│   └── windy-station/  # Windy.com weather station
├── nmea-server/        # Dockerized NMEA server
├── raymarine_nmea/     # Core library
├── samples/            # Sample pcap files (not committed)
└── PROTOCOL.md         # Protocol documentation

Tools Included

All debug tools are in the debug/ directory. See debug/README.md for full documentation.

Main Decoders

Tool Description
debug/protobuf_decoder.py Primary decoder - all fields via proper protobuf parsing
debug/raymarine_decoder.py Alternative decoder with live dashboard display

Discovery Tools

Tool Description
debug/battery_debug.py Deep nesting parser for battery fields (Field 14.3.4)
debug/battery_finder.py Scans multicast groups for voltage-like values
debug/tank_debug.py Raw Field 16 entry inspection
debug/tank_finder.py Searches for tank level percentages
debug/field_debugger.py Deep analysis of packet fields

Analysis Tools

Tool Description
debug/analyze_structure.py Packet structure analysis
debug/field_mapping.py Documents the protobuf structure
debug/protobuf_parser.py Lower-level wire format decoder
debug/watch_field.py Monitor specific field values over time

Wind/Heading Finders

Tool Description
debug/wind_finder.py Searches for wind speed values
debug/find_twd.py Searches for true wind direction
debug/find_heading_vs_twd.py Compares heading and TWD values
debug/find_consistent_heading.py Identifies stable heading fields

Network Configuration

VLAN Setup

Your network needs access to the Raymarine VLAN to receive multicast traffic:

# Check VLAN interface exists
ip link show vlan.200

# If not, create it (requires VLAN support)
sudo ip link add link eth0 name vlan.200 type vlan id 200
sudo ip link set dev vlan.200 up
sudo dhclient vlan.200

Testing Multicast Reception

Before running the decoder, verify you can receive the multicast traffic:

# Check if multicast traffic is arriving
tcpdump -i vlan.200 -c 10 'udp and dst net 224.0.0.0/4'

# Look for specific ports
tcpdump -i vlan.200 -c 20 'udp port 2561 or udp port 2562 or udp port 2565'

Sample PCAP Files

Place your packet captures in the samples/ directory for offline analysis:

  • samples/raymarine_sample.pcap - General sample data
  • samples/raymarine_sample_TWD_62-70_HDG_29-35.pcap - Known heading/wind angles
  • samples/raymarine_sample_twd_69-73.pcap - Additional wind samples

See samples/README.md for capture instructions. Note: .pcap files are not committed to git.

License

MIT License - Use freely for debugging your marine electronics.