arrow_back Prototipos
Energía · Datos abiertos
En vivo

Con qué se enciende la luz en Chile — y por qué nadie puede decir dónde se genera

La CNE publica cuánta electricidad genera cada central y publica dónde está cada central. En dos archivos que no comparten identificador. Cruzarlos por nombre acierta en 2 de 1.522 casos.

FastAPI · SQLite · APScheduler · Chart.js · CNE / datos.gob.cl · :8028

Estado
En vivo · se actualiza solo
Fuente de datos
Comisión Nacional de Energía · datos.gob.cl
Stack
FastAPI · SQLite · APScheduler · Chart.js
Cadencia
Chequeo semanal del origen (miércoles)
Cobertura
4 datasets · 91.538 filas de generación · 1.176 centrales · 39.636 techos solares · ene-2014 a feb-2026
Infraestructura
Raspberry Pi · $0 cloud

El problema

Los gráficos de la matriz energética salen casi solos: la CNE publica la generación mensual por tecnología y con eso se dibuja la transición completa. Lo que no sale de ninguna parte es la pregunta territorial — ¿cuánta energía genera mi comuna? —, y no porque el dato falte, sino porque está partido en dos archivos que no se pueden unir.

generacion-bruta identifica cada central con un campo que mezcla al menos cuatro convenios distintos en la misma columna: nombres propios (Antuco), nombres con la tecnología en glosa (Eólica San Gabriel), slugs en minúscula (epehorizonte-sur) y códigos de unidad del sistema completamente opacos (eang1, eccr2-carbon, ecta). capacidad-instalada, que es el archivo que sí trae la comuna, usa otro convenio: le prefija la tecnología al nombre — HE RALCO, PFV CAMPOS DEL SOL, TER ANGAMOS—.

No hay llave compartida. Un join por igualdad de texto cruza 2 de 1.522 centrales: 0,1%. Normalizar tildes y mayúsculas no mueve la aguja, porque el problema no es ortográfico.

Qué construí

Un monitor con doce años de matriz eléctrica mes a mes, y debajo una capa de reconciliación que sí permite preguntar por territorio — declarando siempre cuánto alcanza a explicar.

  • check_circle La mezcla mensual desde enero de 2014, apilada por tecnología: 146 meses en los que el carbón se encoge y la solar crece hasta darlo vuelta.
  • check_circle Renovable y ERNC como dos líneas separadas, porque no son lo mismo y confundirlas es el error más común al leer estos datos: ERNC es la definición legal de la Ley 20.257 y deja fuera a las hidroeléctricas de embalse grandes. En 2025 la matriz fue 65,6% renovable pero sólo 48,7% ERNC.
  • check_circle El factor de emisión del sistema: cuánto CO₂ cuesta un MWh, y cómo se redujo a la mitad en ocho años.
  • check_circle El parque instalado: 1.176 centrales por potencia, comuna y año de puesta en servicio, que dibuja las dos olas de inversión —la térmica de los 2000 y la solar de la década siguiente—.
  • check_circle Los techos solares del netbilling: 39.636 instalaciones de hogares y pymes, comuna por comuna.
  • check_circle Y la auditoría del cruce abierta en el propio dashboard: cada central con el nivel que la resolvió y la energía que arrastra. La cobertura no se pide creer, se puede revisar.

Cómo funciona

La ingesta baja cuatro CSV que suman unos 10 MB, los recorre en streaming y guarda sólo agregados: la base completa pesa 6 MB, que es lo que corresponde para una Raspberry Pi. Los recursos se resuelven siempre con package_show, nunca por UUID, porque la CNE reemplaza el archivo entero en cada actualización.

El cruce es una cascada de cinco niveles, del más seguro al más laxo: igualdad tras quitar prefijos de tecnología, tabla de alias verificada a mano, coincidencia de conjunto de palabras, contención con candidato único y similitud difusa. El primero que resuelve gana, y cada cruce queda etiquetado con el nivel que lo produjo para poder auditarlo después. Resultado: 97,4% de la energía de 2025-2026 con comuna asignada.

Decisiones técnicas

La guarda que impidió mentir con confianza

Los niveles heurísticos aciertan casi siempre, y cuando fallan lo hacen con total aplomo. Sin guarda, ecta —la Central Térmica Andina: carbón, Mejillones, unos 1.000 GWh al año— cruzó contra PMGD PFV MILAN A, una fotovoltaica de 9 MW en Teno. El nombre daba; la realidad no. La regla que lo ataja es simple: un cruce no exacto sólo vale si la familia de tecnología coincide. Una central que la generación declara como carbón no puede ser una ficha solar. Con la guarda puesta, ecta cae en su alias correcto y eatacama-solar-2 deja de cruzar contra un parque eólico en Freirina para cruzar contra la fotovoltaica de Pica, que es la real.

Publicar la cobertura al lado del número

La generación por comuna es la única cifra del monitor que no sale directo de la fuente: es una construcción. Un mapa territorial sin decir qué fracción de la energía alcanza a explicar es una afirmación disfrazada de dato. Por eso el porcentaje va pegado al gráfico, el desglose por nivel de cruce está a la vista, y el 2,5% que no se resuelve no se reparte ni se estima: queda declarado como faltante.

La cobertura histórica es peor, y siempre lo será

Para 2025-2026 el cruce explica el 97,4% de la energía; para la serie completa desde 2014, el 90,3%. No es que el matcher funcione peor con datos viejos: es que capacidad-instalada sólo lista centrales en operación hoy. Bocamina, Ventanas y las unidades viejas de Tocopilla generaron energía real durante años y hoy no tienen ficha contra la cual cruzarse. No hay algoritmo que arregle eso — el dato no existe—, así que se declara en vez de disimularse.

Seis comunas declaradas en dos regiones

La CNE ubica Vallenar en Atacama y en Coquimbo, Chillán en Ñuble y en Biobío, Linares en Maule y en O'Higgins, según la central. El caso de Chillán tiene explicación —Ñuble se separó de Biobío en 2018 y las centrales anteriores conservan la región vieja—; los otros cinco son errores de carga. En netbilling el problema es masivo: 96 de 325 comunas traen región contradictoria, aunque el patrón no deja dudas (Colina figura 2.000 veces en la Metropolitana y 2 en O'Higgins). Se resuelve dejando que la comuna mande sobre la región, y un conflicto nuevo que no esté en la tabla verificada se resuelve por mayoría y se reporta, en vez de quedar silenciosamente mal.

«SIC» y «SING» ya no existen, pero el archivo insiste

La columna de subsistema sigue diciendo SIC y SING hasta hoy, aunque ambos se interconectaron en el SEN en noviembre de 2017. Después de esa fecha son zonas geográficas, no sistemas. Se conserva el valor de origen —recodificarlo perdería la única desagregación norte / centro-sur que trae el archivo— y la interfaz lo explica. El factor de emisión lo confirma solo: las series de SIC y SING terminan en diciembre de 2017 y la del SEN empieza en enero de 2018.

Los colores están medidos, no elegidos

La primera paleta la elegí por convención cromática —amarillo para el sol, gris para el gas, negro para el carbón— y al pasarla por un validador falló seis comprobaciones: entre ellas un par solar/biomasa con una distancia perceptual de 4,4 bajo protanopia, es decir indistinguible para buena parte de los lectores. La paleta final mantiene la banda de luminosidad, supera el piso de croma y separa todos los pares —no sólo los vecinos en la pila— por encima del umbral, también bajo simulación de daltonismo. El amarillo solar quedó ocre y no dorado por una razón medible: un amarillo saturado no alcanza el contraste mínimo sobre fondo blanco.

El servidor corta las descargas, y el reintento obvio no bastaba

Contra la conexión doméstica de la Pi, datos.gob.cl cortó el CSV de generación a los 4,1 de 6,7 MB. El reintento del cliente HTTP no cubre eso —sólo fallos al establecer la conexión, no que el stream se corte a la mitad—, así que la ingesta reintenta el archivo completo. La verificación de tamaño tiene su propia trampa: el portal responde comprimido, así que la cabecera declara 80.902 bytes mientras el archivo descomprimido trae 385.245. Comparar esos dos números da siempre falso negativo; hay que contar los bytes crudos del socket.

Qué encontré

  • swap_vert La transición se dio vuelta en once años. En 2014 el carbón generaba el 41,7% de la electricidad del país y la solar el 0,6%. En lo que va de 2026 el carbón va en 13,5% y la solar en 31,1%. No es una proyección ni un escenario: es la generación medida, mes a mes.
  • co2 Cada MWh emite la mitad que hace ocho años. El factor de emisión del SEN pasó de 0,418 toneladas de CO₂ por MWh al interconectarse, en enero de 2018, a 0,213 en diciembre de 2025.
  • bolt El diésel es el seguro del sistema, y casi nunca se cobra. Son 151 centrales y 3.791 MW —el 10,2% de toda la potencia instalada del país— que generan el 0,66% de la energía. Existen para no encenderse. Esa brecha entre potencia y generación sólo se ve poniendo los dos gráficos uno al lado del otro.
  • location_on Mejillones genera 9.619 GWh al año, más del doble que la siguiente comuna. Ocho de las diez comunas que más electricidad producen están en el norte — y esa lista es, precisamente, lo que no se podía calcular antes del cruce.
  • solar_power Los techos suman 467 MW en 39.636 instalaciones: un 1,25% del parque nacional. Chico en potencia, pero es el único componente de la matriz que crece sin que nadie construya una central.

Qué es real y qué es parcial

Es un prototipo, no una estadística oficial, y conviene ser preciso.

  • verified Real: la generación, la capacidad, el netbilling y el factor de emisión son los que publica la CNE, sin recortes. La mezcla por tecnología, las participaciones, el parque instalado y la serie de CO₂ salen directo de la fuente y no dependen de ninguna decisión mía.
  • build Lo que agregué yo: el cruce entre generación y ubicación, con su tabla de alias y su guarda de tecnología. Nada de eso viene de la fuente. Toda cifra por comuna es una construcción mía, y por eso está auditable central por central en el propio dashboard.
  • percent Parcial: el cruce explica el 97,4% de la energía reciente y el 90,3% de la histórica. El resto son centrales cuyo código no se pudo resolver, y que no están sumadas en ninguna cifra territorial.
  • warning Lo que este dato NO permite: hablar de consumo. Es generación, no demanda: la comuna que produce no es la que gasta. Tampoco hay precios, ni costos marginales, ni vertimiento, ni transmisión — nada sobre la energía renovable que se genera y no llega a ninguna parte por falta de líneas.
  • schedule Rezago: la CNE publica con aproximadamente un mes de desfase. El último dato disponible es de febrero de 2026, y el año en curso aparece siempre marcado como parcial para que no se compare medio año contra doce meses.
  • visibility A la vista: el dashboard trae una sección desplegable con el cruce completo, y el endpoint /api/estado publica la frescura de cada una de las cuatro fuentes. Si el origen cambia, esas cifras cambian solas.

¿Y este mes, con qué se generó?

El monitor corre ahora mismo sobre la Pi y se actualiza solo.

Abrir el prototipo arrow_forward