Project: SkyBridge Alaska Station ID: DOT-VHF Date: 2026-03-12
ssh blastly@192.168.1.81 # Ethernet
ssh blastly@192.168.1.80 # WiFi (backup)
| URL | Service | |—–|———| | http://192.168.1.81:8073 | OpenWebRX (SDR spectrum viewer) | | http://192.168.1.81:8504 | tar1090 (ADS-B aircraft map) | | http://192.168.1.81:8080 | Status Dashboard |
# All services at a glance
systemctl status openwebrx readsb dump978-fa skyaware978 tar1090 status-dashboard vhf-pipeline
# Dashboard (also viewable at :8080)
cat /mnt/nvme/skybridge/status.html
sudo smartctl -a /dev/nvme0n1 # Full SMART report
df -h /mnt/nvme # Disk usage
ls -lh /mnt/nvme/skybridge/ # Data directories
lsusb # Should show 3x RTL2838
rtl_test -d 0 -t # Test BLOGV4
rtl_test -d 1 -t # Test UAT978
rtl_test -d 2 -t # Test ADSB1090
ip addr show eth0 # Should be 192.168.1.81
ip addr show wlan0 # Should be 192.168.1.80
ping -c 3 8.8.8.8 # Internet connectivity
sudo systemctl start <service>
sudo systemctl stop <service>
sudo systemctl restart <service>
sudo systemctl status <service>
openwebrx — WebSDR receiverreadsb — ADS-B 1090 MHz decoderdump978-fa — UAT 978 MHz decoderskyaware978 — UAT web maptar1090 — ADS-B web mapstatus-dashboard — Health dashboardvhf-pipeline — VHF voice transcriptionnvme-backup.timer — Backup schedulersudo systemctl restart openwebrx readsb dump978-fa skyaware978 tar1090 status-dashboard
journalctl -u openwebrx -f # Follow live
journalctl -u readsb --since "1 hour ago"
journalctl -u vhf-pipeline -n 100 # Last 100 lines
sudo systemctl start vhf-pipeline
Requires: OpenWebRX running (provides rtl_tcp on :1235)
sudo systemctl stop vhf-pipeline
source ~/vhf-pipeline-venv/bin/activate
python ~/scripts/vhf-pipeline.py --freq 121800000 --model tiny.en --vad-threshold 0.005
source ~/vhf-pipeline-venv/bin/activate
python ~/scripts/test-pipeline.py
Expected: 17/17 tests pass. Runs without SDR hardware.
--vad-threshold (e.g., 0.003)--vad-threshold (e.g., 0.01)ls -lh /mnt/nvme/skybridge/vhf-audio/$(date +%Y-%m-%d)/
cat /mnt/nvme/skybridge/transcripts/$(date +%Y-%m-%d).txt
# From readsb JSON
python3 -c "import json; d=json.load(open('/run/readsb/aircraft.json')); print(f'Aircraft: {len(d[\"aircraft\"])}')"
sudo readsb-set-location 61.2181 -149.9003
nc 127.0.0.1 30003 (BaseStation format)nc 127.0.0.1 30005 (binary)Navigate to http://192.168.1.81:8073 → Settings (login required)
cd ~/openwebrx
OPENWEBRX_CONFIG_DIR=/var/lib/openwebrx ./venv/bin/openwebrx admin adduser admin
Edit /var/lib/openwebrx/settings.json or use the web admin panel.
systemctl status nvme-backup.timer # Timer schedule
systemctl status nvme-backup.service # Last run result
ls -lt /mnt/nvme/skybridge/logs/rclone-backup-*.log | head -3
sudo systemctl start nvme-backup.service
The rclone remote skybridge-central needs to be configured:
rclone config
# Choose: New remote → name: skybridge-central
# Choose protocol (SFTP, S3, etc.) based on central server setup
# Check USB devices are present
lsusb | grep RTL2838
# Check kernel module isn't grabbing device
lsmod | grep dvb_usb_rtl28xxu
# If loaded: sudo modprobe -r dvb_usb_rtl28xxu
# Blacklist is at /etc/modprobe.d/ (should already be configured)
journalctl -u openwebrx -n 50
# Common: SDR device busy (another process using it)
# Fix: stop vhf-pipeline first, then restart openwebrx
# Check rtl_tcp is available
nc -z 127.0.0.1 1235 && echo "OK" || echo "NOT LISTENING"
# OpenWebRX must be running first (provides rtl_tcp)
sudo systemctl restart openwebrx
sleep 3
sudo systemctl restart vhf-pipeline
# Check readsb is receiving
journalctl -u readsb -n 20
# Check antenna connection
rtl_test -d ADSB1090 -t
# Check JSON output
cat /run/readsb/aircraft.json | python3 -m json.tool | head
mount | grep nvme
# If not mounted:
sudo mount /mnt/nvme
# Check fstab entry exists:
grep nvme /etc/fstab
sudo fail2ban-client status sshdsudo fail2ban-client set sshd unbanip <IP>top -o %CPU
# Whisper STT can spike CPU during transcription — this is normal
# If persistent: check vhf-pipeline isn't in a crash loop
journalctl -u vhf-pipeline --since "10 min ago"
sudo apt update && sudo apt upgrade -y
sudo reboot
All services are systemd-enabled and will start automatically on boot.
df -h /mnt/nvme /
du -sh /mnt/nvme/skybridge/*/
sudo logrotate -f /etc/logrotate.d/skybridge
sudo smartctl -a /dev/nvme0n1 | grep -E "(Percentage Used|Available Spare|Media Errors)"
| Issue | Status | Notes |
|---|---|---|
| dump978 uses device=1 not serial=UAT978 | Pending reboot | Update service file after reboot to use serial |
| Meshtastic node not connected | Awaiting hardware | Pipeline ready; set MESH_HOST or connect USB serial |
| rclone remote not configured | Awaiting central server | Run rclone config when server is ready |
| Hailo-8 AI HAT+ disabled | By design | NVMe takes M.2 priority; CPU Whisper sufficient for now |
| readsb location not set | Minor | Run sudo readsb-set-location 61.2181 -149.9003 |