Repository navigation
Expand file tree
/
Copy pathconfig.py
More file actions
1061 lines (1024 loc) · 50.1 KB
/
Copy pathconfig.py
File metadata and controls
1061 lines (1024 loc) · 50.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
"""Configuration settings for intercept application."""
from __future__ import annotations
import logging
import os
import sys
# Application version
VERSION = "2.33.79"
# Changelog - latest release notes (shown on welcome screen)
CHANGELOG = [
{
"version": "2.33.79",
"date": "October 2026",
"highlights": [
"On macOS, ACARS and VDL2 keep decoding when the radio sends corrupt data, instead of silently stopping.",
],
},
{
"version": "2.33.78",
"date": "October 2026",
"highlights": [
"ISS SSTV tunes the frequency you enter instead of always using 145.800 MHz.",
"Meshtastic: favourite, ignore or remove nodes, search messages, hide non-text packets, and reply to messages.",
],
},
{
"version": "2.33.77",
"date": "September 2026",
"highlights": [
"AIS on a HackRF opens that HackRF, not whichever SDR it finds first.",
],
},
{
"version": "2.33.76",
"date": "September 2026",
"highlights": [
"The in-app updater finds new versions again; it had been stuck reporting v2.33.47.",
"AIS works on a HackRF, and Radiosonde says clearly that it needs an RTL-SDR.",
],
},
{
"version": "2.33.75",
"date": "September 2026",
"highlights": [
"An RTL-SDR is the default device again when a HackRF is also plugged in, and the nav icons show on the dashboards.",
"Meteor Scatter and Waterfall work with a HackRF even without SoapySDR installed, and Meteor Scatter now says why if it can't start.",
],
},
{
"version": "2.33.74",
"date": "September 2026",
"highlights": [
"New LoRa menu: Meshtastic and Meshcore now have their own group in the nav and on this screen.",
"Nav bar fixed in narrow windows on touchscreen laptops and scaled displays, and fits at every desktop width with the extra menu.",
],
},
{
"version": "2.33.73",
"date": "September 2026",
"highlights": [
"Meshcore: search nodes by name or ID, click one to find it on the map, or message it straight from the list.",
"Narrow desktop windows now show every mode and tool button in the nav bar instead of an unscrollable strip.",
],
},
{
"version": "2.33.72",
"date": "September 2026",
"highlights": [
"Meshtastic keeps your message history: messages are saved, show on the dashboard straight away (even before you reconnect), and survive restarts. A new Missed button fetches messages sent while you were away from a Store and Forward router.",
],
},
{
"version": "2.33.71",
"date": "September 2026",
"highlights": [
"SubGHz: new capture inspector \u2014 open any saved capture to see its pulses, timings, modulation and decoded bits, then decode that signal live in OOK mode with one click.",
],
},
{
"version": "2.33.70",
"date": "September 2026",
"highlights": [
"HF SSTV now decodes: sideband (USB) is the default, the decoder corrects for tuning error of up to \u00b1200 Hz, and images no longer tear partway down in noise.",
],
},
{
"version": "2.33.69",
"date": "September 2026",
"highlights": [
"SubGHz Frequency Analyzer is fast and sharp \u2014 no more page hang during sweeps.",
"Nav bar keeps all its buttons on mid-size windows, and harmless browser warnings no longer pop up as \u201cUnknown error\u201d.",
],
},
{
"version": "2.33.47",
"date": "September 2026",
"highlights": [
"WiFi: capture a WPA handshake or send a deauth in one click from a selected network \u2014 no more copying/pasting the BSSID. (For authorized testing.)",
],
},
{
"version": "2.33.46",
"date": "September 2026",
"highlights": [
"SDR reliability: gentler process shutdown (SIGINT/SIGTERM before SIGKILL), fewer USB bus scans, and skipping re-probes while a device is streaming \u2014 reduces hardware lockups and USB contention (#256, thanks @Dr-gigabyte).",
],
},
{
"version": "2.33.45",
"date": "September 2026",
"highlights": [
'Space weather now shows clear "source unreachable" messages (and a banner) when the server can\u2019t reach NOAA/HamQSL, instead of misleading empty panels.',
],
},
{
"version": "2.33.44",
"date": "September 2026",
"highlights": [
"Bundled the Orbitron display font so dashboard/section titles render correctly instead of falling back to a plain monospace.",
"APRS dashboard map now loads your configured tile provider (it was stuck on the fallback grid).",
"Space weather: removed a duplicate loading spinner on the flare-probability and related panels.",
],
},
{
"version": "2.33.43",
"date": "September 2026",
"highlights": [
"Meshtastic Nodes tab: each node has a message action that starts a direct message to it (drops its id into the compose box), so you can DM nodes that have no map position (#270).",
],
},
{
"version": "2.33.42",
"date": "September 2026",
"highlights": [
"Meshtastic dashboard: new searchable Nodes tab lists every known node (including those with no map position), with SNR/battery/last-heard; click a node to centre the map on it (#270).",
],
},
{
"version": "2.33.41",
"date": "September 2026",
"highlights": [
"Fixed the Meshtastic/Meshcore dashboards: they now load the core scripts the modules need, restoring the map tile provider and node/message rendering that broke after the dashboard migration (#270).",
],
},
{
"version": "2.33.40",
"date": "September 2026",
"highlights": [
"ADS-B dashboard: the aircraft hover tooltip now stays open and refreshes in place instead of closing on every update.",
"Installer: require meshtastic>=2.7.9 to avoid the cosmetic packaging<25 pip dependency-conflict warning.",
],
},
{
"version": "2.33.39",
"date": "September 2026",
"highlights": [
'ADS-B dashboard: a "Tune ATC" button on a selected aircraft tunes the airband receiver to the nearest airport\u2019s tower/approach frequency for that aircraft\u2019s position (#271).',
],
},
{
"version": "2.33.38",
"date": "September 2026",
"highlights": [
'ADS-B dashboard: new "In range" toggle limits the map to aircraft within the selected range, and a "Keep" selector controls how long stale aircraft stay (30s\u201315m) \u2014 helps busy remote/aggregated feeds that were flooding the map (#313).',
],
},
{
"version": "2.33.37",
"date": "September 2026",
"highlights": [
"Housekeeping: the APRS/Meshtastic/Meshcore dashboards now share a common page <head> partial, the docs were brought in line with the dashboard migration, and the satellite dashboard tab title casing was fixed.",
],
},
{
"version": "2.33.36",
"date": "September 2026",
"highlights": [
"Meshtastic dashboard reworked into a map + tabbed side panel (Messages / Channels / Info), with the node map always visible.",
"Accessibility: keyboard focus rings and control labels added across the APRS, Meshtastic and Meshcore dashboards.",
],
},
{
"version": "2.33.35",
"date": "September 2026",
"highlights": [
"Meshcore now has its own full-page dashboard (/meshcore/dashboard) with messages, node map, repeaters and telemetry; the Meshcore nav links open it directly. This completes moving the map-centric modes (ADS-B, AIS, satellite, APRS, Meshtastic, Meshcore) out of the main-page SPA into dedicated dashboards.",
],
},
{
"version": "2.33.34",
"date": "September 2026",
"highlights": [
"Meshtastic now has its own full-page dashboard (/meshtastic/dashboard) with the mesh console, node map, messaging and channels; the Meshtastic nav links open it directly.",
],
},
{
"version": "2.33.33",
"date": "September 2026",
"highlights": [
"APRS now has its own full-screen dashboard (/aprs/dashboard) with a full-height map, station list and packet log, matching the Aircraft and Vessels dashboards; the APRS nav links open it directly.",
],
},
{
"version": "2.33.32",
"date": "September 2026",
"highlights": [
"Main page code split finished: the last large inline script (mode switching, SDR device handling, pager and APRS) now lives in static/js/modes/, so index.html is essentially markup plus linked scripts (down from 7,643 to about 4,000 lines).",
"No behaviour change — the moved code is byte-for-byte the original, verified by the browser smoke test across every mode.",
],
},
{
"version": "2.33.31",
"date": "September 2026",
"highlights": [
"Main page slimmed: satellite/GPS/drone, device intelligence, Wi-Fi and the 433 MHz/meter feeds now live in their own files (index.html is roughly half its former size).",
"Theme now syncs across devices (the sync had been silently 404ing), and the deprecated datetime.utcnow() is gone.",
],
},
{
"version": "2.33.30",
"date": "September 2026",
"highlights": [
"Map labels: callsign and flight level beside aircraft, name and speed beside ships, when zoomed in and never overlapping.",
"Ships drawn to their real size and shape when zoomed in; ships at anchor or moored shown as dots.",
"Fix: the header's mode chips no longer slide under the nav when the idle modes are shown.",
],
},
{
"version": "2.33.29",
"date": "September 2026",
"highlights": [
"New aircraft icons per type with dark outlines, heading lines on aircraft and ships, and status on the map: on the ground, emergency squawk, gone quiet.",
"Satellite Command's map controls no longer cover its panels; modes on slow devices no longer fail to start.",
],
},
{
"version": "2.33.28",
"date": "September 2026",
"highlights": [
"Polish round 7: the 3D globes work offline, native controls match the theme, and Settings gains Reset layout.",
"The browser smoke test now covers both themes and phone width; the notification count is no longer cut off.",
],
},
{
"version": "2.33.27",
"date": "September 2026",
"highlights": [
"Polish round 6: a browser smoke test now opens every mode and dashboard on each change and fails on JavaScript errors.",
"Inline colours follow the theme; Settings shows full install commands and keeps one height; Quick Setup statuses are clear pills.",
"The Wi-Fi channel heatmap and Bluetooth tracker panel explain themselves when empty.",
],
},
{
"version": "2.33.26",
"date": "September 2026",
"highlights": [
"Polish round 5: modes that need an uninstalled tool say so up front, with the install command; a tidier header; the dashboards work in the light theme.",
"ADS-B aircraft rows show altitude at a glance and fade when an aircraft goes quiet; the map's zoom-in button is no longer hidden.",
],
},
{
"version": "2.33.25",
"date": "September 2026",
"highlights": [
"Fix: after an upgrade the browser could keep running the previous version's scripts (GPS and Spy Stations errors); asset URLs now carry the version.",
"Fix: the toolbar's More and Stop all buttons no longer squeeze on narrower windows.",
"Fix: ADS-B and AIS range rings are clearly visible, and the ADS-B control bar no longer leaves tall empty boxes on narrower windows.",
],
},
{
"version": "2.33.24",
"date": "September 2026",
"highlights": [
"Polish round 4: Start/Stop on the sidebar status card, a toolbar with labels and a More menu, notification history, and header chips for what is in view.",
"A reception outline on the ADS-B and AIS maps, a 24-hour pass timeline in Satellite Command, a Spy Stations table view, and weather satellite images grouped by pass.",
"Readable text (4.5:1 contrast) and keyboard focus rings; Meters no longer merges SCM+ and IDM meters into one card.",
],
},
{
"version": "2.33.23",
"date": "September 2026",
"highlights": [
"WebSDR: flat receiver dots coloured by how busy they are, a grid on the globe, you on it with a path to the receiver you pick, and a list by distance and direction with slots, search and sort.",
"WebSDR receiver names and notes no longer show raw HTML.",
],
},
{
"version": "2.33.22",
"date": "September 2026",
"highlights": [
"Polish round 3: the light theme no longer leaves dark panels on a light page, and every page has thin, dark scrollbars.",
"Leaner screens: mode descriptions fold behind an (i), the duplicate Kill All button and the bottom bar go where they did nothing, and phones get modes first.",
"An idle waterfall that explains itself, WebSDR receivers on first visit, trend lines on the ADS-B and AIS counts, and Settings tabs that fit.",
],
},
{
"version": "2.33.21",
"date": "September 2026",
"highlights": [
"A second polish pass: a status card and section icons in the sidebar, Run State in the header, one kind of pop-up, and a live card on the welcome page.",
"433 MHz plots each packet it hears (level, SNR, device) in place of a made-up waveform; OOK draws its last frame as a pulse train; radiosondes get an ascent profile.",
"System Health heat grid and gauges, a TSCM threat gauge, ADS-B history traffic by hour, Agents health rings, and maps that open on you.",
],
},
{
"version": "2.33.20",
"date": "September 2026",
"highlights": [
"Activity feed: source tiles with counts, a timeline of the window (click a bar to see that period), source icons and signal bars, and a map of sightings with a position.",
],
},
{
"version": "2.33.19",
"date": "September 2026",
"highlights": [
"A polish pass: the Wi-Fi radar matches the Bluetooth one, BT Locate steers by a hotter / colder signal gauge, and GPS has a sky plot that needs neither WebGL nor the internet.",
"Space weather gauges for Kp, solar wind and Bz; empty lists that show when they are listening; a Run State strip that shows what is running.",
],
},
{
"version": "2.33.18",
"date": "September 2026",
"highlights": [
"Stop now stops: pager, 433 MHz and ADS-B end their decoders together and wait until they are gone, and the page says so if one survives.",
"Times follow your browser's time zone; ESRI World Imagery is the default map; Locate is on every Bluetooth and Wi-Fi row and starts at once.",
"Fix: Bluetooth labelled phones, earbuds and appliances as AirTags and SmartTags; space weather lost its solar wind, Kp and flux data; waterfall clicks replayed in order.",
],
},
{
"version": "2.33.17",
"date": "September 2026",
"highlights": [
"Fix: with two Wi-Fi tabs open, each showed only about half the live updates.",
"Signal-strength tooltips no longer show a distance estimate: one receiver cannot measure distance from signal strength.",
],
},
{
"version": "2.33.16",
"date": "September 2026",
"highlights": [
"Alerts, recording, MQTT and the activity feed now handle each event once, whether or not a page is open. Before, they ran once per open browser tab, and not at all with none.",
],
},
{
"version": "2.33.15",
"date": "September 2026",
"highlights": [
"TSCM client report is a printable page: print it, or save it as a PDF. It now includes the baseline comparison and meeting windows, and past sweeps are listed in the survey.",
"Fix: drone detection claims its SDR and says which sources started; SubGHz and remote agents name a missing tool; meeting windows were compared an hour out in summer time.",
],
},
{
"version": "2.33.14",
"date": "September 2026",
"highlights": [
"Feat: Activity feed (Intel > Activity). Sightings from every mode that reports them in one stream, newest first, colour-coded by source, filterable by source, time window and device, and pausable without losing anything.",
"433 MHz and Wi-Fi record sightings whenever they run; busy sources are thinned so ADS-B cannot swamp the feed, and sightings are kept 24 hours (configurable).",
],
},
{
"version": "2.33.13",
"date": "September 2026",
"highlights": [
'Live lists show elapsed time ("14 s ago"), kept current every second, with the exact time on hover.',
'An empty list now says why: "rtl_433 running · 0 readings in 4 s", stopped, or the reason it failed to start.',
"Copy buttons on ICAO, MMSI, MAC and node identifiers, and notes and tags on any device, shown wherever it appears.",
"Hidden tabs stop their clocks and status polls; install advice matches your platform.",
],
},
{
"version": "2.33.12",
"date": "September 2026",
"highlights": [
"Fix: stopping Morse or OOK could hang indefinitely, and a failed pager start left the SDR marked busy until restart.",
"Fix: one corrupt byte ended the receiver waterfall; Bluetooth scanners could be stopped by a nearby device's name.",
"Fix: several modes reported a missing tool as a vague server error, or a failed start as success; they now name the tool.",
"Fix: Meshtastic with no USB device reported itself running, and with two serial ports could shut the server down.",
],
},
{
"version": "2.33.11",
"date": "September 2026",
"highlights": [
"Feat: TSCM Survey workspace (Intel > TSCM Survey). One page walks a survey in order: the active baseline and its health, what the latest sweep shows that the baseline did not, known devices, threats and findings, then the report.",
"Fix: a TSCM baseline's age read hours too old outside UTC, and comparing a sweep that had not finished failed with a server error.",
],
},
{
"version": "2.33.10",
"date": "September 2026",
"highlights": [
"Fix: TSCM reports now assess each finding's signal from what was observed; every finding previously read 'Minimal, Low confidence'.",
"Fix: the TSCM CSV annex listed every device as informational with risk score 0, and could carry spreadsheet formulas from device names.",
"Fix: a TSCM report for a running or aborted sweep failed with a server error; sweep times were shown in UTC beside a local 'Generated' time.",
"Fix: a TSCM sweep that detected nothing is now reported as INCONCLUSIVE, not as a clean LOW, and an enabled Wi-Fi or Bluetooth band that saw no devices is called out.",
"Change: the TSCM client report states what was measured (dBm, time observed, sightings) and the pattern seen, instead of a confidence label, a proximity guess and a risk score. The technical annexes keep those values.",
],
},
{
"version": "2.33.9",
"date": "September 2026",
"highlights": [
"Feat: name your SDRs. Settings > SDR gives each receiver a display name that replaces 'Device 0' in every device selector (#269).",
"Feat: per-device PPM correction, default gain and bias-T. A mode uses them whenever its own field is left blank; a value entered in the mode still wins (#238).",
"Fix: rtlamr passed PPM correction to rtl_tcp as its listen port.",
],
},
{
"version": "2.33.8",
"date": "September 2026",
"highlights": [
"Security: an account seeded with a password you did not choose now has to set one before the interface is usable. New installs, and any install still using the old admin/admin default, are prompted at first login.",
"Feat: a Change Password page, reachable at /change-password whether or not a change is required.",
],
},
{
"version": "2.33.7",
"date": "September 2026",
"highlights": [
"Feat: Kill All Processes is now in the global nav, so it is reachable from every page instead of only the main dashboard's System panel.",
],
},
{
"version": "2.33.6",
"date": "September 2026",
"highlights": [
"Security: the /controller/* API required no authentication at all \u2014 anyone who could reach the port could list remote agents, read their API keys, register or delete agents, and start or stop SDR hardware on remote nodes. It now requires a session, or an API key for agent push.",
"Security: agent API keys are no longer included in API responses.",
"Security: WebSocket endpoints now verify the session; a stale auth exemption for audio streaming was removed; the default admin password has been removed; session cookies set SameSite and HttpOnly explicitly.",
"Action required: if you run remote agents, each must now have an API key configured to push data.",
],
},
{
"version": "2.33.5",
"date": "September 2026",
"highlights": [
"Fix: Meshtastic nodes first heard via telemetry, text or routing packets did not appear until the page was reloaded \u2014 the node list only refreshed on position/nodeinfo packets.",
],
},
{
"version": "2.33.4",
"date": "September 2026",
"highlights": [
"Fix: ADS-B aircraft tracked via a remote agent never left the map \u2014 the agent kept every contact for the life of the scan and re-sent them on each poll, so they only cleared when the mode was stopped. Contacts now age out after 5 minutes, matching local mode.",
],
},
{
"version": "2.33.3",
"date": "September 2026",
"highlights": [
"Feat: 433MHz sensor Units selector (Metric / Imperial / Native). Defaults to Metric, so temperatures now read in °C — pick Native to restore the previous per-device behaviour.",
],
},
{
"version": "2.33.2",
"date": "September 2026",
"highlights": [
"Fix: DSC call types and nature-of-distress labels were wrong — format specifiers 112/120 were swapped, so a routine individual call displayed as DISTRESS and a real mayday displayed as INDIVIDUAL. Nature-of-distress labels were shifted one position off every code.",
],
},
{
"version": "2.33.1",
"date": "September 2026",
"highlights": [
"Fix: ACARS crashed with SIGILL in the amd64 Docker image — acarsdec was compiled with the build host's instruction set (AVX-512) and would not run on older CPUs. Pull the latest image to pick up the fix.",
],
},
{
"version": "2.33.0",
"date": "August 2026",
"highlights": [
"Feat: CARTO API key setting (Settings > Map Tiles) removes the new watermark CARTO adds to unauthenticated tile requests — free key, no account needed",
"Fix: mode maps (Drone, SSTV, MeshCore, Meshtastic, WebSDR, Weather Satellite) no longer briefly flash unkeyed CartoDB tiles when Settings is already loaded",
],
},
{
"version": "2.32.0",
"date": "July 2026",
"highlights": [
"Feat: ADS-B historical playback — replay past aircraft positions on an interactive map with play/pause, speed control, and time scrubber (requires history profile)",
],
},
{
"version": "2.31.0",
"date": "July 2026",
"highlights": [
"Feat: BladeRF support — bladeRF 2.0 micro and x40/x115 detected and usable via SoapyBladeRF (47 MHz – 6 GHz, TX capable)",
"Feat: HydraSDR RFOne support — detected and usable via SoapyHydraSDR (24 MHz – 1800 MHz, RX only)",
],
},
{
"version": "2.30.0",
"date": "July 2026",
"highlights": [
"Feat: APRS station export — download all tracked stations as JSON or CSV via /aprs/export",
"Feat: USRP support — Ettus USRP N200/B200/B210 detected and usable via SoapyUHD bridge",
"Feat: MQTT data export — publish decoded events from all modules to a configurable broker (set INTERCEPT_MQTT_BROKER to enable)",
],
},
{
"version": "2.29.0",
"date": "July 2026",
"highlights": [
"Feat: TSCM sweep metadata — Site/Location and Examiner name embedded in reports",
"Feat: Mark Cleared button dims/excludes devices from TSCM reports, with a cleared-device count in the summary",
"Feat: Examiner Ignore List — persist your own devices so they're filtered from the live view and every report export",
"Feat: TSCM report category filter (High Interest / Needs Review / Informational) for HTML, PDF, JSON, and CSV exports",
"Fix: ADS-B history Postgres password is now correctly read from .env (setup wizard and Docker Compose previously ignored a custom password)",
],
},
{
"version": "2.28.0",
"date": "July 2026",
"highlights": [
"Feat: Signal ID — offline signal identification against a bundled 594-signal database",
"Feat: Signal ID modal accessible from the global nav and waterfall sidebar",
"Feat: scored matching by frequency, bandwidth, modulation, and region (0–100)",
"Feat: import script (bin/import_artemis.py) to refresh database from Artemis-DB",
],
},
{
"version": "2.27.0",
"date": "May 2026",
"highlights": [
"Fix: two-window hang caused by browser HTTP/1.1 connection pool exhaustion",
"Fix: SSE alert and Bluetooth streams now fan out to all windows (no more split messages)",
"Feat: UI tier system — lean, standard, enhanced display modes via nav toggle",
"Feat: first-run setup modal includes display mode selection",
"Perf: ADS-B SSE snapshot priming moved into generator; WiFi filter combined into single pass",
"Perf: Bluetooth tracker signature scan skips unchanged fingerprints",
"Fix: ICAO lookup cache capped at 50k entries with LRU eviction",
],
},
{
"version": "2.26.13",
"date": "March 2026",
"highlights": [
"Fix TSCM sweep module variable scoping and stale progress bar",
"Fix 5GHz WiFi scanning failures in deep scan and band detection",
"Fix ADS-B remote mode incorrectly stopping other SDR services",
"Fix radiosonde false 'missing' report at end of setup",
"Satellite tracker: TLE auto-refresh, polar plot fixes, pass calculation improvements",
"Fix weather satellite handoff (remove defunct METEOR-M2)",
"Add multi-arch Docker CI workflow (amd64 + arm64)",
],
},
{
"version": "2.26.12",
"date": "March 2026",
"highlights": [
"AIS and ADS-B dashboards now use configured observer position from .env",
],
},
{
"version": "2.26.11",
"date": "March 2026",
"highlights": [
"APRS map now centres on configured observer position from .env",
],
},
{
"version": "2.26.8",
"date": "March 2026",
"highlights": [
"Fix acarsdec build failure on macOS (HOST_NAME_MAX undefined)",
],
},
{
"version": "2.26.7",
"date": "March 2026",
"highlights": [
"Fix health check SDR detection on macOS (timeout command not available)",
],
},
{
"version": "2.26.6",
"date": "March 2026",
"highlights": [
"Fix oversized branded 'i' logo on Aircraft & Vessel dashboards",
],
},
{
"version": "2.26.5",
"date": "March 2026",
"highlights": [
"Fix database errors crashing the entire UI — pages now degrade gracefully",
],
},
{
"version": "2.26.4",
"date": "March 2026",
"highlights": [
"Fix Environment Configurator crash when .env exists but variable is missing",
],
},
{
"version": "2.26.3",
"date": "March 2026",
"highlights": [
"Fix SatDump AVX2 crash on older CPUs — build now targets baseline x86-64",
],
},
{
"version": "2.26.2",
"date": "March 2026",
"highlights": [
"Fix Docker startup crash — data/ Python package was excluded by .dockerignore",
],
},
{
"version": "2.26.1",
"date": "March 2026",
"highlights": [
"Fix default admin credentials — now matches README (admin:admin)",
"Admin password changes in config.py / env vars now sync to DB on restart",
],
},
{
"version": "2.26.0",
"date": "March 2026",
"highlights": [
"Fix SSE fanout thread crash when source queue is None during shutdown",
"Fix branded 'i' logo FOUC (flash of unstyled content) on first page load",
],
},
{
"version": "2.25.0",
"date": "March 2026",
"highlights": [
"UI/UX overhaul — SSEManager with exponential backoff and connection status indicator",
"Accessibility improvements — aria-labels, form label associations, keyboard list navigation",
"Destructive action confirmation modals replace native confirm() dialogs",
"CSS variable adoption, inline style extraction, and reduced !important usage",
"Loading button states, actionable error reporting, and mobile UX polish",
],
},
{
"version": "2.24.0",
"date": "March 2026",
"highlights": [
"WiFi Locate mode — locate access points by BSSID with real-time signal meter, distance estimation, RSSI chart, and audio proximity tones",
"Mobile navigation reorganized into labeled groups for better usability",
"flask-limiter made optional for graceful degradation",
"Radiosonde setup fix — missing semver dependency",
],
},
{
"version": "2.23.0",
"date": "February 2026",
"highlights": [
"Radiosonde weather balloon tracking mode with telemetry, map, and station distance",
"CW/Morse code decoder with Goertzel tone detection and OOK envelope mode",
"WeFax (Weather Fax) decoder with auto-scheduler and broadcast timeline",
"System Health monitoring mode with telemetry dashboard",
"HTTPS support, HackRF TSCM RF scan, ADS-B voice alerts",
"Production server (start.sh) with gunicorn + gevent for concurrent multi-client support",
"Multi-SDR support for WeFax, tool path overrides, native Homebrew detection",
"GPS mode upgraded to textured 3D globe",
"Destroy lifecycle added to all mode modules to prevent resource leaks",
"Dozens of bug fixes across ADS-B, APRS, SSE, Morse, waterfall, and more",
],
},
{
"version": "2.22.3",
"date": "February 2026",
"highlights": [
"Waterfall control panel no longer shows as unstyled text on first visit",
"WebSDR globe renders correctly on first page load without requiring a refresh",
"Waterfall monitor audio no longer takes minutes to start — playback detection now waits for real audio data instead of just the WAV header",
"Waterfall monitor stop is now instant — audio pauses and UI updates immediately instead of waiting for backend cleanup",
"Stopping the waterfall no longer shows a stale 'WebSocket closed before ready' message",
],
},
{
"version": "2.22.1",
"date": "February 2026",
"highlights": [
"Waterfall receiver overhaul: WebSocket I/Q streaming with server-side FFT, click-to-tune, and zoom controls",
"Voice alerts for configurable event notifications across modes",
"Signal fingerprinting mode for RF device identification and pattern analysis",
"SignalID integration via SigIDWiki API for automatic signal classification",
"PWA support: installable web app with service worker and manifest",
"Mode stop responsiveness improvements with faster timeout handling",
"Navigation performance instrumentation and smoother mode transitions",
"Pager, sensor, and SSTV real-time signal scope visualization",
"ADS-B MSG2 surface movement parsing for ground vehicle tracking",
"WebSDR major overhaul with improved receiver management and audio streaming",
"Documentation audit: fixed license, tool names, entry points, and SSTV decoder references",
"Help modal updated with ACARS and VDL2 mode descriptions",
],
},
{
"version": "2.21.1",
"date": "February 2026",
"highlights": [
"BT Locate map first-load fix with render stabilization retries during initial mode open",
"BT Locate trail restore optimization for faster startup when historical GPS points exist",
"BT Locate mode-switch map invalidation timing fix to prevent delayed/blank map render",
],
},
{
"version": "2.21.0",
"date": "February 2026",
"highlights": [
"Global map theme refresh with improved contrast and cross-dashboard consistency",
"Cross-app UX updates for accessibility, mode consistency, and render performance",
"Weather satellite reliability fixes for auto-scheduler and Mercator pass tracking",
"Bluetooth/WiFi runtime health fixes with BT Locate continuity and confidence improvements",
"ADS-B/VDL2 streaming reliability upgrades for multi-client SSE fanout and remote decoding",
"Analytics enhancements with operational insights and temporal pattern panels",
],
},
{
"version": "2.20.0",
"date": "February 2026",
"highlights": [
"Space Weather mode: real-time solar and geomagnetic monitoring from NOAA SWPC, NASA SDO, and HamQSL",
"Kp index, solar wind, X-ray flux charts with Chart.js visualization",
"HF band conditions, D-RAP absorption maps, aurora forecast, and solar imagery",
"NOAA Space Weather Scales (G/S/R), flare probability, and active solar regions",
"No SDR hardware required — all data from public APIs with server-side caching",
],
},
{
"version": "2.19.0",
"date": "February 2026",
"highlights": [
"VDL2 mode with modal message viewer, consolidated into ADS-B dashboard",
"ADS-B: trails enabled by default, radar modes removed, CSV export added",
"Bundled Roboto Condensed font for offline mode with SVG icon overhaul",
"Help modal updated with all modes and correct SVG icons",
"Setup script overhauled for reliability and macOS compatibility",
"GPS fix for preserving satellites across DOP-only SKY messages",
"Fix gpsd deadlock causing GPS connect to hang",
],
},
{
"version": "2.18.0",
"date": "February 2026",
"highlights": [
"Bluetooth: service data inspector, appearance codes, MAC cluster tracking, and behavioral flags",
"Bluetooth: IRK badge display, distance estimation with confidence, and signal stability metrics",
"ACARS: SoapySDR device support for SDRplay, LimeSDR, Airspy, and other non-RTL backends",
"ADS-B: stale dump1090 process cleanup via PID file tracking",
"GPS: error state indicator and UI refinements",
"Proximity radar and signal card UI improvements",
],
},
{
"version": "2.17.0",
"date": "February 2026",
"highlights": [
"BT Locate: SAR Bluetooth device location with GPS-tagged signal trail and proximity alerts",
"IRK auto-detection: extract Identity Resolving Keys from paired devices (macOS/Linux)",
"GPS mode: real-time position tracking with live map, speed, altitude, and satellite info",
"Bluetooth scanner lifecycle fix for bleak scan timeout tracking",
],
},
{
"version": "2.16.0",
"date": "February 2026",
"highlights": [
"Sub-GHz analyzer with real-time RF capture and protocol decoding",
"Weather satellite auto-scheduler with polar plot and ground track map",
"SatDump support for local (non-Docker) installs via setup.sh",
"Shared waterfall UI across SDR modes",
"Listening post audio stuttering fix and SDR race condition fixes",
"Multi-arch Docker build support (amd64 + arm64)",
],
},
{
"version": "2.15.0",
"date": "February 2026",
"highlights": [
"Real-time WebSocket waterfall with I/Q capture and server-side FFT",
"Cross-module frequency routing from Listening Post to decoders",
"Pure Python SSTV decoder replacing broken slowrx dependency",
"Real-time signal scope for pager, sensor, and SSTV modes",
"USB-level device probe to prevent cryptic rtl_fm crashes",
"SDR device lock-up fix from unreleased device registry on crash",
],
},
{
"version": "2.14.0",
"date": "February 2026",
"highlights": [
"HF SSTV general mode with predefined shortwave frequencies",
"WebSDR integration for remote HF/shortwave listening",
"Listening Post signal scanner and audio pipeline improvements",
"TSCM sweep resilience, WiFi detection, and correlation fixes",
"APRS rtl_fm startup and SDR device conflict fixes",
],
},
{
"version": "2.13.1",
"date": "February 2026",
"highlights": [
"UI overhaul with slate/cyan theme and JetBrains Mono font",
"Signal scanner rewritten with rtl_power sweep and SNR filtering",
"Listening Post audio streaming via WAV with retry/fallback",
"WiFi connected clients panel now filters to selected AP",
"Global navigation bar across all dashboards",
"Fixed USB device contention when starting audio pipeline",
],
},
{
"version": "2.13.0",
"date": "February 2026",
"highlights": [
"WiFi client display in AP detail drawer with real-time SSE updates",
"Help modal system with keyboard shortcuts reference",
"Global navbar and settings modal accessible from all dashboards",
"Probed SSID badges for connected clients",
],
},
{
"version": "2.12.1",
"date": "February 2026",
"highlights": [
"SDR device registry to prevent decoder conflicts",
"SDR device status panel and ADS-B Bias-T toggle",
"Real-time Doppler tracking for ISS SSTV reception",
"TCP connection support for Meshtastic",
"Shared observer location with auto-start options",
],
},
{
"version": "2.12.0",
"date": "January 2026",
"highlights": [
"ISS SSTV decoder with real-time ISS tracking globe",
"GitHub update notifications for new releases",
"Meshtastic QR code support and telemetry display",
"New Space category with reorganized UI",
],
},
{
"version": "2.11.0",
"date": "January 2026",
"highlights": [
"Meshtastic LoRa mesh network integration",
"Ubertooth One BLE scanning support",
"Offline mode with bundled assets",
"Settings modal with tile provider configuration",
],
},
{
"version": "2.10.0",
"date": "January 2026",
"highlights": [
"AIS vessel tracking with VHF DSC distress monitoring",
"Spy Stations database (number stations & diplomatic HF)",
"MMSI country identification and distress alert overlays",
"SDR device conflict detection for AIS/DSC",
],
},
{
"version": "2.9.5",
"date": "January 2026",
"highlights": [
"Enhanced TSCM with MAC-randomization resistant detection",
"Clickable score cards and device detail expansion",
"RF scanning improvements with status feedback",
"Root privilege check and warning display",
],
},
{
"version": "2.9.0",
"date": "January 2026",
"highlights": [
"New dropdown navigation menus for cleaner UI",
"TSCM baseline recording now captures device data",
"Device identity engine integration for threat detection",
"Welcome screen with mode selection",
],
},
{
"version": "2.8.0",
"date": "December 2025",
"highlights": [
"Added TSCM counter-surveillance mode",
"WiFi/Bluetooth device correlation engine",
"Tracker detection (AirTag, Tile, SmartTag)",
"Risk scoring and threat classification",
],
},
]
def _get_env(key: str, default: str) -> str:
"""Get environment variable with default."""
return os.environ.get(f"INTERCEPT_{key}", default)
def _get_env_int(key: str, default: int) -> int:
"""Get environment variable as integer with default."""
try:
return int(os.environ.get(f"INTERCEPT_{key}", str(default)))
except ValueError:
return default
def _get_env_float(key: str, default: float) -> float:
"""Get environment variable as float with default."""
try:
return float(os.environ.get(f"INTERCEPT_{key}", str(default)))
except ValueError:
return default
def _get_env_bool(key: str, default: bool) -> bool:
"""Get environment variable as boolean with default."""
val = os.environ.get(f"INTERCEPT_{key}", "").lower()
if val in ("true", "1", "yes", "on"):
return True
if val in ("false", "0", "no", "off"):
return False
return default
# Logging configuration
_log_level_str = _get_env("LOG_LEVEL", "WARNING").upper()
LOG_LEVEL = getattr(logging, _log_level_str, logging.WARNING)
LOG_FORMAT = _get_env("LOG_FORMAT", "%(asctime)s - %(levelname)s - %(message)s")
# Server settings
HOST = _get_env("HOST", "0.0.0.0")
PORT = _get_env_int("PORT", 5050)
DEBUG = _get_env_bool("DEBUG", False)
THREADED = _get_env_bool("THREADED", True)
# HTTPS / SSL settings
HTTPS = _get_env_bool("HTTPS", False)
SSL_CERT = _get_env("SSL_CERT", "")
SSL_KEY = _get_env("SSL_KEY", "")
# Default RTL-SDR settings
DEFAULT_GAIN = _get_env("DEFAULT_GAIN", "40")
DEFAULT_DEVICE = _get_env("DEFAULT_DEVICE", "0")
# Pager defaults
DEFAULT_PAGER_FREQ = _get_env("PAGER_FREQ", "929.6125M")
# Timeouts
PROCESS_TIMEOUT = _get_env_int("PROCESS_TIMEOUT", 5)
SOCKET_TIMEOUT = _get_env_int("SOCKET_TIMEOUT", 5)
SSE_TIMEOUT = _get_env_int("SSE_TIMEOUT", 1)
# WiFi settings
WIFI_UPDATE_INTERVAL = _get_env_float("WIFI_UPDATE_INTERVAL", 2.0)
AIRODUMP_HEADER_LINES = _get_env_int("AIRODUMP_HEADER_LINES", 2)
# Bluetooth settings
BT_SCAN_TIMEOUT = _get_env_int("BT_SCAN_TIMEOUT", 10)
BT_UPDATE_INTERVAL = _get_env_float("BT_UPDATE_INTERVAL", 2.0)
# ADS-B settings
ADSB_SBS_PORT = _get_env_int("ADSB_SBS_PORT", 30003)
ADSB_UPDATE_INTERVAL = _get_env_float("ADSB_UPDATE_INTERVAL", 1.0)
ADSB_AUTO_START = _get_env_bool("ADSB_AUTO_START", False)
ADSB_HISTORY_ENABLED = _get_env_bool("ADSB_HISTORY_ENABLED", False)
ADSB_DB_HOST = _get_env("ADSB_DB_HOST", "localhost")
ADSB_DB_PORT = _get_env_int("ADSB_DB_PORT", 5432)
ADSB_DB_NAME = _get_env("ADSB_DB_NAME", "intercept_adsb")
ADSB_DB_USER = _get_env("ADSB_DB_USER", "intercept")
ADSB_DB_PASSWORD = _get_env("ADSB_DB_PASSWORD", "intercept")
ADSB_HISTORY_BATCH_SIZE = _get_env_int("ADSB_HISTORY_BATCH_SIZE", 500)
ADSB_HISTORY_FLUSH_INTERVAL = _get_env_float("ADSB_HISTORY_FLUSH_INTERVAL", 1.0)
ADSB_HISTORY_QUEUE_SIZE = _get_env_int("ADSB_HISTORY_QUEUE_SIZE", 50000)
# Observer location settings
SHARED_OBSERVER_LOCATION_ENABLED = _get_env_bool("SHARED_OBSERVER_LOCATION", True)
DEFAULT_LATITUDE = _get_env_float("DEFAULT_LAT", 0.0)
DEFAULT_LONGITUDE = _get_env_float("DEFAULT_LON", 0.0)
# Satellite settings
SATELLITE_UPDATE_INTERVAL = _get_env_int("SATELLITE_UPDATE_INTERVAL", 30)
SATELLITE_TRAJECTORY_POINTS = _get_env_int("SATELLITE_TRAJECTORY_POINTS", 30)
SATELLITE_ORBIT_MINUTES = _get_env_int("SATELLITE_ORBIT_MINUTES", 45)
# Weather satellite settings
WEATHER_SAT_DEFAULT_GAIN = _get_env_float("WEATHER_SAT_GAIN", 30.0)
WEATHER_SAT_SAMPLE_RATE = _get_env_int("WEATHER_SAT_SAMPLE_RATE", 2400000)
WEATHER_SAT_MIN_ELEVATION = _get_env_float("WEATHER_SAT_MIN_ELEVATION", 15.0)
WEATHER_SAT_PREDICTION_HOURS = _get_env_int("WEATHER_SAT_PREDICTION_HOURS", 24)
WEATHER_SAT_SCHEDULE_REFRESH_MINUTES = _get_env_int("WEATHER_SAT_SCHEDULE_REFRESH_MINUTES", 30)
WEATHER_SAT_CAPTURE_BUFFER_SECONDS = _get_env_int("WEATHER_SAT_CAPTURE_BUFFER_SECONDS", 30)
# WeFax (Weather Fax) settings
WEFAX_DEFAULT_GAIN = _get_env_float("WEFAX_GAIN", 40.0)
WEFAX_SAMPLE_RATE = _get_env_int("WEFAX_SAMPLE_RATE", 22050)
WEFAX_DEFAULT_IOC = _get_env_int("WEFAX_IOC", 576)
WEFAX_DEFAULT_LPM = _get_env_int("WEFAX_LPM", 120)
WEFAX_SCHEDULE_REFRESH_MINUTES = _get_env_int("WEFAX_SCHEDULE_REFRESH_MINUTES", 30)
WEFAX_CAPTURE_BUFFER_SECONDS = _get_env_int("WEFAX_CAPTURE_BUFFER_SECONDS", 30)
# SubGHz transceiver settings (HackRF)