- 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
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)
- Copy the project folder to
/data/dbus-no-foreign-landon your Venus OS device - Run
bash /data/dbus-no-foreign-land/install.sh - Run
bash /data/dbus-no-foreign-land/install_gui.shto add NFL Tracking to Settings → GPS - 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 (10–3600s)
- Min distance – Meters moved before logging new point (1–10000m)
- Send interval – Minutes between API uploads (1–1440min)
- 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:
- Reads
com.victronenergy.system→/GpsServiceto get the best GPS service name (e.g.com.victronenergy.gps.ve_ttyUSB0) - Reads position from that GPS service:
- Prefers
/Latitudeand/Longitude(numeric) - Fallback:
/Position(string"lat,lon")
- Prefers
- 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 -yon the device and inspectcom.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