Reißerische Schlagzeilen beschworen Ende 2024 den Energiekollaps durch den gleichzeitigen Ausfall von Solar- und Windenergie, eine sogenannte Dunkelflaute. Doch was ist dran an den Horrorgeschichten? Das Linux-Magazin hat die Fakten und Zahlen untersucht.
Am 12. Dezember 2024 mutmaßte die Presse, dass in Deutschland die Lichter ausgehen. Die Zeitschrift Focus schreibt: “Deutschland in der Dunkelflaute: Wir sind der Geisterfahrer Europas” [1]. Der Strompreis geht durch die Decke. Statt Preisen von 10 Cent pro kWh oder, bezogen auf MWh, einigen Hundert Euro pro MWh, kostet er plötzlich fast das Zehnfache. Andere schreiben: “Deutschlands Stromnetz am Rande des Kollapses – Nachbarländer empört über deutsche Energiepolitik” [2].
Lässt man den Autoren durchgehen, dass sie teilweise die Einheiten für Leistung (in Gigawatt, GW) und Energie (in Gigawattstunden, GWh) durcheinanderbringen, dann ist alles richtig – und dennoch falsch. Was genau war passiert? Auf der Basis öffentlich einsehbarer Daten und mithilfe von Python untersucht der Artikel die Hintergründe. Spoiler: Der hohe Strompreis hielt sich nur zwei Stunden in der Zeit von 16 bis 18 Uhr, Reserven wurden gar nicht erst zugeschaltet. Die Verbraucher bemerkten nichts von alldem.
Verbundnetz
Deutschland wird über ein zentrales Energienetz versorgt, mehr noch, es ist Teil des südeuropäischen Verbundsystems. Das Netz selbst kann weder Energie speichern noch zusätzlich abgeben. Die Kunst besteht in der Regelung, indem bedarfsweise Kraftwerke oder Verbraucher, zum Beispiel Pumpspeicher, hinzugeschaltet werden.
Die Netzfrequenz ist ein Indikator für den Leistungsbedarf. Innerhalb einer Schwankungsbreite von 20 Millihertz (mHz) um die Normfrequenz von 50 Hertz gilt das Netz als stabil. Abweichungen von mehr als 200 mHz zeigen massive Störungen an. In Deutschland stehen als Regelreserve etwa 5 GW zur Verfügung. Sie sind einer der Kostentreiber beim Netzentgelt.
Die Seite http://Netztransparenz.de [3] der vier Übertragungsnetzbetreiber in Deutschland informiert nicht nur sekündlich über die aktuelle Situation, sondern bietet auch historische Daten zum Herunterladen an. Ruft man dort den Datensatz für den 12. Dezember 2024 ab, erhält man eine Tabelle mit fast drei Millionen Zeilen. Während manche Tabellenkalkulationsprogramme an dieser Größe scheitern, meistert sie Pythons Pandas-Bibliothek ohne Probleme (Listing 1). Einzige Einschränkung: Die Daten müssen in den Arbeitsspeicher des Rechners passen.
Listing 1
Lesen der Netzfrequenz
import pandas as pd fn = 'data/Frequenz_20241201_20241231.csv.zip' df = pd.read_csv(fn, sep=';', decimal=',', thousands='$') df['date'] = df['DATE'] + ' ' + df['TIME'] print(df.shape) # (2678400, 1) df['date'] = pd.to_datetime(df['date'], format='%d.%m.%Y %H:%M:%S') df.index = df['date'] df = df.drop(['DATE', 'TIME', 'date'], axis=1) df.columns=[['freq_Hz']] df.loc['2024-12-04 14:00':'2024-12-04 20:00',:].plot()
Der Aufruf des Skripts in Listing 1 verarbeitet die Daten. Sie liegen im deutschen Format vor, weshalb »read_csv« den Dezimaltrenner Komma als Parameter erhält. Er überschneidet sich mit dem Default-Wert für den Tausendertrenner, den wir hier aber nicht benötigen. Ihm weist man ein Symbol zu, das nicht in der Datei vorkommt (hier »§«). Das Ergebnis visualisiert Abbildung 1.
Alle Werte liegen unterhalb der Schwelle von 200 mHz Schwankungsbreite. Kurz nach 16 Uhr deutet ein kleiner Peak darauf hin, dass nicht etwa zu viel Leistung abgerufen wurde, sondern zu wenig.
|
W |
Watt, Einheit für Leistung. |
|
Wh |
Wattstunde, Einheit für Energie. Eine Leuchte mit einer Leistungsaufnahme von einem Watt wandelt in einer Stunde die elektrische Energie von einer Wattstunde in Wärme und Licht um. |
|
k, M, G, T |
Abkürzungen für Kilo (103), Mega (106), Giga (109) und Tera (1012) |
|
MW |
Leistung von 1 Megawatt. Zum Vergleich: Moderne Windräder liefern rund 10 MW Leistung. |
|
ct/kWh |
Gebräuchliche Einheit für die Kosten einer Kilowattstunde. |
|
Euro/MWh |
Kosteneinheit für Großhandel. 1 Euro/MWh = 0,1 ct/KWh |
|
530 TWh |
Größenordnung der elektrischen Energie, die Deutschland im Jahr umsetzt. |
|
60 GW |
Nach Division der elektrischen Energie von 530 TWh durch (365 Tage * 24 Stunden) erhält man die Leistung, die Verbraucher in Deutschland im Mittel abrufen. Korrekte Schreibweisen sind 530 TWh/a und 60 GW. Interessiert man sich für den Jahresverbrauch, multipliziert man mit einem Jahr (a): 530 TWh = 60 GW * a. |
Energieträger
Woher rührt die Panik in den Medien? Die Daten von Agora [4] geben Auskunft über die Energieträger, die Deutschland mit Strom versorgen, so auch für den Dezember 2024. Für die Analyse genügt die Auswahl des Monats Dezember. Um aber die Gesamtdaten zu betrachten, basieren die Skripte auf dem vollständigen Datensatz mit 8784 Daten für jede Stunde im Jahr 2024 (Listing 2)
Listing 2
Energieträgeranteil
fn = 'data/energiemix_jan_dez_2024.zip' df_all = pd.read_csv(fn, sep=',') df_all = (df_all .set_index(pd.to_datetime(df_all.Datetime)) .drop(['Datetime'], axis=1) ) df.index.name='date' print(df_all.shape) # (8784, 16) print(df_all.columns) c_all_columns = [ 'Wind Offshore', 'Wind Onshore', 'Solar', 'Wasserkraft', 'Biomasse', 'Andere erneuerbare Erzeugung', 'Braunkohle', 'Steinkohle', 'Erdgas', #'Pumpspeicher', 'Andere konventionelle Erzeugung', ] df = df_all[c_all_columns]
Das Skript in Listing 2 bereitet die Daten auf. Um die Grafiken nicht zu überladen, reduziert die Zeile »df = df[[‘Biomasse’,’Steinkohle’, …]]« den Datenrahmen auf die wichtigsten Attribute.


Abbildung 2: Energieträger und ihr Anteil an der Stromversorgung zu verschiedenen Zeitpunkten im Dezember 2014 (siehe Listing 2).
Die obere Grafik in Abbildung 2 gibt Auskunft über den Energiemix für die ersten zwei Wochen im Dezember 2024. Die mittlere Grafik konzentriert sich auf die Tage um den 12. Dezember. Die untere Grafik beschränkt sich auf die erneuerbaren Energieträger Photovoltaik und Wind. Am 12. Dezember um 12 Uhr herrschte Flaute, an Land und auf See. Am Nachmittag brach auch die Leistung der Photovoltaik ein.
Um die Daten in einen Gesamtkontext zu stellen, vergleichen die Skripts in Listing 3 agglomerierte Daten mit denen, die das Statistische Bundesamt [5] für 2024 veröffentlicht hat. Die Multiplikation der mittleren Leistung mit der Zahl der Stunden pro Jahr (365*24) liefert die Leistung in GWh/a und, nach Division durch 1000, in TWh/a oder anders ausgedrückt: die Energie in TWh pro Jahr.
Listing 3
Erzeugung und Verbrauch
gw2gwh = 365*24/1000 # conversion GWh/h -> TWh / a
print('Generated Energy 2024 in TWh/a: ',
(df
.loc['2024-01-01':'2024-12-31',:]
.mean()
.sum()
)*(365*24)/1000)
print('Consumed Energy 2024 in TWh/a: ',
(df_all
.loc['2024-01-01':'2024-12-31','Gesamtstromverbrauch']
.mean()
.sum()
)*(365*24)/1000)
Die Tabelle “Angaben zum Energieverbrauch 2024” zeigt die Resultate. Warum die Angaben des Statistischen Bundesamts um etwa 30 TWh/a kleiner ausfallen als die Werte aus den Daten, bleibt unklar. Der Bundesverband der Energie- und Wasserwirtschaft e. V. nennt einen Wert von 488,5 TWh [6]. Für die Analyse der Dunkelflaute spielen die kleinen Abweichungen jedoch keine Rolle.
|
|
Statistisches Bundesamt |
Berechnung (Listing 3) |
|---|---|---|
|
erzeugte Energie in TWh/a |
432 |
468 |
|
Import – Export = Delta in TWh/a |
81,7 – 55,4 = 26,3 |
498 – 468 = 30 |
|
Gesamtverbrauch in TWh/a (Summe der obigen) |
458 |
498 |
Beginnend vom 10. Dezember an bricht die Windleistung bis zum 12. Dezember fast vollständig ein. Für die Untersuchungen ist es anschaulicher, die Leistung als Energie pro Zeit zu betrachten statt die Energie als Integral über die Leistung dazustellen, siehe Abbildung 3.
Listing 4
Energiemix Anfang Dezember und am 12. Dezember
p1212 = (df
.loc['2024-12-12 15:00':'2024-12-12 17:00',:]
.mean(axis=0)
)
p121012 = (df
.loc['2024-12-01 00:00':'2024-12-10 01:00',:]
.mean(axis=0)
)
print('Mean power Dec and Dec_12: ', p121012.sum().mean(), p1212.sum().mean())
df12 = pd.concat([p121012, p1212], axis=1).round(1)
df12.columns= ['normal', 'dunkelflaute']
df12.plot(kind='bar')
Die Skripte in Listing 4 erzeugen die Grafik in Abbildung 3. Die erneuerbaren Energien Sonne und Wind liefern kaum noch Energie (in der Grafik in Blau) – es herrscht Dunkelflaute. Die konventionellen Energieträger fahren ihre Leistung hoch, insbesondere Gaskraftwerke. Dennoch kompensieren sie nicht das Leistungsdelta.
Anfang Dezember stellten die Kraftwerke in Deutschland eine Leistung von 60 GW bereit. Am 12. Dezember um 16 Uhr sind es nur noch 53 GW. Im Mittel rufen die Verbraucher in Deutschland eine Leistung von 60 GW ab. Ein Ausfall von 7 GW bedeutet eine Leistungsminderung von 10 Prozent. Ist das problematisch?
Strompreise
Entscheidend ist, wie die Leistungsreserven aussehen und wie lange die Dunkelflaute anhält. Die oben zitierte Quelle gibt weitere Hinweise. Die vorgehaltene Leistung von Gas, Steinkohle und Braunkohle liegt bei 34, 16 und 15 GW. Ein Blick auf Abbildung 3 offenbart, dass während der Dunkelflaute lediglich 22,6 beziehungsweise 11 GW Leistung abgerufen wurden. Gaskraftwerke hätten mit 12 GW, Steinkohle mit 10 und Braunkohle mit 4 GW nachlegen können, in der Summe 26 GW.
Ein Kohlekraftwerk liefert Strom zu Preisen von 150 Euro/MWh, sofern man Folgekosten sozialisiert (Ewigkeitskosten durch den Abbau von Kohle, Entsorgen des Abbrands in der Luft, Infrastruktur für Brennstofftransport und so weiter). Das ist deutlich billiger als 900 Euro/MWh. Als Argument für Kohle genügt das aber nicht. In Deutschland dürfen Reserven nur zum Sicherstellen der Versorgung eingesetzt werden, ausdrücklich nicht zur Kostenreduzierung. Hier hilft SMARD und nennt die Großhandelspreise [7].
Das Skript in Listing 5 bereitet die Daten auf und erzeugt die Grafik in Abbildung 4. Deutlich zu erkennen ist der Preis-Peak am 12. Dezember um 16 Uhr. Er hält gerade einmal 60 Minuten an. Bereits am Abend pendeln sich die Preise wieder auf ein Normalniveau von 100 Euro/MWh ein.
Listing 5
Großhandelspreise im Dezember 24
# source: https://www.smard.de
fn = 'data/Gro_handelspreise_202412040000_202412150000_Stunde.csv'
df = pd.read_csv(fn, sep=';', thousands='§', decimal=',')
df.rename(columns = {'Datum von': 'Datum'}, inplace = True)
df = df.set_index(pd.to_datetime(df['Datum'], format="%d.%m.%Y %H:%M"))
df = df.drop(['Datum', 'Datum bis'], axis=1)
df.rename(columns=lambda x: x[:-28], inplace=True)
df.plot()
plt.show()
Import und Export
Die Presse zitiert die Nachbarstaaten: Sie seien unzufrieden mit Deutschland, das die Preise hochtreibe. Um das zu untersuchen, hilft ein Blick auf den Import und Export von Strom [8].
Die fraglichen Daten wandelt das Skript aus Listing 6 in die Grafiken in Abbildung 5 um. Dort erkennt man den regen Austausch mit den Nachbarländern. Er bewegt sich auf einem Level von einigen Zehn GWh/h. Die mittlere Grafik in Abbildung 5 hebt den Nettoaustausch für Deutschland hervor. Die Abfrage »dg.iloc[:,0].sum()« an den Dataframe »dg« gibt den Saldo zurück: -28308856 MWh/a, also rund -28 TWh/a, ganz im Einklang mit den oben genannten Daten des Statistischen Bundesamts.
Die untere Teilgrafik hebt den Bereich um den 12. Dezember hervor. Tatsächlich ist hier ein Stromimport zu beobachten. Allerdings fällt er nicht sonderlich aus dem Rahmen. Bereits zwei Tage später überwiegt der Export.
Listing 6
Im- und Export von Energie
# data source: https://www.smard.de
fn = 'data/aussenhandel_202401010000_202501010000_Viertelstunde.zip'
dg = pd.read_csv(fn, sep=';', thousands='.', decimal=',', converters = {'Datum von': str, 'Datum bis': str})
dg.rename(columns = {'Datum von': 'Datum'}, inplace = True)
dg = dg.set_index(pd.to_datetime(dg['Datum'], format="%d.%m.%Y %H:%M"))
dg = dg.drop(['Datum', 'Datum bis'], axis=1)
dg.rename(columns=lambda x: x[:-26], inplace=True)
dg = dg.resample("h").sum()
dg.iloc[:,1:].plot()



Abbildung 5: Import und Export von elektrischer Energie (siehe Listing 6).
Preiszonen
Die Unzufriedenheit speziell von Norwegen und Schweden lässt sich aus Abbildung 6 ableiten: Deutschland importiert Strom zu hohen Kosten, die auch von der Bevölkerung dort bezahlt werden müssen. Aus der unteren Teilgrafik folgt, dass der Stromaustausch praktisch unabhängig von den Kosten ist. Die Kapazität der Leitungen ist begrenzt, so auch die Strommenge. Die Bezeichnung Norwegen in der Grafik ist übrigens nicht ganz korrekt. Während die Daten für Südnorwegen zutreffen, verharrt der Preis in Nordwestnorwegen bei 70 Euro/MWh, in Nordnorwegen sogar bei 15 Euro/MWh.


Abbildung 6: Importpreise für Energie aus Norwegen und Schweden am 12. Dezember (oben), unten die importierten und exportierten Strommengen im Monat Dezember 2024.
In Europa werden immer wieder Stimmen laut, auch den deutsch-luxemburgischen Strommarkt in Preiszonen aufzuteilen [9]. Befürworter erhoffen sich eine Marktlösung der paradoxen Situation, dass in Norddeutschland billiger Strom teuer eingelagert werden muss, während in Süddeutschland teure Gaskraftwerke anlaufen. Fehlende Netzkapazitäten in Deutschland bekommen die Nachbarländer zu spüren: Der innerdeutsche Energietransport blockiert die Leitungen und damit die Kapazitäten für den Austausch mit dem Ausland.
Veraltete Stromnetze
Die Stromnetze sind für wenige Großkraftwerke konzipiert. Sie verlangen nach Wechselspannung, damit Transformatoren für den Transport hohe Spannungen im Kilovoltbereich erzeugen können. Für flexible Kleinkraftwerke sind die Netze dagegen nicht geschaffen. Windkraftwerke werden bei fehlender Nachfrage lieber ausgeschaltet, da sie nur geringe Investitionskosten einspielen müssen.
Kleine Versorgungseinheiten würden aber flächendeckenden Ausfällen vorbeugen. Wechselspannung braucht da eigentlich niemand mehr. Hochleistungs-MOSFETs richten auch Gleichspannung um. Hochspannungserd- oder Unterwasserkabel funktionieren nicht mit Wechselspannung. Stattdessen sieht der Netzausbau vor, Kleinerzeuger in das große Netz zu integrieren und jeden mit einer eigenen Regelungseinheit auszustatten.
Blackout in Spanien
Am 28. April 2025 fiel in Spanien der Strom aus, flächendeckend für mehr als zwölf Stunden. Ruft man die Daten zur Netzfrequenz ab, lässt sich der Beginn genau festlegen (Abbildung 7). Der Aufruf aus Listing 7 nennt 12:33 Uhr als Zeitpunkt, an dem eine Unstimmigkeit im deutschen Netz auftritt. Sie bleibt unterhalb der kritischen Schwelle von 49,8 Hz. Innerhalb weniger Sekunden bricht in Spanien ein Leistungsangebot von 15 GW weg. Zum Vergleich: Deutschland hält schnelle Regelkapazitäten in der Größenordnung von 5 GW vor. Dank der Lastabschaltungen bleibt das Problem auf Spanien begrenzt.
Listing 7
Netzfrequenz am 28.04.2025
df.loc['2025-04-28:*12:00':'2025-04-28:*14:00',:].idxmin()
Hier beginnen eine Reihe von Paradoxen. Wärmekraftwerke sind nicht schwarzstartfähig. Einmal ausgeschaltet, brauchen sie zum Anlaufen ordentlich Strom für Pumpen und Turbinen. Regenerative Energieerzeuger wie Sonne und Photovoltaik können von sich aus starten, werden aber bei Problemen als erste vom Netz genommen. Generatoren erzeugen Wechselstrom und müssen exakt synchron zusammengeschaltet werden.
Photovoltaik erzeugt Gleichstrom. Dennoch lauschen ihre Wechselrichter am Netz. Stimmt die Netzfrequenz nicht, schalten sie die Anlage ab. Dies könnte eine der Ursachen für den Stromausfall gewesen sein: Ein kurzzeitiger Einbruch der Netzfrequenz trennt alle Photovoltaikanlagen in einer Region vom Netz, die Überlast führt zum Lastabwurf. Geschieht dies nicht regelkonform, produzieren die konventionellen Kraftwerke Überkapazitäten, die zu ihrer Abschaltung führen. Einmal im Stillstand, können sie nicht mehr hochfahren. Die Photovoltaikanlagen dürfen es auch nicht, da ihnen die Netzsynchronisation fehlt.
Fazit
Was bleibt übrig von der Dunkelflaute? Reservekraftwerke hielten sich im Dezember 2024 weiter in Reserve und wurden nicht eingeschaltet, denn Energie gab es mehr als genug. Nur der Preis spielte verrückt. Über zwei Stunden war er neunfach überteuert. Eine Ursache wurde nicht gefunden. Vieles spricht für einen statistischen Ausreißer. Genauso, wie sich manche Ausschläge eines Aktienindexes aufgrund seiner Stochastik nicht vorhersagen lassen, mag es auch beim Strompreis zu größeren, aber seltenen Ausschlägen kommen. Es liegt in der Natur des Menschen, den Zufall nachträglich zu begründen. Dank frei verfügbarer Daten und einem Werkzeug wie Python können sich alle selbst ein Bild machen und die Informationen analysieren.
Infos
- “Dunkelflaute Deutschland”: https://www.focus.de/politik/meinung/nena-und-die-andere-meinung-dunkelflaute-deutschland-wir-sind-europas-geisterfahrer_id_260560964.html
- “Deutschlands Stromnetz am Rande des Kollapses”: https://www.kettner-edelmetalle.de/news/deutschlands-stromnetz-am-rande-des-kollapses-nachbarlander-emport-uber-deutsche-energiepolitik-16-12-2024
- Sekündliche Daten: https://www.netztransparenz.de/de-de/Regelenergie/Daten-Regelreserve/Sek%C3%BCndliche-Daten
- Agora Energiewende: https://www.agora-energiewende.de/daten-tools/agorameter/live/chart/power_generation
- Stromerzeugung aus erneuerbaren Energieträgern 2024 (Statistisches Bundesamt): https://www.destatis.de/DE/Presse/Pressemitteilungen/2025/03/PD25_091_43312.html
- BDEW: https://www.bdew.de/media/documents/Kapazitaet_und_Erzeugung_D_2023_online_o_jaehrlich_Ba_18122024.pdf
- Großhandelspreise: https://www.smard.de/home/downloadcenter/download-marktdaten
- Marktpreise: https://www.smard.de
- “Strompreise: Würde der Norden von neuen Preiszonen profitieren?”: https://www.ndr.de/nachrichten/info/Strompreise-Wuerde-der-Norden-von-neuen-Preiszonen-profitieren,strompreiszonen100.html









