# Datenmodelle **Revision:** r1 **Source:** CLAUDE.md, trixy_core/config/datasets/ **Last updated:** 2026-01-31 12:35 --- ## Konfigurationsstrukturen ### ServerConfig ```python @dataclass class ServerConfig: network: NetworkConfig security: SecurityConfig audio: AudioConfig wakeword: WakewordConfig voice_recognition: VoiceRecognitionConfig conversation: ConversationConfig plugins: PluginConfig logging: LoggingConfig satellites_directory: str = "satellites" assets_directory: str = "assets" models_directory: str = "models" profile: str = "default" ``` ### NetworkConfig ```python @dataclass class NetworkConfig: command_port: int = 2101 audio_input_port: int = 2102 audio_output_port: int = 2103 music_port: int = 2104 bind_address: str = "0.0.0.0" max_connections: int = 100 ``` ### ClientConfig ```python @dataclass class ClientConfig: server: ServerConnectionConfig audio: ClientAudioConfig wakeword: ClientWakewordConfig identity: SatelliteIdentityConfig logging: ClientLoggingConfig assets_directory: str = "assets" profile: str = "default" ``` ### TrainerConfig ```python @dataclass class TrainerConfig: wakeword: WakewordTrainerConfig voice_recognition: VoiceRecognitionTrainerConfig audio_processing: AudioProcessingConfig data: DataConfig output: OutputConfig device: str = "auto" # auto, cpu, cuda, mps num_workers: int = 4 seed: int = 42 ``` ## Event-Daten ### EventData (Basis) ```python @dataclass class EventData: event_id: str # UUID timestamp: datetime # Erstellungszeitpunkt source: str # Quelle (z.B. Service-Name) cancelled: bool # Abbruch-Status metadata: dict[str, Any] def cancel() -> None def is_cancelled() -> bool @classmethod def event_name() -> str # Klassenname in snake_case ``` ### Wichtige Event-Daten | Klasse | Felder | |--------|--------| | WakewordReceived | satellite_id, wakeword_model, confidence, audio_level | | SpeechRecognized | satellite_id, text, confidence, language, alternatives | | IntentReceived | satellite_id, intent, confidence, slots, original_text | | RawAudioInputReceived | satellite_id, audio_data, sample_rate, duration_seconds | ## Netzwerk-Befehle ### CommandMessage (Basis) ```python @dataclass class CommandMessage: message_id: str # UUID timestamp: datetime def to_dict() -> dict[str, Any] @classmethod def from_dict(data: dict) -> CommandMessage ``` ### Satellite-Befehle | Klasse | Felder | Richtung | |--------|--------|----------| | SatelliteConnect | mac_address, room, alias, ip_address, version | Client → Server | | SatelliteAccepted | satellite_id, session_key, ports... | Server → Client | | SatelliteDenied | reason, retry_allowed, retry_after_seconds | Server → Client | ### Wakeword-Befehle | Klasse | Felder | |--------|--------| | WakewordDetected | satellite_id, wakeword_model, confidence, audio_level | | WakewordSelected | conversation_id, start_streaming | | WakewordAbort | reason, resume_detection | ## Satellite-Daten ```python class Satellite: id: str room_id: str mac_address: str alias: str ip_address: str state: ConnectionState # DISCONNECTED, CONNECTING, CONNECTED, AUTHENTICATED conversation_id: str | None connected_at: datetime | None last_heartbeat: datetime | None version: str ``` **Registrierung (JSON-Datei):** ```json { "id": "sat-uuid", "room_id": "wohnzimmer", "mac_address": "AA:BB:CC:DD:EE:FF", "alias": "Echo 1", "registered_at": "2026-01-31T12:00:00" } ``` --- **See also:** [apis.md](apis.md), [integrations.md](integrations.md)