Skip to content

Instantly share code, notes, and snippets.

@hemna
Created August 29, 2026 17:19
Show Gist options
  • Select an option

  • Save hemna/2bffd2ca3b23b5d22f6a3af047ad078e to your computer and use it in GitHub Desktop.

Select an option

Save hemna/2bffd2ca3b23b5d22f6a3af047ad078e to your computer and use it in GitHub Desktop.
Direwolf Dashboard v1.1.0 — New Features Guide

Direwolf Dashboard v1.1.0 — New Features Guide

A lightweight web-based APRS monitoring dashboard for Direwolf and DigiPi, designed to run on a Raspberry Pi with no internet connection required.

Repo: https://github.com/hemna/direwolf-dashboard
Release: v1.1.0


What's New

1. 📋 Station List Panel

Open: Click the 📋 toolbar button or press S

A sortable, filterable table of every station heard:

  • Columns: Callsign (with APRS symbol icon), Last Heard (live-updating age), Packets, Position
  • Click any column header to sort; click again to reverse
  • Type in the search box to filter by callsign
  • Click Focus on a row to pan the map to that station
  • Click 📾 Export CSV to download the full station list as a spreadsheet-ready CSV file

2. ⌨ Keyboard Shortcuts Help

Open: Click the ⌨ toolbar button or press ?

All keyboard shortcuts in one place:

Key Action
S Open / close Station List
W Open / close Weather Stations panel
M Open / close APRS Messages panel
L Cycle packet log (expanded → hidden → back)
Ctrl+F Focus log search box
Ctrl+K Open Decode APRS Packet
? Show keyboard shortcuts
Esc Close any open modal

3. 🎨 Configurable Packet Log Colors

Open: ⚙ Settings → Log Colors section

All 8 color slots in the compact packet log are now customizable via color pickers:

  • RX packets, TX packets, packet type, comment, human info, bearing, distance, dimmed text
  • Colors are saved to localStorage and persist across page reloads
  • Reset to Defaults restores the active theme's original colors

4. 📶 Audio Level / Signal Quality Bars

Inline in the packet log — no action needed.

RX packets that include an audio level reading from the Direwolf log show a 5-bar signal strength indicator next to the packet type:

  • 1–3 bars (grey) = normal signal
  • 4 bars (yellow) = strong signal
  • 5 bars (red) = overloaded / clipping

5. 🔍 Packet Log Full-Text Search

Open: Press Ctrl+F / Cmd+F, or expand the Filters overlay and use the Search input

Live-filters the packet log as you type. Searches across:

  • Callsign (from/to)
  • Raw packet string
  • Comment field
  • Human-readable info (speed, altitude, etc.)

Works alongside the existing Callsign / Type / TX-RX filters simultaneously.


6. ⛅ Weather Stations Panel

Open: Click the ⛅ toolbar button or press W

A dedicated panel for all weather stations (_ symbol) heard:

  • Columns: Callsign, Temp (°F), Wind (mph + direction), Humidity (%), Pressure (mb), Last Report age
  • Sortable by any column
  • Charts button opens the weather history modal (temperature & pressure charts over 24 h)
  • Auto-refreshes every 60 seconds while open

Also: Weather station map popups now show current conditions inline — temp, wind, and humidity appear directly in the popup without needing to click "View Weather".


7. 💬 APRS Messages Panel

Open: Click the 💬 toolbar button or press M

A dedicated view of all APRS MessagePacket traffic, grouped into conversation threads:

  • Each thread shows the full exchange between two callsigns, in chronological order
  • Threads addressed to your own callsign are highlighted in blue and sorted to the top
  • Enter your callsign in the My Call field (saved to localStorage)
  • Filter box narrows threads by callsign
  • Auto-refreshes every 30 seconds while open

8. 📥 Packet Export to CSV

Open: ⚙ Settings → Storage → 📾 Export Packets CSV

Downloads all stored packets as direwolf-packets.csv with 16 columns:

timestamp, datetime (ISO 8601 UTC), type, tx (0/1), from_call, to_call,
path (semicolons), latitude, longitude, symbol, symbol_table,
human_info, comment, msg_no, audio_level, raw_packet

Direct URL filters (open in browser or curl):

GET /api/packets/export                        # all packets (up to 10 000)
GET /api/packets/export?callsign=WB4BOR        # one station only
GET /api/packets/export?type=GPSPacket         # GPS packets only
GET /api/packets/export?since=1700000000       # since a Unix timestamp
GET /api/packets/export?limit=500              # cap row count

9. 🏥 Health Endpoint

GET /api/health

Returns {"status":"ok","uptime_seconds":N} (HTTP 200) when AGW and log tailer are both active.
Returns {"status":"degraded","issues":[...]} (HTTP 503) if either has dropped.

Useful for systemd ExecStartPost health checks, monitoring tools, and uptime dashboards.


Bug Fixes & Under the Hood

  • APRS symbol sprites now vendored locally — no internet required; works on air-gapped DigiPi
  • XSS vulnerability eliminated in station map popups (popup buttons now use addEventListener instead of inline onclick attributes with embedded callsign strings)
  • my_position cached in memory — eliminates hundreds of per-packet SQLite round-trips on busy APRS channels
  • DB transaction rollback on errors — a failed packet write no longer leaves the SQLite connection in a broken state
  • Housekeeping loop jitter — sleep interval is ±5% randomized to prevent predictable SD card write bursts on DigiPi
  • asyncio.get_running_loop() replaces deprecated get_event_loop() in tile proxy (Python 3.12 compat)

Quick Start

# On the DigiPi / Raspberry Pi
cd ~/direwolf-dashboard
git pull origin master
uv pip install -e .
sudo systemctl restart direwolf-dashboard

# Health check
curl http://localhost:8088/api/health

Built for DigiPi by WB4BOR — fully offline, no CDN, no external dependencies.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment