Architektur, Hardware/Thermik, PipeWire-Audio-Topologie, Aufnahme-Pipeline, Diarization (Anchor-Merge), LLM-Analyse (Gemma-3-4B/NPU), iPhone-BT-HFP, Betrieb/Troubleshooting und Changelog-Chronik. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.3 KiB
4.3 KiB
07 — Betrieb
⚠️ Dieses Repo ist privat; hier stehen LAN-Zugangsdaten. Nicht öffentlich stellen.
Zugänge
| System | Zugang |
|---|---|
| Board SSH | root@192.168.1.200 (WLAN, primär) / root@192.168.1.50 (LAN), PW 123456 |
| Web-GUI | http://192.168.1.200:3000 |
| MariaDB (auf dem Board) | DB callrec, User callrec, PW callrec123 (kein sqlite3/CLI-Client — mysql nutzen) |
| Gitea (diese Doku) | http://192.168.1.199:3000, User sascha |
| App-User auf dem Board | callrec, Code in /opt/callrec |
systemd-Einheiten
| Einheit | Scope | Aufgabe |
|---|---|---|
callrec.service |
system | Node-App (Web-GUI :3000, Aufnahme, Pipeline) |
callrec-btwatch.service |
system | BT-Headset-Auto-Connect (card-aware) |
callrec-perf.service |
system | CPU-Governor performance + A76-Pinning |
aime-usb-audio.service |
user | PipeWire-Topologie beim Boot (callmix, Loopbacks, Remap) |
aime-micgate.service |
user | LADSPA-Noise-Gate-Filter-Chain |
aime-volume-headset.service |
user | Windows-Volume → Headset-Sink (UAC2 numid=7) |
aime-headset-keys.service |
root | H390-Inline-Tasten → Lautstärke |
aime-iphone-route.service |
— | HFP-Routing-Watcher für iPhone-Anrufe |
filter-chain.service (PipeWire-Standard) |
user | MASKIERT — würde micgate doppeln |
aime-audio-out / aime-volume |
user | ES8323-Ära, disabled |
Wichtige Pfade auf dem Board
| Pfad | Inhalt |
|---|---|
/opt/callrec/*.js |
server / recorder / llm / diar / spk / db / bt |
/opt/callrec/web/ |
Vite-Frontend (npx vite build nach Änderungen an src/) |
/opt/callrec/aime-*.sh |
Setup-/Bridge-/Cap-Skripte |
/opt/callrec/milestones/m1-20260709/ |
Meilenstein-1-Snapshot inkl. MANIFEST.md (Rollback) |
/opt/callrec/*.bak-* |
Datei-Backups je Änderung (z. B. .bak-structsum, .bak-anchor) |
/etc/sudoers.d/callrec-cpucap |
NOPASSWD für aime-cpucap.sh (Thermal-Cap) |
Deploy-Ablauf (von Windows aus)
flowchart LR
DEV["Datei lokal ändern<br/>(pscp vom Board holen)"] --> BAK["Backup auf Board:<br/>cp X X.bak-<thema>"]
BAK --> UP["pscp hochladen"]
UP --> FE{"Frontend<br/>geändert?"}
FE -- ja --> BUILD["ssh: cd /opt/callrec/web && npx vite build"]
FE -- nein --> RESTART
BUILD --> RESTART["systemctl restart callrec"]
RESTART --> VERIFY["Verifizieren: journalctl -u callrec,<br/>GUI-Test, ggf. reanalyze-llm"]
VERIFY --> DOC["Doku + Changelog in Gitea aktualisieren"]
- Windows-Seite: PuTTY-Tools (
plink -batch -pw …,pscp) — OpenSSH-Keys sind nicht hinterlegt. - Node-Syntax vor Upload prüfen:
node --check datei.js.
Troubleshooting
| Symptom | Ursache / Fix |
|---|---|
Zeile hängt auf transcribing |
Absturz mitten in Diarization → GUI „Neu transkribieren“ (/retranscribe) |
| Summary wirkt leer nach Retranskription | GUI muss analysis_status pollen, nicht status — Analyse ist fire-and-forget |
| Board plötzlich aus | Thermik prüfen — Schutzabschaltung; Cap-Skript/Sudoers intakt? (Kap. 01) |
| Zu viele Sprecher | Audio geclippt? (Gain-Staging Kap. 02) Sonst „Analyse neu“ mit gepinnter Zahl |
| Teilnehmer ≠ Sprecher | Teilnehmer kommen aus Diarization; Namen im Sprecher-Editor vergeben |
| Kein far-end bei iPhone-Aufnahme | BT-Gerät Trusted=yes? HFP-Nodes erscheinen nur IM Anruf (Kap. 06) |
| GUI zeigt Quelle ohne Signal | .monitor-Falle — Quelle mit parecord + ffmpeg astats prüfen (Kap. 02) |
pactl load-module module-filter-chain → „No such entity“ |
Filter-Chain ist Core-Modul → Drop-in-Config nutzen (Kap. 02) |
rkllm/Whisper rc=-6 |
RAM-Contention — nicht beide NPU-resident; NPU-Lock beachten (Kap. 05) |
| Analyse „KI Fehler“ bei langen Aufnahmen | Kontext-Überlauf → Chunk-Pfad greift; bei schwachem Ergebnis „Analyse neu“ |
Offene Punkte (Stand 2026-07-16)
- Bedingter Takt-Cap (nur > 15 min Aufnahmedauer) — angeboten, nicht gebaut (~1,4× schnellere Kurzclips).
- Feinabstimmung Mikro/PC-Balance in einem echten Headset-Call.
- Glossar Phase 2: nächtlicher systemd-Timer + large-v3-Kandidaten-Vorschläge mit Bestätigung (verschoben).
- iPhone-Pfad: automatischer Aufnahme-Start + voller E2E-Test (Kap. 06).
- Qwen-1.5B als schnellerer LLM-Kandidat für Kurzclips (verschoben).
- Aufnahme #41 bleibt dauerhaft geclippt (Referenz für den Gain-Bug).