Uso
El único punto de entrada soportado es el comando strom:
strom --config-dir ./config --horizon-hours 24 --log-level INFO
Ninguna de las tres es obligatoria. Los valores por defecto son:
| Opción | Por defecto | Significado |
|---|---|---|
--config-dir |
autodetectada | Carpeta con tus archivos de configuración (ver Configuración) |
--horizon-hours |
24 | Cuántas horas completas hacia adelante optimizar (mínimo 1) |
--log-level |
INFO | Verbosidad: DEBUG, INFO, WARNING o ERROR |
También puedes ejecutar python -m strom. El antiguo python main.py sigue funcionando como shim retrocompatible para crons existentes — ejecuta exactamente el mismo código.
Qué hace una ejecución
- Valida la configuración (credenciales, claves de API, parámetros de la casa). Cualquier problema detiene la ejecución de inmediato con un error claro.
- Descubre el enchufe inteligente en
DEVICEIP. Si el enchufe no responde, no pasa nada más: no se obtienen datos ni se actúa. - Obtiene tiempo y precios para las próximas
--horizon-hourshoras completas, alineadas a marcas horarias UTC. Los huecos nunca se inventan: si la previsión meteorológica o los precios publicados no cubren el horizonte, la ejecución se detiene con unCoverageError. - Optimiza el calendario de calefacción de todo el horizonte con optimización convexa.
- Actúa sobre la hora actual como ciclo de trabajo: la salida fraccional del optimizador para este intervalo (digamos 0,4) se convierte en ENCENDIDO durante 0,4 × intervalo y APAGADO el resto. Los encendidos minúsculos se redondean al alza hasta un pulso mínimo de 60 segundos para no desgastar el relé.
- Vigila el enchufe: un vigilante independiente fuerza el APAGADO si el enchufe lleva ENCENDIDO más de 3 horas seguidas, diga lo que digan el optimizador o el controlador.
- Registra el plan (segundos ENCENDIDO / APAGADO) y el estado final del enchufe.
Códigos de salida
0— la ejecución terminó correctamente.1— un fallo operativo esperado: configuración incorrecta, caída de un proveedor de datos, cobertura de datos insuficiente, fallo del solver o problemas con el dispositivo. El motivo queda registrado; no se imprime traceback.- Cualquier otro — un bug inesperado. Se imprime el traceback para poder reportarlo.
Programar las ejecuciones
Strom actúa sobre la hora actual, así que funciona mejor si se ejecuta con regularidad. La frecuencia recomendada es una vez por hora, p. ej. desde cron:
0 * * * * cd /ruta/a/Strom && ./venv/bin/strom
Resolución de problemas
Errores de configuración
Los mensajes de error indican la solución: la clave que falta y su archivo, las claves desconocidas de house_config.json con la lista de claves admitidas, o el punto exacto donde falló el JSON. Ver Configuración.
Problemas de conexión con las API
Los problemas transitorios (timeouts, errores de conexión, límites de peticiones, errores de servidor) se reintentan hasta 3 veces con backoff exponencial. Los fallos permanentes (clave incorrecta, respuesta malformada) fallan de inmediato. Si se agotan los reintentos:
- Verifica que tus claves de API son correctas
- Comprueba tu conexión a internet
- Asegúrate de no haber superado los límites de peticiones de la API
Falta de datos de precios (CoverageError)
ENTSO-E publica los precios day-ahead una vez al día. Si los precios de parte de tu horizonte aún no están publicados, Strom se niega a optimizar con números inventados y sale. Vuelve a ejecutarlo más tarde, cuando se haya publicado el mercado del día siguiente.
Problemas de conexión con el enchufe inteligente
- Verifica que el enchufe tiene corriente y está en la misma red (
ping 192.168.1.42debería responder) - Verifica
DEVICEIP,EMAILyPASSWORDentapologin.env - Usa
--log-level DEBUGpara más detalles
El vigilante se activó
Una línea de registro Max-on watchdog fired ... forcing plug OFF significa que el enchufe estuvo ENCENDIDO más de 3 horas seguidas. Revisa tu calendario de calefacción y los parámetros de la casa — una calefacción que necesita funcionar tanto tiempo de una pieza suele indicar que el emisor se queda corto para la banda de confort.