Imported from Ntizar/MasterMind (
agent/skills/esios/esios-telegram-report/SKILL.md). Install upstream withnpx skills add Ntizar/MasterMind --skill esios-telegram-report. Copyright stays with the author.
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 PNGhttps— llamadas API (sin dependencias externas)
Variables de entorno
TELEGRAM_BOT_TOKEN— token del botTELEGRAM_CHAT_ID— chat de destinoESIOS_API_TOKEN— token ESIOS/REE
Uso
node scripts/esios-telegram.js [YYYY-MM-DD]
# Sin fecha = ayer automáticamente
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/Mastermind/scripts/esios-telegram.js
IMPORTANTE: El cron debe apuntar a la Mastermind version (
/root/workspace/Mastermind/scripts/esios-telegram.js), NO a la del dashboard. La versión del dashboard no carga.envni/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→ 404GET /indicators/{id}/values?date_start=...&date_end=...→ 404GET /indicators/{id}/values(sin fecha) → 404GET /indicators/{id}(info del indicador) → OKGET /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. - Mastermind version (
/root/workspace/Mastermind/scripts/esios-telegram.js) — completa, con.envloading,/proc/1/environfallback,TELEGRAM_CHAT_IDdesdeTELEGRAM_HOME_CHANNEL, gráficos PNG.
Siempre ejecutar la Mastermind version:
cd /root/workspace/Mastermind && 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
canvasnpm — requiere instalación previanpm 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_TOKENde/proc/1/environyTELEGRAM_CHAT_IDde/hermes-home/.envcomo fallback - Ruta del script:
/root/workspace/Mastermind/scripts/esios-telegram.js— SIEMPRE esta (Mastermind version). La del dashboard NO funciona en cron. - ⚠️ Cron config drift: El prompt del cron job puede tener la ruta incorrecta (
Masterminden vez deMastermind). Verificar siempre concronjob action='list'que el prompt apunta a/root/workspace/Mastermind/scripts/esios-telegram.js. Si no, actualizar concronjob 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 tieneGITHUB_TOKEN) - No en
/hermes-home/.env(solo tieneGITHUB_TOKEN+TELEGRAM_HOME_CHANNEL) - No en
/hermes-home/config.yaml(sección telegram sin tokens) - No en ningún
.envdel workspace - No en
/root/workspace/esios-dashboard/.env(solo tieneESIOS_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_IDya existe:7288273982(deTELEGRAM_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 principaldata/esios-reference.json— mapeo IDs útilesdata/esios-indicator-index.md— índice robusto con unidadesdata/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/valuesen ESIOS API