secubox-deb/packages/secubox-fmrelay/menu.d
CyberMind-FR 047e723869 feat(fmrelay): v0.1.0 — rtl_fm to Icecast MP3 + RDS ICY metadata (closes #377)
New module: bridges a single FM broadcast to an Icecast2 MP3 mount and
pushes live RDS RadioText as ICY metadata, so SecuBox webradio + Lyrion
can ingest it as a Favourite remote URL with proper "Artist - Title"
display.

api/main.py: FastAPI on /run/secubox/fmrelay.sock, delegates lifecycle
to fmrelayctl. Endpoints: healthz, version, status, components, access,
mounts, now-playing, start, stop.

sbin/fmrelayctl: bash CTL on the lyrionctl pattern, TOML config_get with
inline-comment stripping. emit_access_json returns the LAN mount URL +
public webradio URL so the admin UI's "Open Webradio →" button reads
its href from /access at runtime (MODULE-GUIDELINES §4 single source of
truth).

sbin/secubox-fmrelay-runner: rtl_fm | ffmpeg -c:a libmp3lame on an
Icecast SOURCE mount. ffmpeg speaks icecast:// natively + handles
reconnects — simpler than ezstream/curl plumbing.

sbin/secubox-fmrelay-icy: parallel rtl_fm @ 171kHz | redsea pipe that
POSTs PI/PS/RT to icecast2/admin/metadata. Two rtl_fm processes share
the dongle for v0.1; v0.2 plans a single stream via sox tee.

nginx/fmrelay.conf: /api/v1/fmrelay/ → unix socket, /fmrelay/ aliases
the static admin page. Both gated by auth_request per dual-vhost MUST.

www/fmrelay/index.html: SecuBox admin with status pill, components,
access, now-playing, mounts table, manual start/stop form.

systemd/secubox-fmrelay.service: User=secubox uvicorn on unix socket,
NoNewPrivileges + ProtectHome + restricted ReadWritePaths.

debian/{rules,compat,postinst,prerm,postrm}: install layout, ensure
secubox user is in plugdev (RTL-SDR), seed /etc/secubox/fmrelay.toml
from example, enable + start the service, nginx reload.

menu.d/72-fmrelay.json: mesh category, 📻 icon.

README.md: full module documentation (API table, CLI, config, deps,
install layout, RTL-SDR sharing note).

Hardware sharing with secubox-sentinelle-gsm via plugdev group; the
cross-package device-claim coordination is a v0.2 follow-up — for now
v0.1 trusts the operator not to dual-run a relay during a GSM scan.
2026-05-24 11:29:23 +02:00
..
72-fmrelay.json feat(fmrelay): v0.1.0 — rtl_fm to Icecast MP3 + RDS ICY metadata (closes #377) 2026-05-24 11:29:23 +02:00