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>
3.3 KiB
3.3 KiB
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
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→ Daemonaime-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.shpollt 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:
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.