Files
INFRAESTRUCTURA/scripts/protocolo_apagado_test.py

116 lines
3.9 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Protocolo de apagado completo del PC (VERSION DE PRUEBA - SIN SHUTDOWN)
Pasos:
1. Cerrar ventanas abiertas
2. Apagar luces Alexa: "barras" y "cuartillo" (via Home Assistant)
3. Apagar pantalla (Tapo via tunel RPi)
4. [COMENTADO] Shutdown del PC
Uso:
python protocolo_apagado_test.py
"""
import os
import sys
import time
import subprocess
import urllib.request
from dotenv import load_dotenv
# Fix encoding para Windows
if sys.platform == 'win32':
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer, 'strict')
sys.stderr = codecs.getwriter('utf-8')(sys.stderr.buffer, 'strict')
# Cargar variables de entorno locales (.env de biblioteca_negocio_prolongo)
dotenv_path = os.path.expanduser("~/Documents/GitHub/biblioteca_negocio_prolongo/.env")
load_dotenv(dotenv_path)
# Permitir importar modulos del repo de negocio (ha_alexa).
_SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
if _SCRIPT_DIR not in sys.path:
sys.path.insert(0, _SCRIPT_DIR)
try:
import infra_paths
infra_paths.bootstrap_biblioteca_paths()
except Exception:
pass
def cerrar_ventanas():
"""Cierra todas las ventanas excepto terminal/OpenCode"""
print("1. Cerrando ventanas abiertas (excepto terminal de OpenCode)...")
ps_command = """
$procesos = Get-Process | Where-Object { $_.MainWindowHandle -ne 0 -and $_.ProcessName -notmatch 'OpenCode|WindowsTerminal|cmd|powershell|Code|conhost' }
foreach ($p in $procesos) {
try {
$p.CloseMainWindow() | Out-Null
Start-Sleep -Milliseconds 200
if (-not $p.HasExited) { $p.Kill() }
} catch {}
}
"""
subprocess.run(["powershell", "-Command", ps_command], capture_output=True)
print(" ✓ Ventanas cerradas.")
def apagar_luces_alexa():
"""Apaga las luces 'barras' y 'cuartillo' via HOME ASSISTANT (sustituye a VoiceMonkey)."""
print("2. Apagando luces de Alexa via Home Assistant (barras + cuartillo)...")
try:
from ha_alexa import command
except Exception as e:
print(f" ✗ [ERROR] No se pudo cargar ha_alexa: {e}")
return
for nombre in ("barras", "cuartillo"):
ok = command(f"apaga {nombre}")
print(f" {'✓' if ok else '✗'} apagar '{nombre}'")
def apagar_pantalla_tapo():
"""Apaga el enchufe Tapo de la pantalla via tunel RPi"""
print("3. Apagando pantalla (Tapo) via túnel RPi...")
# Script Python que se ejecutará en la RPi
tapo_script = """from PyP100 import PyP100
p100 = PyP100.P100('192.168.50.224', 'hermes211@gmail.com', 'Nelo@36666')
p100.handshake()
p100.login()
p100.turnOff()"""
# Comando SSH en dos saltos: local -> VPS -> RPi
cmd = [
"ssh", "-i", os.path.expanduser("~/Documents/GitHub/contabo"),
"root@185.187.169.109",
f"ssh -i /root/.ssh/pi_deploy -p 2222 -o StrictHostKeyChecking=no pi@127.0.0.1 'python3 -c \"{tapo_script}\"'"
]
try:
result = subprocess.run(cmd, capture_output=True, timeout=15, text=True)
if result.returncode == 0:
print(" ✓ Pantalla apagada.")
else:
print(f" ✗ Error al apagar pantalla (código {result.returncode})")
if result.stderr:
print(f" stderr: {result.stderr.strip()}")
except subprocess.TimeoutExpired:
print(" ✗ Timeout al apagar pantalla (>15s)")
except Exception as e:
print(f" ✗ Excepción al apagar pantalla: {e}")
def shutdown_pc():
"""Apaga el PC en 10 segundos"""
print("4. [COMENTADO] Apagando el PC en 10 segundos...")
print(" ℹ️ Shutdown deshabilitado en modo prueba.")
# os.system("shutdown /s /t 10")
if __name__ == "__main__":
print("=" * 60)
print(" PROTOCOLO DE APAGADO (TEST - SIN SHUTDOWN)")
print("=" * 60)
cerrar_ventanas()
apagar_luces_alexa()
apagar_pantalla_tapo()
shutdown_pc()
print("=" * 60)
print(" PROTOCOLO COMPLETADO")
print("=" * 60)