Miközben ezt írom, a magyar áram 77%-a naperőműből jön. Napos augusztusi délelőtt van — estére ugyanez a szám nagyjából nulla lesz, és a gáz meg az import veszi át a terepet. Ez az adat nyilvános: a MAVIR (a magyar villamosenergia-rendszer irányítója) 5 percenként publikálja, miből termelünk éppen. Csak épp grafikonként, egy iframe-be csomagolva, számok nélkül. Én meg pont a számokra voltam kíváncsi.

A grafikon mögé nézve

A MAVIR „Energia MIX" oldala egy Liferay portál, ami a tényleges grafikont egy rtdwweb.mavir.hu-s iframe-ből tölti. Az iframe egy SVG-t kér le — egy 700 kilobájtos SVG-t, amiben benne van az egész napi görbe minden pixele. Ezt parsolni lehetne, de nem kellene.

Szerencsére a lap JavaScript route-táblájában (jsRoutes — a Play framework generálja) ott figyel egy getExportFile nevű végpont is. Ez az, amit a grafikon „Letöltés" gombja hív: tetszőleges időablakra, 5 perces bontásban adja vissza ugyanazt az adatot, amiből az SVG készül. A CSV formátum 500-as hibával elszáll (ki tudja, mióta), de az XLSX működik. Egy sima GET, paraméterben az időablak, és jön a táblázat: 17 adatoszlop, forrásonként megawattban. Nukleáris, lignit, gáz, szél, ipari naperőmű, biomassza, vízerőművek, import-export szaldó — minden.

5 perc
a MAVIR publikálási ciklusa
17
adatoszlop az exportban
0
framework a megvalósításban

A csapda: a hiányzó cellák

Az első parser fél óra alatt kész volt, és magabiztosan hozta a rossz számokat. Az XLSX-ben ugyanis a cellák nem pozíció szerint sorakoznak, hanem mindegyik magával hordja a saját címét (A2, D2…) — és ami üres, az egyszerűen nincs benne a fájlban. A „hitelesített rendszerterhelés" oszlop a friss sorokban még üres, így aki sorrendben olvassa a cellákat, annál minden ezt követő érték egy hellyel arrébb csúszik. Nálam a naperőmű termelése például a biomassza rovatban landolt — 2800 MW biomassza, azért az feltűnő.

Hogyan derül ki, hogy jó a leképezés?

Van egy beépített ellenőrzés az adatban: a forrásonkénti termelés összegének ki kell adnia a „Hazai termelés" oszlopot. Cellacím szerinti parsolással megawattra pontosan stimmel — pozíció szerintivel köszönőviszonyban sincs vele. Ez a fajta belső konzisztencia-teszt olcsóbb, mint bármilyen manuális összevetés, és minden lekérésnél ingyen újrafut.

Mit számolunk és miből?

A dashboard a bruttó üzemirányítási mérésekből dolgozik — ez a „mit mér a rendszerirányító éppen most" nézet, nem a később hitelesített elszámolási adat. Három dolgot mutat:

Egy finomság: a százalékok a hazai termelésre vetülnek, nem a fogyasztásra. A kettő nem ugyanaz — a fogyasztás jellemzően nagyobb, a különbséget az import fedi. Ha az érdekel, hogy „a konnektorból jövő áram hány százaléka zöld", ahhoz az importot is fel kellene bontani forrásonként, amit a szomszédos rendszerirányítók adataiból lehetne összerakni. Az már egy másik cikk.

A stack: egy PHP fájl meg egy HTML

Ez a site PHP-n fut, úgyhogy a megvalósítás is az maradt:

  1. energiamix_api.php — lekéri az utolsó 3 óra XLSX-exportját, a beépített ZipArchive + SimpleXML párossal kibontja, megkeresi a legfrissebb teljes adatsort, és JSON-ként adja vissza a százalékokat. A választ 5 percre fájlba cache-eli — a MAVIR-t tehát akárhány olvasó mellett is óránként legfeljebb 12-szer hívjuk. Ha a MAVIR épp nem elérhető, a legutolsó jó cache megy ki.
  2. energiamix.html — statikus oldal, ami az API-t hívja és 5 percenként újrahúzza magát. Sávok, számok, visszaszámláló. Semmi build, semmi keretrendszer.

A színekre több gondot fordítottam, mint elsőre indokoltnak tűnne: a négy kategóriaszín (nukleáris, megújuló, fosszilis, egyéb) úgy lett megválasztva, hogy színtévesztve is megkülönböztethetőek maradjanak — ezt nem szemre lőttem be, hanem egy színkontraszt-validátorral ellenőriztem, világos és sötét módra külön-külön. Ha az ember ingyen kap egy jól megkülönböztethető palettát, kár nem használni.

Mit látni belőle?

Amire számítasz, meg amire nem. Hogy nyári délben a nap dominál, az nem hír. Az már érdekesebb, hogy mennyire: dél körül rendszeresen a hazai termelés háromnegyede fölé megy a naperőművi arány, miközben az ország összes szélerőműve épphogy egy nagyobb gázblokknyit ad. És az is látszik, ami épp nincs: amikor ezt írom, a nukleáris sáv szokatlanul rövid — a szaldó meg pont annyival nagyobb. A rendszer nem hazudik, csak számolni kell.

Este kilenckor érdemes ránézni még egyszer: ugyanaz a dashboard egy teljesen más országot mutat. Gáz, import, egy kis lignit — a naperőmű sora nullán. Ez a kettősség a magyar villamosenergia-rendszer jelenlegi legnagyobb sztorija, és 5 percenként frissülő számokban sokkal jobban átjön, mint bármilyen éves statisztikában.

Ha érdekel

Az élő dashboard itt fut: energiamix.html. Az adat a MAVIR-é, a hibák az enyémek; a számok tájékoztató jellegűek — aki kereskedni akar velük, az a hitelesített elszámolási adatokat nézze, ne az üzemirányítási pillanatképet.

A közcélú adat akkor ér valamit, ha nem csak publikus, hanem olvasható is. A kettő között néha csak egy hétvégi délelőtt a különbség.