@echo off REM Trixy Installationsskript (Windows) REM Interaktive Einrichtung: Modus, Konfiguration, Autostart/Dienst setlocal enabledelayedexpansion REM Ins Projektverzeichnis wechseln pushd "%~dp0" set "PROJECT_DIR=%~dp0" REM Trailing Backslash entfernen if "%PROJECT_DIR:~-1%"=="\" set "PROJECT_DIR=%PROJECT_DIR:~0,-1%" echo. echo ======================================== echo Trixy - Interaktive Installation echo ======================================== echo. REM ------------------------------------------------------- REM Schritt 1: Update ausfuehren REM ------------------------------------------------------- echo [1/7] Update ausfuehren... if exist "bash\update_windows.bat" ( call bash\update_windows.bat ) else ( echo Hinweis: Update-Skript nicht gefunden, ueberspringe. ) echo. REM ------------------------------------------------------- REM Schritt 2: Python-Abhaengigkeiten installieren REM ------------------------------------------------------- echo [2/7] Python-Abhaengigkeiten pruefen... where python >nul 2>&1 if errorlevel 1 ( echo FEHLER: python nicht gefunden! Bitte Python 3.10+ installieren. goto :end ) where pip >nul 2>&1 if errorlevel 1 ( echo Hinweis: pip nicht gefunden. Abhaengigkeiten muessen manuell installiert werden. ) else ( if exist "requirements.txt" ( echo Installiere Abhaengigkeiten aus requirements.txt... pip install -r requirements.txt ) else ( echo Keine requirements.txt gefunden, ueberspringe. ) ) echo. REM ------------------------------------------------------- REM Schritt 3: Modus waehlen REM ------------------------------------------------------- echo [3/7] Modus waehlen echo. echo Welchen Modus moechtest du installieren? echo [1] Server - Zentraler Server fuer Satellite-Management echo [2] Standalone - All-in-One ohne Server echo [3] Client - Leichtgewichtiger Satellite echo. :mode_select set /p "MODE_CHOICE= Auswahl [1/2/3]: " if "%MODE_CHOICE%"=="1" ( set "MODE=server" set "CONFIG_FILE=config\server_config.json" goto :mode_done ) if "%MODE_CHOICE%"=="2" ( set "MODE=standalone" set "CONFIG_FILE=config\standalone_config.json" goto :mode_done ) if "%MODE_CHOICE%"=="3" ( set "MODE=client" set "CONFIG_FILE=config\client_config.json" goto :mode_done ) echo Ungueltige Auswahl. Bitte 1, 2 oder 3 eingeben. goto :mode_select :mode_done echo. REM ------------------------------------------------------- REM Schritt 4: Device-Name abfragen REM ------------------------------------------------------- echo [4/7] Geraetename festlegen echo Aktueller Hostname: %COMPUTERNAME% set "DEVICE_NAME=" set /p "DEVICE_NAME= Neuer Geraetename (leer = beibehalten): " if not "%DEVICE_NAME%"=="" ( echo Setze Hostname auf: %DEVICE_NAME% WMIC computersystem where name="%COMPUTERNAME%" call rename name="%DEVICE_NAME%" >nul 2>&1 if errorlevel 1 ( echo Hinweis: Hostname konnte nicht gesetzt werden. Starte als Administrator. ) else ( echo Hostname geaendert. Wird nach Neustart wirksam. ) ) else ( set "DEVICE_NAME=%COMPUTERNAME%" ) echo. REM ------------------------------------------------------- REM Schritt 5: Modus-spezifische Abfragen REM ------------------------------------------------------- echo [5/7] Konfiguration fuer Modus: %MODE% echo. set "ALIAS=" set "ROOM=" set "HOST=" set "PORT=2101" set "NETWORK_MODE=" if "%MODE%"=="client" goto :config_client if "%MODE%"=="standalone" goto :config_standalone if "%MODE%"=="server" goto :config_server goto :config_done :config_client set /p "ALIAS= Alias (Satellite-Name): " set /p "ROOM= Raum-Kennung: " set /p "HOST= Server-Host (IP-Adresse): " echo. set /p "CUSTOM_PORT= Eigenen Port verwenden? [j/n]: " if /i "%CUSTOM_PORT%"=="j" ( set /p "PORT= Port-Nummer: " ) echo Schreibe %CONFIG_FILE%... python -c "import json; f=open('%CONFIG_FILE%','r'); cfg=json.load(f); f.close(); cfg['server']['host']='%HOST%'; cfg['server']['port']=%PORT%; cfg['identity']['room']='%ROOM%'; cfg['identity']['alias']='%ALIAS%'; f=open('%CONFIG_FILE%','w'); json.dump(cfg,f,indent=4,ensure_ascii=False); f.close()" echo Konfiguration geschrieben. goto :config_done :config_standalone set /p "ALIAS= Alias: " set /p "ROOM= Raum-Kennung: " echo Schreibe %CONFIG_FILE%... python -c "import json; f=open('%CONFIG_FILE%','r'); cfg=json.load(f); f.close(); cfg['room']='%ROOM%'; cfg['alias']='%ALIAS%'; f=open('%CONFIG_FILE%','w'); json.dump(cfg,f,indent=4,ensure_ascii=False); f.close()" echo Konfiguration geschrieben. goto :config_done :config_server echo Netzwerk-Konfiguration: echo [1] Normales Netzwerk - Server laeuft im bestehenden LAN echo [2] WiFi-Hotspot - Nur unter Linux verfuegbar echo. :net_select set /p "NET_CHOICE= Auswahl [1/2]: " if "%NET_CHOICE%"=="1" ( set "NETWORK_MODE=LAN" set "BIND_ADDRESS=0.0.0.0" goto :net_done ) if "%NET_CHOICE%"=="2" ( echo. echo HINWEIS: WiFi-Hotspot wird nur unter Linux unterstuetzt. echo Fahre mit normalem Netzwerk fort. set "NETWORK_MODE=LAN" set "BIND_ADDRESS=0.0.0.0" goto :net_done ) echo Ungueltige Auswahl. goto :net_select :net_done echo Schreibe %CONFIG_FILE%... python -c "import json; f=open('%CONFIG_FILE%','r'); cfg=json.load(f); f.close(); cfg['network']['bind_address']='%BIND_ADDRESS%'; f=open('%CONFIG_FILE%','w'); json.dump(cfg,f,indent=4,ensure_ascii=False); f.close()" echo Konfiguration geschrieben. goto :config_done :config_done echo. REM ------------------------------------------------------- REM Schritt 6: Autostart / Dienst einrichten REM ------------------------------------------------------- echo [6/7] Startmethode waehlen echo. echo Wie soll Trixy gestartet werden? echo [1] Autostart - Startet beim Login des Benutzers echo [2] Dienst - Als Windows-Dienst (erfordert NSSM) echo. set "START_METHOD=" :start_select set /p "START_CHOICE= Auswahl [1/2]: " if "%START_CHOICE%"=="1" ( set "START_METHOD=Autostart" goto :start_done ) if "%START_CHOICE%"=="2" ( set "START_METHOD=Dienst" goto :start_done ) echo Ungueltige Auswahl. goto :start_select :start_done REM Config-Pfad fuer Startskript (Backslash durch Forward-Slash ersetzen fuer Python) set "CONFIG_FILE_FWD=%CONFIG_FILE:\=/%" if "%START_METHOD%"=="Autostart" ( set "STARTUP_DIR=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup" echo @echo off> "!STARTUP_DIR!\trixy.bat" echo cd /d "%PROJECT_DIR%">> "!STARTUP_DIR!\trixy.bat" echo call run_windows.bat %MODE% --config %CONFIG_FILE%>> "!STARTUP_DIR!\trixy.bat" echo Autostart-Eintrag erstellt: !STARTUP_DIR!\trixy.bat ) if "%START_METHOD%"=="Dienst" ( echo. echo Windows-Dienste benoetigen NSSM (Non-Sucking Service Manager). echo Download: https://nssm.cc/download echo. where nssm >nul 2>&1 if errorlevel 1 ( echo NSSM nicht gefunden. Erstelle Autostart-Eintrag als Alternative... set "STARTUP_DIR=%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup" echo @echo off> "!STARTUP_DIR!\trixy.bat" echo cd /d "%PROJECT_DIR%">> "!STARTUP_DIR!\trixy.bat" echo call run_windows.bat %MODE% --config %CONFIG_FILE%>> "!STARTUP_DIR!\trixy.bat" echo Autostart-Eintrag erstellt: !STARTUP_DIR!\trixy.bat echo Fuer echten Dienst: nssm install Trixy "%PROJECT_DIR%\run_windows.bat" %MODE% --config %CONFIG_FILE% ) else ( echo Erstelle Windows-Dienst mit NSSM... nssm install Trixy "%PROJECT_DIR%\run_windows.bat" %MODE% --config %CONFIG_FILE% nssm set Trixy AppDirectory "%PROJECT_DIR%" nssm set Trixy Description "Trixy Voice Assistant" nssm set Trixy Start SERVICE_AUTO_START echo Dienst 'Trixy' erstellt und auf Autostart gesetzt. ) ) echo. REM ------------------------------------------------------- REM Schritt 7: Zusammenfassung REM ------------------------------------------------------- echo [7/7] Zusammenfassung echo. echo ======================================== echo Trixy Installation - Zusammenfassung echo ======================================== echo Modus: %MODE% echo Device-Name: %DEVICE_NAME% if "%MODE%"=="client" ( echo Alias: %ALIAS% echo Raum: %ROOM% echo Server: %HOST%:%PORT% ) if "%MODE%"=="standalone" ( echo Alias: %ALIAS% echo Raum: %ROOM% ) if "%MODE%"=="server" ( echo Netzwerk: %NETWORK_MODE% ) echo Start-Methode: %START_METHOD% echo Config-Datei: %CONFIG_FILE% echo ======================================== echo Installation abgeschlossen! echo Starte mit: run_windows.bat %MODE% echo ======================================== echo. :end popd endlocal pause