Files

5.7 KiB

homelab-radio — Радио / SDR

Радио / SDR на Raspberry Pi (radio.<domain> → Pi:8090). HackRF слушает авиа- и прочие каналы через RTLSDR-Airband.

Устройство (sdr/, на Pi — /opt/pi/sdr/)

каталог что юнит
radio/ общий пакет (stdlib): все пути и env (config.py), каналы, записи и индексы дней, длительность mp3, json-хелперы —
web/ страница радио: server.py (вход), handler.py (маршруты), audio.py (Range + прокси архива), events.py (SSE), shares.py, sources.py, speaker.py, status.py, pages.py собирает templates/ + static/ в самодостаточные страницы sdr-recordings
scanner/ gen_config.py — rtl_airband.conf + channels.json из одной таблицы частот; watchdog.sh — перезапуск при мёртвом потоке HackRF sdr-scanner (ExecStartPre), sdr-scanner-watchdog
classify/ голос/шум: classify.py (цикл), audio.py (DSP), adsb.py (снимок ADS-B к записи), guard.py (залипшие каналы) sdr-classify
discover/ поиск активных частот через hackrf_sweep (останавливает сканер на время прохода) sdr-discover
archive/ archive.py — старые дни на HDD сервера (rsync → сверка → удаление), retention.sh — чистка шума sdr-archive, sdr-retention
speaker/ вывод новых голосовых записей на колонки Pi sdr-speaker
patches/ локальный патч RTLSDR-Airband —
readsb/ ADS-B (readsb) —

Ещё: etc/ — channels.json/rtl_airband.conf и udev-правила (HackRF, хаб колонок), systemd/ — юниты, openwebrx/ — OpenWebRX (compose + конфиги, без пользователей и настроек с координатами), server/ — серверная часть: HTTP-архив записей homelab-sdr-archive и блок Caddy (radio.caddy, хеш basic_auth вычищен). Записи, состояние, ssh-ключ архива (/etc/sdr-archive) и пароль OpenWebRX — только на Pi.

Откуда это

Копия живых файлов с сервера Homelab (и Pi), которую publish-repos (репо homelab-infra) снимает по манифесту и заливает сюда. Источник истины для шаблонов — основной репозиторий на ноутбуке; это зеркало, чтобы ничего не потерялось.

Чего здесь нет (и не должно быть): секретов и личных настроек. Перед каждым коммитом скрипт заменяет известные секретные значения на @@SECRET@@, хеши паролей на @@BCRYPT_HASH@@, внешние адреса на @@PUBLIC_IP@@/@@VPN_HOST@@, домен на example.com, MAC и UUID на подставные, и не коммитит ничего, если находит ключи, токены или большие файлы. Не публикуются: site.json, devices.json, .env, конфиги xray с ключами, secrets/, базы, данные и бэкапы *.bak*. Поэтому файлы отсюда нельзя просто скопировать обратно на сервер — плейсхолдеры нужно заполнить.

Что где

в репозитории на сервере
sdr/ Pi: /opt/pi/sdr/
openwebrx/docker-compose.yml Pi: /opt/pi/openwebrx/docker-compose.yml
openwebrx/etc/ Pi: /opt/pi/openwebrx/etc/
etc/sdr-scanner/ Pi: /etc/sdr-scanner/
etc/udev/90-hackrf-scanner-restart.rules Pi: /etc/udev/rules.d/90-hackrf-scanner-restart.rules
etc/udev/70-speaker-hub.rules Pi: /etc/udev/rules.d/70-speaker-hub.rules
systemd/sdr-archive.service Pi: /etc/systemd/system/sdr-archive.service
systemd/sdr-archive.timer Pi: /etc/systemd/system/sdr-archive.timer
systemd/sdr-classify.service Pi: /etc/systemd/system/sdr-classify.service
systemd/sdr-discover.service Pi: /etc/systemd/system/sdr-discover.service
systemd/sdr-discover.timer Pi: /etc/systemd/system/sdr-discover.timer
systemd/sdr-live.service Pi: /etc/systemd/system/sdr-live.service
systemd/sdr-recordings.service Pi: /etc/systemd/system/sdr-recordings.service
systemd/sdr-recordings.service.d Pi: /etc/systemd/system/sdr-recordings.service.d
systemd/sdr-retention.service Pi: /etc/systemd/system/sdr-retention.service
systemd/sdr-retention.timer Pi: /etc/systemd/system/sdr-retention.timer
systemd/sdr-scanner-watchdog.service Pi: /etc/systemd/system/sdr-scanner-watchdog.service
systemd/sdr-scanner-watchdog.timer Pi: /etc/systemd/system/sdr-scanner-watchdog.timer
systemd/sdr-scanner.service Pi: /etc/systemd/system/sdr-scanner.service
systemd/sdr-scanner.service.d Pi: /etc/systemd/system/sdr-scanner.service.d
systemd/sdr-speaker.service Pi: /etc/systemd/system/sdr-speaker.service
systemd/sdr-speaker.service.d Pi: /etc/systemd/system/sdr-speaker.service.d
server/sdr_archive_http.py /opt/homelab/sdr-archive/sdr_archive_http.py
server/homelab-sdr-archive.service /etc/systemd/system/homelab-sdr-archive.service
server/radio.caddy блок radio.home.<domain> в Caddyfile