Jump to content

Hamradio/svxspot dashboard

From MediaWiki For Hamradio Analog/Digital and Debian v13 software/Raspberry PI v3/4/5 howto

A beginner's guide to SvxSpot Dashboard: a small web page you install on your SvxLink node (a Raspberry Pi hotspot or an FM repeater) that shows what the node is doing and lets you change talkgroup, edit the config, and more — from a phone or PC. One .deb sets up the whole web stack for you.

💡 In one sentence: install one package on your node and you get a web page at http://svxspot.local/ that shows live status / last-heard / current talkgroup and gives you one-click TG switching, a DTMF keypad, and editors for svxlink.conf, EchoLink, RF and audio — plus Wi-Fi setup and reboot/shutdown buttons.
Browser talks HTTP to nginx on the node, which runs php-fpm and the PHP dashboard; it reads svxlink.conf and the log, and writes TG/DTMF to the SvxLink control pipe. An optional MQTT agent lets an external portal switch TG too.

Do I need this?

  • You run a SvxLink node — a "SvxSpot" hotspot or an FM repeater — and you want to see and control it from a browser instead of SSH and a text editor.
  • It installs on the same box as SvxLink (a Raspberry Pi or any Debian machine).
  • Optional extra: let an external portal switch your talkgroup over MQTT (handy for a club's control panel). Off by default — a plain LAN dashboard needs none of it.

What you need first

💡 The dashboard controls SvxLink — it doesn't replace it. SvxLink must already be installed and running on the node.
  • A SvxLink node running on Debian 12/13 or Raspberry Pi OS (bookworm/trixie), on a Pi 3/4/5, Pi Zero 2 W, or any Debian box.
  • SvxLink installed and running with /etc/svxlink/svxlink.conf (package svxlink-server).
  • For one-click talkgroup / DTMF control from the web, this line in your logic section of svxlink.conf:
DTMF_CTRL_PTY=/var/lib/svxlink/dtmf_svx
  • (Optional, MQTT only) broker host, port (usually 8883) and a username/password — only if you want remote portal control.

You do not install nginx or PHP yourself — the package pulls them in and configures them for you.

Install

Easiest — the one-line installer (downloads the newest release and installs it; apt fetches nginx/PHP automatically):

curl -fsSL https://git.sa7aux.se/bjorne/svxspot-dashboard/raw/branch/main/install.sh | sudo bash

Or install a .deb you copied over:

sudo apt install ./svxspot-dashboard_<version>_all.deb
💡 Use whatever version the release page shows in the filename (e.g. svxspot-dashboard_1.0.1_all.deb). The package is architecture-independent (_all) — the same file works on a Pi and on x86-64.

What the installer asks you

A normal install pops up a few questions (debconf). Sensible defaults are offered — you can just press Enter:

Question What to enter
Node callsign Auto-detected from svxlink.conf. Accept it.
Dashboard admin user Login name for the control pages. Default admin.
Admin password Type one, or leave empty to have a random 16-character password generated and printed once at the end — write it down.
Enable MQTT remote control? Default no. Say yes only if a portal will control this node; then it asks for broker host / username / password.

What it sets up for you

The installer does all the plumbing (and it's safe to re-run with sudo dpkg-reconfigure svxspot-dashboard):

  • installs and configures nginx (a site on port 80) and php-fpm;
  • creates the admin login (bcrypt htpasswd);
  • installs tightly-scoped sudo rules so the web user can save config and restart SvxLink — and nothing else;
  • adds the web user to the audio, tty, dialout, svxlink groups;
  • stages the optional MQTT agent (a systemd service) — enabled only if you turned MQTT on.

At the end it prints a banner with your dashboard URL, admin user, and (if generated) the password.

Open it

  • In a browser on the same network go to http://svxspot.local/ (or http://<node-ip>/ if the .local name doesn't resolve).
  • The status page needs no login. The control pages (TG, config editor, power, Wi-Fi, …) ask for the admin user/password you set.
⚠ If you flashed the ready-made SvxSpot SD-card image, the factory logins are SSH svxspot / raspberry and dashboard admin / svxspot. Change both immediately (see below).

What's on the dashboard

Page What it does
Start / Status Live status, last-heard stations, current talkgroup, quick-button keypad. (No login.)
TG + DTMF keypad Switch talkgroup with one tap; send raw DTMF.
Config Edit svxlink.conf in the browser with help text; every save makes a timestamped backup and restarts SvxLink.
EchoLink · RF (SA818) · Audio Editors for EchoLink, radio-module frequency/squelch, and audio levels.
Wi-Fi / Network Join a Wi-Fi network / set networking.
Power Reboot, shut down, or restart SvxLink.
Remote Control (MQTT) Turn the optional MQTT agent on/off and set the broker.
Node info · Map · Log Node metadata, map, and the SvxLink log.

You don't need to know this to use it, but it helps when troubleshooting: the dashboard reads /etc/svxlink/svxlink.conf and /var/log/svxlink to show status, and controls the node by writing DTMF strings (e.g. 91<tg># to switch TG) to the control pipe /var/lib/svxlink/dtmf_svx. Config edits are saved and SvxLink is restarted through the narrow sudo rules. That's it — no database.

Optional: remote control over MQTT

If you enabled MQTT, a small systemd agent (svxnode-mqtt) makes an outbound TLS connection to your broker on port 8883 (nothing to open in your router). An external portal publishes a talkgroup command, and the agent writes the same 91<tg># to the DTMF pipe — exactly what the web TG button does. Enable/disable it from the dashboard's Remote Control page, or re-run sudo dpkg-reconfigure svxspot-dashboard.

Change the admin password

No reconfigure needed — nginx re-reads the file on every request:

sudo htpasswd -B /etc/nginx/svxspot-dashboard.htpasswd admin

(Add -c to start a fresh file with only that user.)

Troubleshooting

Symptom Check
Page won't load systemctl status nginx, sudo nginx -t, and ls /etc/nginx/sites-enabled/ (should list svxspot-dashboard). Still broken → sudo dpkg-reconfigure svxspot-dashboard.
502 Bad Gateway php-fpm is down → sudo systemctl restart php*-fpm (use your actual version, e.g. php8.4-fpm).
Password refused sudo htpasswd -cB /etc/nginx/svxspot-dashboard.htpasswd admin (-c recreates it).
Status page empty / no callsign SvxLink isn't running or has no config → systemctl status svxlink, tail -n 30 /var/log/svxlink.
TG buttons do nothing Check grep DTMF_CTRL_PTY /etc/svxlink/svxlink.conf and that /var/lib/svxlink/dtmf_svx exists. Then sudo dpkg-reconfigure svxspot-dashboard and restart php-fpm.
“Save” permission error sudo visudo -cf /etc/sudoers.d/svxspot-dashboard must say "parsed OK".
MQTT stays inactive journalctl -u svxnode-mqtt -n 30 --no-pager — usually wrong password, wrong host, or port 8883 firewalled.
💡 Your installed PHP version isn't fixed — examples here use php8.4-fpm but your box might run php8.2-fpm. Substitute your own: ls /run/php/php*-fpm.sock.

Removing / starting over

  • Keep your settings: sudo apt remove svxspot-dashboard.
  • Wipe everything (incl. MQTT credentials): sudo apt purge svxspot-dashboard, then reinstall.

See also

  • Hamradio — SvxLink and the rest of the digital-voice how-tos.
  • Author: SA7AUX <bjorne@sa7aux.se>. GPL-3.0-or-later. Based on SVXLink-Dashboard-V2 / Guru-RF.