Files
Paul G 36a07dacb9 Extract shared signal-based D-Bus readers into lib/signal_reader.py
- Added lib/signal_reader.py with SignalGpsReader, SignalMeteoReader, and
  SignalDepthReader that use PropertiesChanged signal subscriptions instead
  of polling via GetValue(), reducing D-Bus overhead at steady state.
- Each reader discovers its service dynamically, seeds its cache with a
  one-shot GetValue, then relies on signals for all subsequent updates.
- Refactored dbus-tides, dbus-windy-station, dbus-no-foreign-land,
  dbus-lightning, and dbus-meteoblue-forecast to import from the shared
  library, removing ~600 lines of duplicated _unwrap() helpers and
  per-service GPS/meteo/depth reader classes.
- Updated install.sh for all five services to deploy signal_reader.py
  to /data/lib/ on the target device.
- Updated build-package.sh for all five services to bundle
  signal_reader.py into the .tar.gz package.
- Updated README.md with the new lib/ entry in the project table and
  documented the shared D-Bus readers pattern.
- Bumped version numbers in affected services (e.g. nfl_tracking 2.0.1).

Made-with: Cursor
2026-03-27 01:03:16 +00:00
..

NFL Tracking for Venus OS

A Venus OS addon that sends boat position and track data to noforeignland.com without requiring Signal K.

Features

  • Reads GPS position from Venus OS D-Bus (uses built-in dbus-python, no extra downloads)
  • Sends track data to the NFL API
  • Configurable via Settings menu (Settings → GPS → NFL Tracking)
  • 24h keepalive when boat is stationary
  • Runs as a daemon with automatic restart

Requirements

  • Venus OS device (Cerbo GX, Venus GX, etc.) with root access
  • Python 3 with dbus-python (built into Venus OS)
  • GPS connected to Venus OS (USB/serial GPS or router GPS)
  • noforeignland.com account and Boat API Key (Account > Settings > Boat tracking > API Key)
  • Internet connection for API uploads

Installation

From built package

# On your computer - build the package:
cd dbus-no-foreign-land
./build-package.sh --version 1.0.0

# Copy to Venus OS device:
scp dbus-no-foreign-land-1.0.0.tar.gz root@<device-ip>:/data/

# SSH to device and install:
ssh root@<device-ip>
cd /data && tar -xzf dbus-no-foreign-land-1.0.0.tar.gz
mv dbus-no-foreign-land /data/dbus-no-foreign-land
bash /data/dbus-no-foreign-land/install.sh
bash /data/dbus-no-foreign-land/install_gui.sh   # Add to Settings menu
# Configure via Settings → GPS → NFL Tracking (API key, boat name, intervals)

Manual install (from source)

  1. Copy the project folder to /data/dbus-no-foreign-land on your Venus OS device
  2. Run bash /data/dbus-no-foreign-land/install.sh
  3. Run bash /data/dbus-no-foreign-land/install_gui.sh to add NFL Tracking to Settings → GPS
  4. Configure via Settings → GPS → NFL Tracking (API key, boat name, intervals)

Configuration

All settings are configured via the Venus GUI: Settings → GPS → NFL Tracking

  • Boat API Key Get from noforeignland.com: Account > Settings > Boat tracking > API Key
  • Boat name Optional display name
  • Enable tracking Master on/off switch
  • Track interval Minimum seconds between points (103600s)
  • Min distance Meters moved before logging new point (110000m)
  • Send interval Minutes between API uploads (11440min)
  • 24h keepalive Send a point every 24h when stationary

Settings are stored in Venus localsettings (D-Bus) and persist across reboots.

Alternative: Configure via MQTT: N/<vrm-id>/nfltracking/0/Settings/BoatApiKey, etc.

GUI Settings

After install.sh, run install_gui.sh to add NFL Tracking to Settings → GPS:

bash /data/dbus-no-foreign-land/install_gui.sh

If the GUI goes blank, run install_gui.sh --remove to restore.

GPS Data Source

The addon reads GPS from Venus OS D-Bus:

  1. Reads com.victronenergy.system/GpsService to get the best GPS service name (e.g. com.victronenergy.gps.ve_ttyUSB0)
  2. Reads position from that GPS service:
    • Prefers /Latitude and /Longitude (numeric)
    • Fallback: /Position (string "lat,lon")
  3. Requires /Fix = 1 (GPS fix) before using position

If GPS data is not received:

  • Ensure GPS is connected and has a fix (Device List > Boat > GPS)
  • Run dbus -y on the device and inspect com.victronenergy.gps.* to verify paths
  • Some GPS sources (e.g. router NMEA) may use different path names

Debugging

# View logs
tail -F /var/log/dbus-no-foreign-land/current | tai64nlocal

# Restart service
/data/dbus-no-foreign-land/restart.sh

# Check status
svstat /service/dbus-no-foreign-land

Troubleshooting

"MemoryError" or "Cannot allocate memory" Python may fail to start on very low-RAM devices. Check free memory: free -m

Uninstall

bash /data/dbus-no-foreign-land/uninstall.sh

License

MIT