No description
  • C++ 82.6%
  • C 17.4%
Find a file
2026-07-18 15:25:42 -03:00
include Deprecado de MQTT/HA, web+tg 2026-07-18 15:25:42 -03:00
src Deprecado de MQTT/HA, web+tg 2026-07-18 15:25:42 -03:00
.gitignore First commit 2026-07-18 13:49:51 -03:00
platformio.ini Deprecado de MQTT/HA, web+tg 2026-07-18 15:25:42 -03:00
README.md First commit 2026-07-18 13:49:51 -03:00
requirements.txt Deprecado de MQTT/HA, web+tg 2026-07-18 15:25:42 -03:00

WolBox

ESP32-C3 siempre encendido que orquesta el arranque del PC para que no quede colgado pidiendo passphrase de LUKS.

Por qué

El PC tiene la raíz en LUKS y se autodesbloquea por red vía NBDE/clevis contra un Tang que corre en container. Si el PC bootea antes de que Tang esté vivo, clevis falla y queda esperando la passphrase en el initramfs.

Al arrancar, WolBox:

  1. (Opcional, ENABLE_NAS) Manda WoL al NAS y confirma por ping, en paralelo con el paso 2.
  2. Espera a que Tang responda GET /adv con HTTP 200 (sin timeout: reintenta para siempre).
  3. Recién ahí enciende el PC con un tap de power (pulso corto al power switch vía PC817) y confirma por ping.

Si Tang no responde, el PC nunca se enciende (evita que caiga a passphrase). Una vez conectado el WiFi, el ESP no se reinicia más.

Por qué el PC ya no usa WoL

El r8169 olvida el wol g al apagar (había que reponerlo). El botón físico no tiene ese problema: el ESP "aprieta" el power switch a través de un optoacoplador PC817, como si apretaras el botón del gabinete.

Ojo — el power NO es idempotente: un tap sobre una máquina ya encendida (o a medio bootear) la apaga o suspende. Por eso el arranque hace pre-check por ping (si ya responde, no toca nada) y la ventana antes de re-tapear es larga (PC_CONFIRM_WAIT_MS, 3 min): tiene que superar el peor caso de POST + unlock LUKS + boot + red.

Hardware

ESP32-C3 SuperMini (board = lolin_c3_mini), USB-Serial/JTAG nativo (upload y monitor sin driver extra).

GPIO Función
8 LED onboard (activo en bajo) — diagnóstico
1 PC817 → reset switch del PC
3 PC817 → power switch del PC (tap = encender/apagar ACPI, hold 6 s = apagado forzado)

Los PC817 arrancan sueltos (presserInit los pone en el nivel "no apretado" en setup()). Polaridad configurable con GPIO_PRESS_ACTIVE_HIGH según el cableado del LED del opto.

LED de diagnóstico

Parpadeo simple a distinta velocidad por fase (más rápido = más urgente):

Estado LED
Tomando WiFi parpadeo rápido
Trabajando (tap/ping/Tang) parpadeo medio
Todo listo fijo

Acciones sobre el PC

En src/main.cpp:

  • pcPowerTap() — pulso corto = encender / apagado ACPI limpio. Lo usa el arranque.
  • pcForceOff() — hold de 6 s = apagado forzado. Implementado, sin disparador aún.
  • pcReset() — pulso al reset switch = reinicio en caliente. Implementado, sin disparador aún.

El motor de "apriete" (Presser) es no bloqueante: un hold de 6 s no congela LED/OTA/log.

Config

  • include/config.h — lógica y timings, se commitea. Ahí está ENABLE_NAS (0 = NAS apagado), los pines/tiempos del PC817 y las ventanas.
  • include/config.local.hdatos del sitio (WiFi, password OTA, URL de Tang, PC_IP, y MAC del NAS si ENABLE_NAS). Gitignoreado. Crearlo desde la plantilla:
    cp include/config.local.h.example include/config.local.h
    
    y completar los valores reales.

No hay web admin: para cambiar algo se reflashea (o se sube por OTA).

Flashear

Primera vez, por USB:

cd wolbox
pio run -t upload
pio device monitor    # 115200

De ahí en más, por WiFi (sin cable):

pio run -t upload --upload-port wolbox.local

Pide el password de OTA_PASSWORD (config.local.h).

Ver logs sin USB

El ESP corre un mini servidor de log en el puerto 23:

nc wolbox.local 23

Muestra todo lo que iría al serial, más un heartbeat cada 10s con el RSSI (útil para probar orientación/ubicación sin depender del cable).

Prerrequisitos en los equipos target

  • IP del PC (PC_IP, se pinguea para confirmar): por DHCP o ip neigh.
  • Reset/power switch cableados a los PC817: en el header del panel frontal del motherboard, en paralelo con los botones del gabinete.
  • El PC debe quedar apagado tras un corte de luz (BIOS: stay off, no power on after AC loss) — si booteara solo, arrancaría antes que Tang.
  • (Si ENABLE_NAS) WoL en el NAS: DSM ▸ Panel de control ▸ Hardware y energía ▸ WOL en LAN 1.

Verificación end-to-end

  1. Con el PC apagado: resetear el ESP (nc wolbox.local 23 para ver el log) y confirmar que el PC termina encendido, recién tras Tang.
  2. Parar el container de Tang y resetear el ESP: el PC no debe encenderse hasta que Tang vuelva.
  3. Confirmar que el PC, al despertar, desbloquea LUKS solo (no pide passphrase).

Extensión futura

Disparador para pcReset() / pcForceOff() (comando por el puerto 23 o endpoint HTTP). Web admin para editar config sin reflashear.