ChroGPS Dash Troubleshooting
Installation & Service Issues
- Dashboard not loading (Nginx “Welcome” Page)
If you see the default “Welcome to nginx!” page after installation, it means the default Nginx configuration is still active and taking priority over ChroGPS Dash.
To resolve this, run the following commands to disable the default site and restart the web server:
sudo rm /etc/nginx/sites-enabled/default && sudo systemctl restart nginxCautionThis permanently removes the default Nginx site symlink. If you have other virtual hosts configured on this server, verify they have their own site configs in/etc/nginx/sites-enabled/before running this.- Chrony failed after hardware provisioning (
/dev/pps0not found) If you ran the hardware provisioning script in GPIO mode and Chrony is failing to start with an error like:
Fatal error: Could not open /dev/pps0: No such file or directoryor
systemctl status chronyshows the service in a failed state immediately after running the provisioning script – this is expected behavior and not a bug. In GPIO mode, thepps-gpioDevice Tree overlay (added toconfig.txt) must activate before/dev/pps0is created, and that only happens after a reboot. Reboot and the error will not recur:sudo rebootNoteIf you installed ChroGPS Dash immediately after hardware provisioning (without rebooting first), the installer’s Chrony configuration step will print a yellow advisory message instead of the normal green success line. This is intentional – the installer detected that Chrony could not restart and deferred it to boot time. The ChroGPS Dash installation completed successfully and everything will work after reboot.USB mode does not have this issue – GPSd and Chrony are restarted by the provisioning script immediately and no reboot is required.
- GPSd not seeing the GNSS receiver after GPIO provisioning
After rebooting following GPIO mode setup, if GPSd reports no device or no data from the GNSS receiver:
- Confirm the serial device exists:
ls -la /dev/serial0 /dev/ttyAMA0 - Confirm the
disable-btandpps-gpiooverlays are active:Both should appear in the output. If they don’t, verify yourdtoverlay -lconfig.txtcontains the entries added by the provisioning script and that you have fully rebooted (not just restarted services). - Verify GPSd is pointed at the correct device:
cat /etc/default/gpsd - Check GPSd logs for errors:
journalctl -u gpsd -n 50
NoteOn Raspberry Pi 3, 4, Zero W, and Zero 2W, thedtoverlay=disable-btentry inconfig.txtis essential. Without it, Bluetooth occupies the reliable PL011 UART (ttyAMA0), leaving the GPS receiver on the unreliable mini-UART (ttyS0), which often results in garbage or missing data. The provisioning script adds this automatically, but it only takes effect after a reboot.- Confirm the serial device exists:
- Empty Graphs?
If graphs appear but have no data:
- Verify Chrony is logging:
sudo ls -l /var/log/chrony/ - Wait a few minutes for logs to populate.
- Run the installer again to re-apply permission fixes.
TipGraphs are populated by thechrogps-pollersystemd timer, which polls the dashboard endpoint every 30 seconds in the background – no browser tab needs to be open. Verify it is running:systemctl status chrogps-poller.timer. If it is inactive, re-running the installer will re-enable it.- Verify Chrony is logging:
- Upgraded your OS and now the Dashboard won’t load or throws an error?
- Recommended
Re-Run the Installer
OS upgrades often bump the PHP-FPM version (e.g. Debian 12 → PHP 8.2, Debian 13 → PHP 8.4). Re-running the one-line installer detects and corrects this automatically - no manual Nginx or PHP reconfiguration needed.<a href="../#installer" class="advisory-cta"> <i data-feather="arrow-right"></i> Quick Installer </a> </div>- “Cannot create/open log file: …” Message?
- You broke something. Simply re-run the installer to fix it.
GPS & Satellite Data Issues
- Wrong constellation colors?
Your GPS receiver may be using u-blox-style
gnssidvalues instead of the NMEA standard. ChroGPS Dash handles both automatically by validatinggnssidagainst PRN ranges.To verify which scheme your receiver is using:
gpspipe -w | grep '"class":"SKY"' | head -3 | jq '.satellites[]? | {PRN, gnssid}'NoteRequires
gpspipeandjq. If either is missing, run:sudo apt-get install -y gpsd-clients jqThen re-run the test command.
If you see GLONASS satellites (PRN 65-96) with
gnssid=6, that’s u-blox numbering. If you seegnssid=2, that’s NMEA numbering. ChroGPS Dash handles both correctly.- Missing satellites?
Some receivers report satellites across multiple gpsd messages. ChroGPS Dash caches satellites for 30 seconds to accumulate all of them - the satellite count should grow from ~15 to ~25 over a few refreshes.
NoteIt is normal for the count to be lower immediately after a page load or service restart. Allow 3-5 refresh cycles (~30-60 seconds) for the satellite cache to fully populate before concluding that satellites are missing.To inspect the cache directly:
cat /var/tmp/cgpsd-sat-cache.json | jq '.satellites | length'- Duplicate satellites on a multi-band receiver?
- ChroGPS Dash automatically aggregates multiple signals per satellite and shows only the strongest. You should see one entry per PRN regardless of how many frequency bands are being tracked. If you are seeing duplicates, patches are welcome .
- Satellites showing but no position fix?
Check that you have:
- A clear view of the sky.
- At least 4 satellites with good signal (> 25 dBHz).
- HDOP < 5.0.
- Waited 30–60 seconds for the initial fix after startup.
Access & Security
- Locked out of the dashboard? (Dashboard Gate)
If
DASHBOARD_REQUIRE_AUTHis enabled and you have lost or forgotten the admin token, you cannot authenticate through the browser - the gate lock screen will reject all attempts. To regain access:Option 1 - Display the current token (no change):
curl -fsSL https://chro.gpsda.sh/install | sudo bash -s -- -dtThis prints the token currently stored in
cgpsd-settings.phpwithout modifying anything.Option 2 - Read it directly from the settings file:
sudo grep ADMIN_TOKEN /var/www/chrogps-dash/cgpsd-settings.phpOption 3 - Temporarily disable the gate via SSH:
sudo sed -i 's/\$DASHBOARD_REQUIRE_AUTH = true/\$DASHBOARD_REQUIRE_AUTH = false/' \ /var/www/chrogps-dash/cgpsd-settings.phpThis disables the gate immediately (no restart needed). Re-enable it from the Admin Panel once you have your token.
TipIf you need to reset the admin token entirely, run the installer with the
-rtflag:curl -fsSL https://chro.gpsda.sh/install | sudo bash -s -- -rtThis generates a new random token and prints it to the terminal. Any existing dashboard gate sessions will be invalidated automatically since the HMAC cookie is derived from the token.
General Support (Note: lack thereof)
- Q: “It’s not working, can you help me?”
- A: No.
- Q: “But I used the installer!”
A: It works on my machines.
¯\_(ツ)_/¯This project is a labor of love, not a job. Please consult the Googles, the Linux man pages, or your local wizard for assistance.
In all (kind-of-)seriousness…
This dashboard is provided with a strict “You Break It, You Fix It” warranty.
I have provided crystal-clear instructions and a magical installer script that does 99% of the work for you. If you still manage to break it, congratulations! You have just discovered a learning opportunity.
- Documentation & Code: Read it again. Slower this time.
- Bugs: If you find a bug, patches are welcome .
- Tech Support: I do not offer tech support. If I did, I would charge a lot more than “Free.”
- Q: “Does ChroGPS Dash support the ntpd daemon from Network Time Foundation/ISC (or ntpsec or ntpd-rs or timesyncd or openntpd etc.)?”
- A: God no. And it never will. Chrony is superior in every way. Just…use…Chrony .
- Q: “Can I install ChroGPS Dash on WPSD??”
- A: No!!! 🛑 🚫
Look, I know I wrote both of these apps, but they were (deliberately) designed to not play nice together. WPSD is a managed ‘appliance’ - it likes its designs/setups exactly how they are.
Install ChroGPS Dash on a fresh or other existing, non-WPSD Linux instance so that WPSD remains happy and functional.
For the love of God…Just leave your WPSD installation alone and let it be. 🤦
WarningIf you haven't gotten the hint yet, I do not offer support nor do I respond to support inquiries. That means do not ask for support.
This project was created by me as a pet project in order to scratch an itch: I could not find anything like it (otherwise, I'd be using it). I am sharing it with you and giving it away for free; but that does not automatically obligate me to support you.
Asking for support is a guarantee you will be ignored. No fun!
Quick-Copy Links
Authored on 2024-01-10