# 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) ```mermaid flowchart LR DEV["Datei lokal ändern
(pscp vom Board holen)"] --> BAK["Backup auf Board:
cp X X.bak-<thema>"] BAK --> UP["pscp hochladen"] UP --> FE{"Frontend
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,
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).