188 lines
7.9 KiB
PowerShell
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"
|