# Workflows **Revision:** r1 **Source:** CLAUDE.md **Last updated:** 2026-01-31 12:35 --- ## Wakeword-Erkennung ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Client │ │ Server │ │ Client │ │ (Satellite)│ │ │ │ (andere) │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ │ │ │ 1. Wakeword erkannt │ │ (Erkennung pausieren) │ │ (Audio puffern) │ │ │ │ │──WakewordDetected────────>│ │ │ │<──────────────────│ WakewordDetected │ │ │ (wenn auch erkannt) │ │ │ │ 2. 1 Sekunde warten │ │ (Arbitrierung: │ │ höchstes audio_level │ │ gewinnt) │ │ │ │ │<──WakewordSelected│ │ │ (conversation_id)│──WakewordAbort─────────>│ │ │ │ │ 3. Audio streamen │ │ │ (max 60s oder │ │ │ 3s Stille) │ │ │ │ │ │──────Audio───────>│ │ │──────Audio───────>│ │ │──RecordingDone───>│ │ │ │ │ │ 4. raw_audio_input_received │ │ Event auslösen │ │ │ │ │ 5. STT → NLP → Intent │ │ │ │ ``` ### Timing-Parameter | Parameter | Wert | Beschreibung | |-----------|------|--------------| | Arbitration Timeout | 1 Sekunde | Warten auf mehrere Wakewords | | Max Silence | 3 Sekunden | Stille beendet Aufnahme | | Max Duration | 60 Sekunden | Maximale Aufnahmedauer | | Reconnect Interval | 5 Sekunden | Wiederverbindungsversuch | ## Satellite-Registrierung ``` ┌─────────────┐ ┌─────────────┐ │ Admin │ │ Server │ │ (User) │ │ │ └──────┬──────┘ └──────┬──────┘ │ │ │ 1. Registrierungsmodus aktivieren │ │──────────────────────────────────>│ │ │ │ Timeout: 60 Sekunden │ │ ┌───────────────────────┐ │ │ │ Registration Mode ON │ │ │ └───────────────────────┘ │ │ │ │ ┌──────┴──────┐ │ │ Client │ │ │ (new) │ │ └──────┬──────┘ │ │ │ 2. Client versucht Verbindung │ │ SatelliteConnect<─│ │ │ │ 3. Server prüft MAC-Adresse │ │ → Nicht registriert │ │ → Registrierungsmodus aktiv? │ │ │ │ 4. Registrierung speichern │ │ → satellites/{MAC}.json │ │ │ │ SatelliteAccepted─>│ │ │ ``` ### Registrierungsdatei (satellites/{MAC}.json) ```json { "id": "sat-uuid-1234", "room_id": "wohnzimmer", "mac_address": "AA-BB-CC-DD-EE-FF", "alias": "Echo Wohnzimmer", "registered_at": "2026-01-31T12:00:00.000Z" } ``` ## Anwendungsstart ``` ┌──────────────────────────────────────────────────────┐ │ main.py │ │ 1. CLI-Argumente parsen │ │ 2. Modus auswählen (server/client/standalone/train) │ │ 3. Anwendungsklasse instanziieren │ └────────────────────────┬─────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────┐ │ IApplication.run() │ │ 1. Signal-Handler einrichten (SIGINT, SIGTERM) │ │ 2. initialize() aufrufen │ │ 3. start() aufrufen │ │ 4. Auf Shutdown-Event warten │ │ 5. stop() aufrufen │ └────────────────────────┬─────────────────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ initialize()│ │ start() │ │ stop() │ │ │ │ │ │ │ │ • Config │ │ • Services │ │ • Events │ │ laden │ │ starten │ │ shutdown │ │ • Manager │ │ • Plugins │ │ • Satellites│ │ erstellen │ │ laden │ │ trennen │ │ │ │ │ │ • Plugins │ │ │ │ │ │ entladen │ │ │ │ │ │ • Services │ │ │ │ │ │ stoppen │ └─────────────┘ └─────────────┘ └─────────────┘ ``` ## Service-Start-Reihenfolge ``` CRITICAL (0) ──→ CORE (10) ──→ NETWORK (20) ──→ MANAGER (30) ──→ PLUGIN (40) ──→ OPTIONAL (50) │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ▼ Logging EventManager Sockets Satellite Plugins Extras Config Protocol Registration ``` **Abhängigkeiten werden automatisch aufgelöst:** Wenn Service B von Service A abhängt, wird A vor B gestartet, unabhängig von der Priorität. --- **See also:** [architecture.md](architecture.md), [integrations.md](integrations.md)