Files
Aime/docs/01-hardware.md
T
Claude db3d946592 docs: komplette CallRec-Dokumentation mit Mermaid-Diagrammen
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>
2026-07-16 10:51:22 +02:00

68 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 01 — Hardware
## Board: Youyeetoo R1
| Komponente | Detail |
|---|---|
| SoC | Rockchip **RK3588S** — 4× Cortex-A76 (max 2,256 GHz) + 4× A55, **NPU 6 TOPS** (3 Kerne) |
| RAM | 8 GB |
| OS | Armbian, Kernel 6.1.115, auf SD + eMMC |
| Netz | WLAN `192.168.1.200` (primär, auto-join) / LAN `192.168.1.50` |
| Funk | **Intel AX210 M.2**: BT über USB (`hci0`, Name **"Aime"**) + WiFi über PCIe (`wlP4p65s0`). Alter RTL8821CU-USB-Dongle entfernt. |
| Kühlung | **Lüfterlos** (harte Anforderung). Lüfter am roten POWER-Port war unregelbar (Konstantspannung) und wurde entfernt; echter PWM-Header (FAN 2-Pin, hwmon7) bleibt ungenutzt. |
## Audio-Hardware
```mermaid
flowchart TB
subgraph PC["Windows-PC"]
TEAMS["Teams / Medien-Wiedergabe"]
end
subgraph BOARD["Youyeetoo R1"]
UAC2["USB-C: UAC2-Audio-Gadget<br/>(Board erscheint am PC als Headset)"]
H390["USB-A: Logitech H390 Headset<br/>ALSA card3, 046d:0a8f"]
ES(("ES8323 3,5mm<br/>DEFEKT"))
AX["AX210 Bluetooth<br/>'Aime' = BT-Headset fürs iPhone"]
end
IPHONE["iPhone 'Skynet16'"]
TEAMS <--> UAC2
IPHONE <-->|"HFP/eSCO (mSBC)"| AX
H390 --- BOARD
```
- **Logitech H390 USB-Headset** = Mikrofon + Hörer des Nutzers. Ersetzt den **defekten ES8323**-3,5mm-Pfad
(Mikrofonverstärkung stand fest auf −42,14 dB, Treiberdefekt; S16-Modus zusätzlich verbuggt → Umstieg 2026-07-07).
- **USB-C zum PC = UAC2-Gadget:** Der PC sieht das Board als USB-Headset. PC-Audio kommt als ALSA-Capture
`alsa_input.platform-fc000000.usb...` ins Board; Richtung Board→PC (`alsa_output.platform-fc000000.usb`) hört die Gegenseite den Nutzer.
- **Headset-Inline-Tasten** (Vol +/−, Mute) = HID-Events auf `/dev/input/event5` → Daemon `aime-headset-keys.service` → `pactl`-Sink-Volume.
- **Windows-Lautstärkeregler** wirkt nicht auf den Datenstrom, sondern kommt als UAC2-Mixer-Wert (`amixer -c UAC2Gadget numid=7`) →
`aime-volbridge-headset.sh` pollt und setzt die Headset-Sink-Lautstärke.
## NPU-Nutzung
| Aufgabe | Engine | Modell |
|---|---|---|
| Whisper-**Encoder** | RKNN (NPU) | `turbo-encoder-fp16.rknn` (selbst konvertiert, Kosinus-Ähnlichkeit 0,9998 zur CPU-Referenz) |
| LLM-Analyse | rkllm 1.3.0 (NPU) | `gemma3-4b-w8a8g128-16k.rkllm` |
| Diarization | CPU (sherpa-onnx) | bewusst CPU: RTF 0,194 ≈ NPU-Referenzwert |
## Thermik (lüfterlos!)
Whisper/Diarization auf allen A76-Kernen bei Volltakt → `bigcore critical temp` → **Hardware-Schutzabschaltung**
(zweimal passiert, Aufnahmen schienen „verschwunden“). Gegenmaßnahmen:
```mermaid
flowchart LR
START["transcribeWav() startet"] --> CAP["A76-Takt kappen<br/>2256 → 1608 MHz<br/>(aime-cpucap.sh, sudoers NOPASSWD)"]
CAP --> WORK["Whisper + Diarization<br/>(~72 °C statt >90 °C)"]
WORK --> GUARD{"Temp > 90 °C?"}
GUARD -- ja --> STOPP["SIGSTOP Whisper<br/>bis < 78 °C, dann SIGCONT"]
GUARD -- nein --> WORK
WORK --> FIN["finally: Takt zurück auf 2256 MHz"]
```
- Cap umschließt **die ganze** `transcribeWav` (Whisper **und** Diarization) — Absturz #2 kam, weil die Diarization nach Whisper wieder mit Volltakt lief.
- 1,8 GHz wurde getestet und **verworfen** (~90 °C, Guard-Flattern). 1,6 GHz ≈ 72 °C stabil.
- Seit Whisper-Encoder auf NPU: Transkription 90 °C → **59 °C**; Cap kostet nur noch ~7 % Gesamtzeit.