Files

188 lines
7.9 KiB
PowerShell

#Requires -Version 5.1
$ErrorActionPreference = "Stop"
$APP = Split-Path -Parent $MyInvocation.MyCommand.Path
function Write-Step($n, $msg) {
Write-Host ""
Write-Host "[$n] $msg" -ForegroundColor Cyan
}
function Write-OK($msg) { Write-Host " OK — $msg" -ForegroundColor Green }
function Write-Warn($msg) { Write-Host " [!] $msg" -ForegroundColor Yellow }
function Write-Fail($msg) { Write-Host " ERROR: $msg" -ForegroundColor Red; Read-Host "Presiona Enter para salir"; exit 1 }
Clear-Host
Write-Host ""
Write-Host " ============================================================" -ForegroundColor Cyan
Write-Host " AidsMonitoring | Maritime Traffic System" -ForegroundColor White
Write-Host " Instalador para Windows 10 / 11" -ForegroundColor Gray
Write-Host " ============================================================" -ForegroundColor Cyan
# ── 1. Python ────────────────────────────────────────────────────────────────
Write-Step 1 "Verificando Python 3.10+..."
$python = $null
foreach ($cmd in @("python","python3","py")) {
try {
$ver = & $cmd --version 2>&1
if ($ver -match "Python (\d+)\.(\d+)") {
$maj = [int]$Matches[1]; $min = [int]$Matches[2]
if ($maj -ge 3 -and $min -ge 10) { $python = $cmd; break }
}
} catch {}
}
if (-not $python) {
Write-Warn "Python 3.10+ no encontrado."
$resp = Read-Host " Instalar Python 3.12 via winget? [S/N]"
if ($resp -match "^[Ss]") {
Write-Host " Instalando..." -ForegroundColor Yellow
winget install Python.Python.3.12 --silent --accept-package-agreements --accept-source-agreements
# Refrescar PATH
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" +
[System.Environment]::GetEnvironmentVariable("Path","User")
$python = "python"
} else {
Write-Fail "Instala Python 3.12 desde https://python.org y vuelve a ejecutar."
}
}
$verStr = & $python --version 2>&1
Write-OK "Usando $python ($verStr)"
# ── 2. Entorno virtual ───────────────────────────────────────────────────────
Write-Step 2 "Creando entorno virtual..."
$venv = Join-Path $APP "venv"
if (Test-Path "$venv\Scripts\python.exe") {
Write-OK "Entorno virtual ya existe — omitiendo."
} else {
& $python -m venv $venv
if ($LASTEXITCODE -ne 0) { Write-Fail "No se pudo crear el entorno virtual." }
Write-OK "Entorno virtual creado en venv\"
}
$vpython = "$venv\Scripts\python.exe"
$vpip = "$venv\Scripts\pip.exe"
# ── 3. Dependencias ──────────────────────────────────────────────────────────
Write-Step 3 "Instalando dependencias Python (puede tardar 2-3 min)..."
$reqs = Join-Path $APP "backend\requirements.txt"
& $vpip install --upgrade pip -q
& $vpip install -r $reqs -q
if ($LASTEXITCODE -ne 0) { Write-Fail "Error instalando paquetes. Revisa la conexion a internet." }
Write-OK "Todos los paquetes instalados."
# ── 4. Archivo .env ──────────────────────────────────────────────────────────
Write-Step 4 "Configuracion inicial..."
$env_file = Join-Path $APP "backend\.env"
if (-not (Test-Path $env_file)) {
@"
AIS_SOURCE=SIMULATOR
GPS_PORT=
GPS_BAUD=9600
PROXIMITY_ALERT_METERS=500
PROJECTION_MINUTES=10
SECRET_KEY=AidsMonitoring2026ChangeMe
"@ | Set-Content $env_file -Encoding UTF8
Write-OK ".env creado con valores por defecto."
} else {
Write-OK ".env ya existe."
}
# ── 5. Actualizar start.bat ──────────────────────────────────────────────────
Write-Step 5 "Actualizando start.bat..."
$startBat = Join-Path $APP "start.bat"
@"
@echo off
title AidsMonitoring Server
cd /d "%~dp0backend"
for /f "tokens=5" %%a in ('netstat -ano 2^>nul ^| findstr ":5503 " ^| findstr "LISTENING"') do (
taskkill /F /PID %%a >nul 2>&1
)
timeout /t 1 /nobreak >nul
echo.
echo ================================================
echo AidsMonitoring ^| http://localhost:5503
echo ================================================
echo.
start "" /b cmd /c "timeout /t 3 /nobreak >nul && start http://localhost:5503"
"%~dp0venv\Scripts\python.exe" -m uvicorn main:app --host 0.0.0.0 --port 5503
pause
"@ | Set-Content $startBat -Encoding ASCII
Write-OK "start.bat actualizado."
# ── 6. Acceso directo en escritorio ─────────────────────────────────────────
Write-Step 6 "Creando acceso directo en el escritorio..."
$desktop = [Environment]::GetFolderPath("Desktop")
$shortcut = "$desktop\AidsMonitoring.lnk"
$shell = New-Object -ComObject WScript.Shell
$lnk = $shell.CreateShortcut($shortcut)
$lnk.TargetPath = $startBat
$lnk.WorkingDirectory = $APP
$lnk.WindowStyle = 1
$lnk.Description = "AidsMonitoring Maritime Traffic System"
$lnk.Save()
Write-OK "Acceso directo creado en el escritorio."
# ── 7. Zadig para RTL-SDR ────────────────────────────────────────────────────
Write-Host ""
Write-Host " ============================================================" -ForegroundColor Yellow
Write-Host " Driver RTL-SDR (NESDR SMArt v5) — paso OBLIGATORIO" -ForegroundColor Yellow
Write-Host " ============================================================" -ForegroundColor Yellow
Write-Host ""
Write-Host " Para que AIS-catcher funcione necesitas instalar WinUSB."
Write-Host " Esto solo se hace UNA VEZ por computadora."
Write-Host ""
Write-Host " Pasos:"
Write-Host " 1. Conecta el NESDR SMArt v5 al USB"
Write-Host " 2. Se abrira Zadig automaticamente"
Write-Host " 3. Menu: Options -> List All Devices"
Write-Host " 4. Selecciona 'RTL2838UHIDIR' o 'Bulk-In, Interface 0'"
Write-Host " 5. Driver destino: WinUSB"
Write-Host " 6. Click 'Install Driver'"
Write-Host ""
$zadig = Join-Path $APP "tools\zadig.exe"
if (-not (Test-Path $zadig)) {
$resp = Read-Host " Descargar Zadig ahora? [S/N]"
if ($resp -match "^[Ss]") {
Write-Host " Descargando Zadig..." -ForegroundColor Yellow
try {
Invoke-WebRequest -Uri "https://zadig.akeo.ie/downloads/zadig-2.9.exe" `
-OutFile $zadig -UseBasicParsing
Write-OK "Zadig descargado."
} catch {
Write-Warn "No se pudo descargar Zadig. Descargalo manualmente desde zadig.akeo.ie"
}
}
}
if (Test-Path $zadig) {
$resp = Read-Host " Abrir Zadig ahora? [S/N]"
if ($resp -match "^[Ss]") { Start-Process $zadig }
}
# ── Fin ──────────────────────────────────────────────────────────────────────
Write-Host ""
Write-Host " ============================================================" -ForegroundColor Green
Write-Host " Instalacion completada!" -ForegroundColor Green
Write-Host " ============================================================" -ForegroundColor Green
Write-Host ""
Write-Host " Para iniciar AidsMonitoring:" -ForegroundColor White
Write-Host " - Doble click en el acceso directo del escritorio, o"
Write-Host " - Ejecuta start.bat"
Write-Host ""
Write-Host " El navegador se abrira automaticamente en http://localhost:5503"
Write-Host ""
Write-Host " Usuario por defecto: admin / admin" -ForegroundColor Cyan
Write-Host ""
Read-Host "Presiona Enter para salir"