Add graphical signal meter for APRS decoding

Backend changes (routes/aprs.py):
- Remove -q h flag from direwolf to enable audio level output
- Add parse_audio_level() to extract levels from direwolf output
- Add rate-limiting (max 10 updates/sec, min 2-level change)
- Push meter events to SSE queue as type='meter'

Frontend changes:
- Add signal meter widget to APRS sidebar
- Horizontal bar gauge with gradient (green->cyan->yellow->red)
- Numeric level display (0-100)
- "BURST" indicator for levels >70
- Status text (weak/moderate/strong signal)
- "No RF activity" state after 5 seconds of silence
- CSS styles in static/css/modes/aprs.css

Also added UK region to dropdown (same freq as Europe: 144.800)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Smittix
2026-01-15 22:03:08 +00:00
parent f4282cb608
commit cd168da760
4 changed files with 273 additions and 5 deletions

View File

@@ -17,6 +17,7 @@
<select id="aprsRegion">
<option value="north_america">North America (144.390)</option>
<option value="europe">Europe (144.800)</option>
<option value="uk">UK (144.800)</option>
<option value="australia">Australia (145.175)</option>
<option value="japan">Japan (144.640)</option>
</select>
@@ -48,4 +49,23 @@
<span class="aprs-stat"><span class="aprs-stat-label">PACKETS:</span> <span id="aprsStatusPackets">0</span></span>
</div>
</div>
<!-- Signal Meter -->
<div id="aprsSignalMeter" class="aprs-signal-meter" style="display: none;">
<div class="aprs-meter-header">
<span class="aprs-meter-label">SIGNAL</span>
<span class="aprs-meter-value" id="aprsMeterValue">--</span>
<span class="aprs-meter-burst" id="aprsMeterBurst" style="display: none;">BURST</span>
</div>
<div class="aprs-meter-bar-container">
<div class="aprs-meter-bar" id="aprsMeterBar"></div>
<div class="aprs-meter-ticks">
<span>0</span>
<span>25</span>
<span>50</span>
<span>75</span>
<span>100</span>
</div>
</div>
<div class="aprs-meter-status" id="aprsMeterStatus">Waiting for signal...</div>
</div>
</div>