| name | esios-telegram-report |
| description | Generar informe diario del mercado eléctrico español con gráficos Canvas/PNG y análisis automático vía Telegram — script esios-telegram.js. |
| version | 1.1.0 |
| author | Ntizar |
| tags | ["esios","telegram","cron","informe"] |
Informe Diario ESIOS — Telegram con Gráficos
Qué envía
- Texto resumen con análisis automático del día (precios, demanda, renovables, CO2, interconexiones)
- 5 gráficos PNG generados con Canvas:
- 💰 Precio PVPC horario
- ⚡ Demanda real horaria
- ☀️ Solar FV vs Demanda (comparativo)
- 🔌 Interconexiones netas (Francia + Portugal, con negativos)
- 🌍 CO₂ asociado a generación
Estructura del script
scripts/esios-telegram.js — Node.js puro + canvas npm
Dependencias
canvas — generación de imágenes PNG
https — llamadas API (sin dependencias externas)
Variables de entorno
TELEGRAM_BOT_TOKEN — token del bot
TELEGRAM_CHAT_ID — chat de destino
ESIOS_API_TOKEN — token ESIOS/REE
Uso
node scripts/esios-telegram.js [YYYY-MM-DD]
Gráficos
Todos usan drawLineChart() con:
- Fondo oscuro
#0f172a
- Líneas con relleno semitransparente
- Puntos en cada hora
- Ejes con valores formateados
- Leyenda inferior
- Estilo ESIOS dashboard (azul #2563eb, naranja #f97316)
Opciones de drawLineChart
drawLineChart(title, datasets, unit, { stacked: false, showZero: true })
stacked: true — apilado (no se usa actualmente)
showZero: true — línea de cero punteada para datos negativos
Análisis automático
La función analyzeDay() calcula:
- Si precios fueron altos (>150), moderados (>100) o bajos
- Pico/valle de precios con hora
- Diferencia pico-valle
- Demanda media/máx/mín con horas
- % renovable sobre total
- Factor de emisión CO₂
- Balance neto exportación/importación
- Horas exportando de cada país
Cron job
job_id: 9e7570152a99
name: esios-daily-telegram
schedule: 0 9 * * * (09:00 UTC = 11:00 Madrid verano / 10:00 invierno)
prompt: Ejecuta el script de resumen diario ESIOS: node /root/workspace/Koldo/scripts/esios-telegram.js
IMPORTANTE: El cron debe apuntar a la Koldo version (/root/workspace/Koldo/scripts/esios-telegram.js), NO a la del dashboard. La versión del dashboard no carga .env ni /proc/1/environ, por lo que falla con "Faltan TELEGRAM_BOT_TOKEN o TELEGRAM_CHAT_ID".
⚠️ ESIOS API /values endpoint — 404 masivo (2026-06-16)
Estado: La API de ESIOS devuelve {"status": 404, "message": "Not Found"} para todos los endpoints /indicators/{id}/values, independientemente del indicador, fecha o método de llamada (date=, date_start/end=).
Síntomas:
GET /indicators/{id}/values?date=YYYY-MM-DD → 404
GET /indicators/{id}/values?date_start=...&date_end=... → 404
GET /indicators/{id}/values (sin fecha) → 404
GET /indicators/{id} (info del indicador) → OK
GET /indicators?filter=... → OK
- Token funciona (403 sin token, 404 con token)
Causas probables:
- API de ESIOS migró a nueva versión (endpoint v2 requiere token diferente)
- Token caducado/restringido para endpoint de valores
- Datos de 2026 no disponibles aún
Fallback: Usar cache local en /root/workspace/esios-dashboard/data/esios-cache/ (archivos {id}_{fecha}.json). Verificar si hay datos válidos antes de intentar API.
No capturar como restricción persistente: Esto es un fallo temporal de la API, no una regla duradera.
⚠️ Script version mismatch — Solución definitiva (2026-06-17)
Hay DOS versiones del script:
- Dashboard version (
/root/workspace/esios-dashboard/scripts/esios-telegram.js) — simplificada, NO carga .env, NO lee /proc/1/environ. NO USAR en cron.
- Koldo version (
/root/workspace/Koldo/scripts/esios-telegram.js) — completa, con .env loading, /proc/1/environ fallback, TELEGRAM_CHAT_ID desde TELEGRAM_HOME_CHANNEL, gráficos PNG.
Siempre ejecutar la Koldo version:
cd /root/workspace/Koldo && node scripts/esios-telegram.js
NUNCA ejecutar la del dashboard en cron — siempre fallará con "Faltan TELEGRAM_BOT_TOKEN o TELEGRAM_CHAT_ID".
Pitfalls
- NUNCA usar IDs de generación medida por tecnología (10035-10043) — devuelven null
- Interconexiones son MWh/periodo — dividir entre 1000 para MW
- Solar medida (10205) es MW directo — NO dividir
- Valores negativos en interconexiones = importación, mostrar línea de cero
- El script usa
canvas npm — requiere instalación previa npm install canvas
- Cache en /tmp/esios-telegram-cache/ — se limpia tras envío
- Cron jobs no heredan variables del gateway — el script lee
TELEGRAM_BOT_TOKEN de /proc/1/environ y TELEGRAM_CHAT_ID de /hermes-home/.env como fallback
- Ruta del script:
/root/workspace/Koldo/scripts/esios-telegram.js — SIEMPRE esta (Koldo version). La del dashboard NO funciona en cron.
- ⚠️ Cron config drift: El prompt del cron job puede tener la ruta incorrecta (
Mastermind en vez de Koldo). Verificar siempre con cronjob action='list' que el prompt apunta a /root/workspace/Koldo/scripts/esios-telegram.js. Si no, actualizar con cronjob action='update'.
⚠️ TELEGRAM_BOT_TOKEN ausente (2026-06-26)
Problema: El TELEGRAM_BOT_TOKEN no está configurado en ningún sitio del sistema:
- No en
/proc/1/environ (solo tiene GITHUB_TOKEN)
- No en
/hermes-home/.env (solo tiene GITHUB_TOKEN + TELEGRAM_HOME_CHANNEL)
- No en
/hermes-home/config.yaml (sección telegram sin tokens)
- No en ningún
.env del workspace
- No en
/root/workspace/esios-dashboard/.env (solo tiene ESIOS_API_TOKEN)
Consecuencia: El cron job esios-daily-telegram falla con "Faltan TELEGRAM_BOT_TOKEN o TELEGRAM_CHAT_ID".
Solución requerida: David necesita configurar un bot de Telegram:
- Crear bot con @BotFather en Telegram → obtener TOKEN
- Añadir
TELEGRAM_BOT_TOKEN=<token> a /hermes-home/.env
- El
TELEGRAM_CHAT_ID ya existe: 7288273982 (de TELEGRAM_HOME_CHANNEL)
- Opcional: migrar a NaN Cloud Env para persistencia
Formateo de unidades de potencia
- NUNCA usar "k MW" (ej: "30k MW" es incorrecto).
- Valores >= 1000 MW → mostrar en GW (ej: "30.0 GW").
- Valores < 1000 MW → mostrar en MW (ej: "500 MW").
- Función
fmtMW() en el script implementa esta lógica: convierte automáticamente a GW cuando corresponde.
- En textos y captions, la función devuelve la unidad incluida ("30.0 GW" o "500 MW"), por lo que NO añadir "MW" manualmente después.
Archivos del proyecto
scripts/esios-telegram.js — script principal
data/esios-reference.json — mapeo IDs útiles
data/esios-indicator-index.md — índice robusto con unidades
data/all-esios-indicators.json — todos los indicadores ESIOS
Referencias
references/esios-api-values-404-2026-06-16.md — Transcripción completa del fallo masivo de /values en ESIOS API