Description
Boat Position turns your WordPress site into a live tracking and logbook service for your boat.
The plugin is designed around the Teltonika RUTX50 router (*), a compact Linux-based 5G router with built-in GPS.
A shell script on the router sends a position to your site every minute. The plugin stores each position, runs a state machine to group positions into trips and legs, and serves two public pages:
- Live map (
/boat-position/map) — shows the current position on an OpenStreetMap/OpenSeaMap map with a rotating arrow icon when underway and an idle indicator when stopped. - Logbook (
/boat-position/history) — calendar sidebar with trip history. Click any day to see the full route on the map. Logged-in editors can label harbour names and merge incorrectly split trips.
Over 150 Danish harbours are included as seed data so harbour names are detected automatically from GPS coordinates.
No third-party services or API keys are required beyond your own WordPress site. Maps are rendered using the free Leaflet.js library with OpenStreetMap and OpenSeaMap tiles.
(*) There are other alternatives to using the RTUTX50 router, any device that has access to a GPS and the internet can be configured as the source of position data.
E.g. a linux machine like Rasberry PI connected to either its own GPS or the boat NMEA data.
Screenshots
Installation
- Upload the
boat-positiondirectory to/wp-content/plugins/. - Activate the plugin in Plugins in the WordPress admin.
- Go to Settings Boat Position to set a secret API key and find the router configuration instructions.
- Follow the router setup guide in Plugins Boat Position About to configure your router’s
sendgps.shscript and cron job. - Send a test position from a command prompt to verify the endpoint is working before installing on the boat.
After activation, if /boat-position/map returns a 404, go to Settings Permalinks and click Save Changes to flush the rewrite rules.
FAQ
-
How do I use this plugin?
-
Install and activate the plugin, then go to Settings Boat Position. Set a secret API key, then follow the router configuration guide in the About page to set up your router’s cron job.
-
Does it only work with the RUTX50 router?
-
No. Any device that can send an HTTP POST request with
lat,lon,speed,course, andgps_timefields to the REST endpoint will work. The About page documents the exact format. -
Where are the public pages?
-
The plugin registers two pages automatically — no WordPress pages or shortcodes are needed:
- Live map:
https://yoursite.com/boat-position/map - Logbook:
https://yoursite.com/boat-position/history
- Live map:
-
Can I avoid storing the secret key in the database?
-
Yes. Define the key as a constant in
wp-config.php:define( ‘PCIO_BOAT_POSITION_API_KEY’, ‘your-secret-key-here’ );
When this constant is present, the database option is ignored and the settings field is shown as read-only.
-
The logbook is empty — no trips appear.
-
Check that the router is sending data by looking at your database’s
wp_boat_positionstable. If rows are present but no trips appear, the trip engine may not have processed them yet — visit the ingest endpoint directly or check the About page for the manual trigger curl command.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Boat Position” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Boat Position” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0
- Initial release.


