Intercom-LXC
Eigenständiger Debian-13-LXC mit Nginx, FastAPI, Mosquitto, SQLite, systemd und vorbereitetem TURN-Fallback.
Dokumentationsstand · V1-Grundimplementierung
Piding Intercom verbindet einen stationären Raspberry Pi in Piding mit einer installierbaren PWA in Saalfelden. MQTT steuert den Zustand, WebRTC transportiert das Audio mit niedriger Latenz.
Dieses Projekt wird auf einem eigenen Debian-13-LXC betrieben. Das bestehende Projekt Piding-LAN dient ausschließlich als lesbare Netzwerkinformation und wird nie verändert.
01 · Systemarchitektur
Frontend, Signaling, Steuerung und stationäre Audiohardware bleiben bewusst voneinander getrennt.
Eigenständiger Debian-13-LXC mit Nginx, FastAPI, Mosquitto, SQLite, systemd und vorbereitetem TURN-Fallback.
WebRTC-Signaling, Sitzungen, Rollen, Passkey-Pairing, Override-Leases und Health-API — ohne Audioverarbeitung.
MQTTS für Heartbeats, LWT, Pi-Status und sichere Mute-/Unmute-Befehle mit separaten ACLs.
USB-Mikrofon, Klinkenausgabe, lokale Echo-Cancellation, WebRTC, MQTT und später GPIO-LED.
Desktop und Mobil: Zuhören, Freisprechen, lokaler Piding-Override, Status und sichere Diagnose.
Aktive TLS-Terminierung für piding-intercom.taxer.at mit Weiterleitung zum eigenständigen LXC.
Entwicklungsstand Saalfelden: Die PWA und das Browser-Signaling werden über https://piding-intercom.taxer.at beziehungsweise WSS von Zoraxy bereitgestellt. Der Pi signalisiert während der lokalen Hardwareentwicklung weiterhin innerhalb des privaten Netzes über ws://; die MQTT-Steuerung nutzt bereits MQTTS.
02 · Betriebsmodi
| Modus | Pi-Mikrofon | Pi-Klinkenausgabe | Aktiver Audiopfad |
|---|---|---|---|
| Standard / Babyfon | Aktiv | Aktiv | Pi ↔ ein aktiver Saalfelden-Sprecher; weitere Saalfelden-Geräte hören zu. |
| Piding-Override | Deaktiviert | Deaktiviert | Lokales Piding-PWA-Gerät ↔ Saalfelden. |
| Fehler / Offline | Sicher stumm | Sicher stumm | Kein unkontrollierter Audiobetrieb. |
Mehrere Saalfelden-Geräte dürfen zuhören. Genau ein Gerät besitzt gleichzeitig das automatisch verwaltete Sprechrecht und gibt Sprache über den Pi aus.
Freisprechen ist Standard. Push-to-talk wird als bewusst aktivierbarer Rückkopplungs- und Diagnose-Fallback technisch vorbereitet.
03 · Audio & Routing
04 · Sicherheit & Ausfallsicherheit
Ein Piding-Override erfordert ein registriertes PWA-Gerät mit Passkey/WebAuthn und nach Einrichtung von Split-DNS zusätzlich die Herkunft aus dem Piding-Netz 10.90.0.0/24. Nginx vertraut für die ursprüngliche Client-IP ausschließlich der einzeln verifizierten Zoraxy-Adresse und ersetzt weitergereichte Proxy-Header vor FastAPI durch den bereinigten Wert.
Ein Browser-Heartbeat alle zehn Sekunden hält eine 30-Sekunden-Override-Lease. Bei Sperren, Netzverlust oder Absturz läuft sie ab; das Backend gibt den Pi per MQTT wieder frei.
Nicht privilegierte systemd-Dienste, Watchdogs, Backoff, TLS mit HSTS, ACLs, bereinigte Logs, SQLite-WAL und geschützte Secrets minimieren Ausfälle und Risiken.
/api/health, Pi-Heartbeat, MQTT-Status und nachvollziehbare Diagnosezustände werden in der PWA sichtbar, ohne Zugangsdaten preiszugeben.
05 · PWA-Standard
Roboto Condensed wird lokal ausgeliefert. Die Salzburg-AG-Dark-Palette ist zentral über semantische CSS-Variablen definiert. Das lokale Intercom-Zeichen wird als SVG sowie als PNG-, Apple-Touch- und ICO-Fallback bereitgestellt.
Bis 768 px: kleinere Typografie und Abstände, Hamburger-Navigation, Prüfung auf Oppo Find X9 Ultra in Hoch- und Querformat.
Jeder Toast besitzt ein Schließen-Symbol. Fehler bleiben verständlich und bieten zusätzlich eine bereinigte technische Kopierdiagnose. Ein PWA-Update bleibt bis zum Klick auf „Aktualisieren“ sichtbar; erst nach Aktivierung des neuen Workers lädt die App neu.
Einheitliche Feldhöhen und Zustände, zugängliche Constraint-Validation sowie moderne <dialog>-Modals statt Browser-Pop-ups.
06 · Inbetriebnahme
Erledigt: Backend, PWA, Pi-Client, Konfigurationsvorlagen, Dokumentation und zentrale Release-Kennung wurden modular angelegt.
Erledigt: Debian-13-LXC mit nicht privilegiertem FastAPI-Dienst, Python-venv, Mosquitto mit MQTTS/ACL, Nginx und geschützten Laufzeit-Secrets ist aktiv. Health- und Passkey-Smoketests laufen erfolgreich.
In Arbeit: Der Raspberry Pi ist registriert und der systemd-Client ist aktiv. WebSocket-Signaling, MQTT-Mute/Unmute und ein kontrollierter Client-Neustart wurden Ende-zu-Ende bestätigt. Das USB-Mikrofon und die GPIO-LED folgen mit der realen Hardware; bis dahin arbeitet der Client bewusst im stillen Testmodus.
Erledigt: piding-intercom.taxer.at terminiert TLS und leitet zum LXC weiter. Backend-Origin, WebAuthn-RP-ID, CORS, HSTS, WebSockets und die gegen externe Header-Manipulation geprüfte Client-IP-Weitergabe sind aktiv.
IPsec, Split-DNS, Passkey-Override, Audio, Netzverlust und Wiederanlauf im echten Standortnetz prüfen.
07 · Prüfweg
08 · Versionierung
SemVer wird bewusst eingesetzt: MAJOR für nicht kompatible Umstellungen, MINOR für zusammenhängende Funktionen und PATCH für kompatible Korrekturen.
Das Repository liegt privat auf GitHub. Lokale Commits und Pushes erfolgen ausschließlich nach ausdrücklicher Freigabe durch den Repository-Eigentümer; Secrets, Zertifikate, Laufzeitdaten und Backups bleiben durch verbindliche Ignore-Regeln außerhalb von Git.
piding-intercom.taxer.at umgestellt. HSTS, CORS, WSS, Passkey-Optionen und PWA-Ressourcen wurden von außen bestätigt; Nginx vertraut nur dem verifizierten Zoraxy-Host und bestand den kontrollierten Test gegen einen gefälschten Piding-Client-IP-Header.