Gradtag-API
Heiz- und Kühlgradtage aus der stündlichen ERA5-Land-Reanalyse, zurück bis 1950, überall an Land — auch dort, wo im Umkreis von 60 km keine Wetterstation steht. Ein Scope — dju — deckt diese ganze Seite ab.
Gradtage#
dju2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der SpanneHeiz- und Kühlgradtage für eine Koordinate.
Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
lat | float | — | Erforderlich. |
lon | float | — | Erforderlich. |
base | number | preset | csv | 18 | Jede Basistemperatur in °C oder eine Voreinstellung: uk (15,5), ashrae (18,333), iso, france, eurostat. Bis zu 60, durch Kommas getrennt, ohne Aufpreis — siehe unten. |
method | string | hourly | hourly, costic, mean oder eurostat. Das entscheidet Ihr Vertrag, nicht wir. |
start | ISO date | 1. Januar des Endjahres | Höchstens 10 Jahre je Anfrage. |
end | ISO date | heute | |
type | string | both | HDD, CDD oder both. |
breakdown | string | monthly | daily, weekly, monthly oder yearly. |
elevation | float (m) | — | Tatsächliche Geländehöhe Ihres Standorts. Verschiebt die Reihe von der Höhe der Zelle auf Ihre — siehe unten. |
format | string | json | json oder csv. CSV ist den bezahlten Tarifen vorbehalten. |
{
"location": {
"latitude": 36.75, "longitude": 3.06,
"grid_cell": { "latitude": 36.7, "longitude": 3.1,
"distance_km": 6.61, "resolution_km": 9 }
},
"parameters": {
"base_temperature_c": 18.0, "method": "hourly",
"start": "2025-07-01", "end": "2026-06-30"
},
"totals": { "hdd": 781.86, "cdd": 1331.61 },
"quality": {
"days": 365, "coverage": 1.0,
"missing_hours": 0, "provisional_days": 0
},
"breakdown": [ { "year": 2025, "month": 7, "hdd": 0.0, "cdd": 289.4, "days": 31 } ]
}
Der quality-Block ist keine Zierde. Ein
coverage unter 1.0 heißt, dass im Archiv Stunden fehlten.
provisional_days zählt Tage, die aus der Vorhersage statt aus der
endgültigen Reanalyse gefüllt wurden, denn ERA5-Land veröffentlicht mit etwa
fünf Tagen Verzögerung.
Wenn Sie einen Vertrag nach diesen Zahlen abrechnen, prüfen Sie beide. Eine
über eine Abdeckung von 0,98 berechnete Summe ist nicht falsch, aber sie ist
nicht dieselbe Aussage wie eine über 1,0 — und der Unterschied ist in
totals unsichtbar.
Was ein Gradtag ist, in einem Absatz
Ein Heizgradtag misst, wie weit unter einer Basistemperatur die Außenluft lag
und wie lange. Bei Basis 18 °C trägt eine Stunde bei 16 °C
(18 − 16) / 24 = 0.083 Heizgradtage bei. Summieren Sie die Stunden,
und Sie haben eine Zahl, die zur Energie proportional ist, die ein Gebäude
brauchte. Kühlgradtage sind das Spiegelbild: wie weit über der Basis.
Es ist die übliche Art, eine Heizperiode mit einer anderen zu vergleichen,
nachdem das Wetter aus dem Vergleich herausgerechnet wurde.
Viele Basiswerte, eine Anfrage, ein Preis#
djusame as one baseBis zu 60 Basistemperaturen in einem Aufruf, zum Preis von einer.
Die Stundenreihe zu lesen und zu dekodieren macht die gesamten Kosten einer Gradtag-Antwort aus. Sobald dieses Feld im Speicher liegt, ist ein weiterer Basiswert nur noch eine Subtraktion darüber: sechzig anzufragen kostet also so viel wie einen.
Die Antwort erhält ein by_base-Feld, das jeden Basiswert in der
von Ihnen genannten Reihenfolge trägt. totals und
breakdown beschreiben weiterhin den ersten, sodass Code,
der vor dieser Möglichkeit geschrieben wurde, unverändert funktioniert.
"by_base": [
{"base": 15.0, "hdd": 402.11, "cdd": 1731.4},
{"base": 15.5, "hdd": 431.02, "cdd": 1706.3},
{"base": 18.0, "hdd": 781.86, "cdd": 1331.6}
]
Nützlich, wenn Sie noch nicht wissen, welcher Basiswert die Zahlen eines Vertrags reproduziert, oder wenn dasselbe Gebäude von verschiedenen Parteien mit verschiedenen Basiswerten abgerechnet wird — ein Vermieter mit 15,5 und ein Energieversorger mit 18 haben beide recht, und dies liefert beides in einem Aufruf.
Berechnungsmethoden#
dju2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der SpanneAlle vier Methoden über denselben Zeitraum, nebeneinander.
Die Methodendefinitionen und ihre Voreinstellungen. Kein Schlüssel nötig.
Die Methode ist ein Parameter, weil Ihr Vertrag sie bestimmt, nicht wir. Dieselben Daten, derselbe Basiswert, dasselbe Jahr, in Algier:
| Methode | HDD 18 °C | CDD 18 °C | Wann sie zu verwenden ist |
|---|---|---|---|
hourly | 781.9 | 1331.6 | Standard. Integriert das stündliche Defizit — physikalisch am treuesten. |
costic | 741.7 | 1349.5 | Französische DJU unifiés. Für französische Energieleistungsverträge vorgeschrieben. |
mean | 659.9 | 1267.8 | Tagesmittel gegen die Basis. Die international verbreitetste Konvention. |
eurostat | 587.7 | 656.6 | Europäische Statistik. Die Schwellen sind durch die Definition festgelegt und ignorieren base. |
Stündlich und Tagesmittel unterscheiden sich bei denselben Daten um
18 %. Das ist kein Rundungsunterschied — das ist der Unterschied
zwischen gewonnenem und verlorenem Streit über eine Energierechnung. Wählen Sie
die Methode, die die Zahlen Ihres Vertrags reproduziert, bevor Sie sich
auf einen Tarif festlegen; dafür ist compare-methods da, und es
kostet eine Anfrage.
eurostat ignoriert base vollständig: die Definition
legt ihre eigenen Schwellen fest, und Ihren Parameter zu beachten ergäbe eine
Zahl, die kein Eurostat-Gradtag ist, sich aber als einer ausgibt.
/v1/methods braucht keinen Schlüssel. Nutzen Sie es, um in Ihrer
Oberfläche eine Methodenauswahl zu füllen, ohne etwas auszugeben und ohne eine
Liste fest einzuschreiben, die veraltet.
Gradtage nach Stadt#
dju2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der SpanneDasselbe, mit der Zeitzone der Stadt und ihrer Wärmeinselkorrektur.
Wendet zwei Korrekturen an, die eine nackte Koordinate nicht erlaubt: die Zeitzone der Stadt, damit die Tage lokal geschnitten werden, und ihren kalibrierten Wärmeinsel-Versatz.
Die Reanalyse liest bebaute Flächen um 1 bis 3 °C zu niedrig. Das verzerrt Kühlgradtage nach unten — erheblich, wenn Sie eine Klimaanlage auslegen, und unsichtbar, wenn Sie nicht wissen, dass Sie danach suchen müssen.
elevation wird auf diesem Pfad nicht
angewandt, und die Auslassung ist beabsichtigt. Der Stadtversatz ist
bereits gegen Stationen berechnet, die auf die Höhe der Stadt selbst normiert
sind: eine zweite Gradientenkorrektur würde dieselbe Höhe also doppelt zählen —
in dieselbe Richtung und plausibel genug, dass es niemandem auffiele. Wenn Sie
die Höhe eines bestimmten Gebäudes brauchen, nehmen Sie den
Koordinaten-Endpunkt mit elevation und verzichten auf die
Wärmeinselkorrektur.
Gradtage für Ihr Gebäude, nicht für die Gitterzelle#
djusameGradientenkorrektur von der Geländehöhe der Zelle auf Ihre.
Eine Wetterstation steht auf der Höhe, auf der sie steht, und niemand kann sie für Sie 600 m den Hang hinauf versetzen. Unsere Quelle ist ein Modell: die Geländehöhe der Zelle ist also eine Zahl im Archiv, und die Differenz ist Arithmetik — 0,65 °C je 100 m. Über eine Heizperiode ist das kein Rundungsfehler.
Nur auf ausdrücklichen Wunsch, und die Antwort sagt genau, was sie getan hat:
"elevation": {
"applied": true,
"model_elevation_m": 42.0,
"location_elevation_m": 1200,
"temperature_offset_c": -7.53,
"caveat": "Lapse-rate correction. It assumes temperature falls smoothly with
height, which a valley floor under a winter inversion does not."
}
Der Vorbehalt reist in der Antwort mit statt nur auf dieser Seite zu stehen, weil die Person, die dieses JSON in sechs Monaten liest, nicht die ist, die die Dokumentation gelesen hat.
Eine Zelle fixieren, damit eine Basislinie vergleichbar bleibt#
dju1 CreditWelche Zelle für einen Punkt antworten würde und wie weit sie entfernt ist.
dju2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der SpanneGradtage für eine benannte Zelle — nie eine Suche nach der nächsten Zelle.
Jede andere Ortsangabe startet die Suche nach der nächsten Zelle bei jeder Anfrage neu: die Antwort hängt also davon ab, was das Archiv heute enthält. Für eine einmalige Abfrage ist das die richtige Voreinstellung, für eine Basislinie die falsche — ein Vergleich über mehrere Jahre ist nur dann ein Vergleich, wenn jedes Jahr vom selben Ort stammt.
Mit wachsendem Archiv ändert sich die nächstgelegene Zelle zu einem bestimmten Standort — eine Verbesserung der Abdeckung, die sonst als unerklärlicher Sprung in Ihren Daten ankäme.
# einmalig, bei der Einrichtung
GET /v1/cells/resolve?lat=45.19&lon=5.72
→ { "id": "era5l_45.20_5.70", "distance_km": 1.4, "resolution_km": 9 }
# jedes Mal danach
GET /v1/degree-days/cell/era5l_45.20_5.70?base=18&start=2015-01-01&end=2025-12-31
distance_km ist bei einer fixierten Anfrage konstruktionsbedingt
0: Sie haben die Zelle benannt, es wurde also nichts für sie
eingesetzt. Eine Zelle, die es nicht mehr gibt, liefert
404 cell_not_found, statt stillschweigend auf eine Nachbarzelle
auszuweichen — was genau die Ersetzung wieder einführte, zu deren Vermeidung Sie
fixiert haben.
/v1/cells/resolve ist außerdem der günstige Weg,
vor dem Bezahlen von Daten herauszufinden, dass die nächste Zelle 60 km
entfernt ist. Es dekodiert nichts und liest keine Zeitreihe und ist deshalb mit
einem Credit bepreist.
Aufschlüsselungszeiträume#
djusameDieselbe Anfrage auf den Zeitraum aggregieren, auf dem Ihr Vertrag abrechnet.
Jede Gradtag-Antwort trägt ein breakdown-Feld, das auf den von
Ihnen gewünschten Zeitraum aggregiert ist. Verträge rechnen auf verschiedenen
ab, alle vier stehen deshalb bei derselben Anfrage zum selben Preis zur
Verfügung.
| Zeitraum | Jede Zeile trägt |
|---|---|
daily | Datum, HGT, KGT, Min./Max./Mitteltemperatur |
weekly | ISO-Jahr und -Woche, das Startdatum, die Summen |
monthly | Jahr, Monat, Summen — die Voreinstellung |
yearly | Jahr, Summen |
Wochen sind ISO-Wochen, eine Woche gehört also zu dem Jahr, das ihren Donnerstag enthält. Der 1. Januar 2023 fällt in die Woche 52 des Jahres 2022, und dort weisen wir ihn aus — was Ihre Tabellenkalkulation ebenso tun wird, und mit der Tabellenkalkulation uneins zu sein ist der Anfang einer Abstimmungsrunde.
Jeder Eimer trägt außerdem days, sodass ein angebrochener Monat
am Rand Ihres Bereichs sichtbar ist statt stillschweigend zu kurz. Ein Februar
mit "days": 12 ist ein Februar, den Sie nicht mit einem
vollständigen vergleichen sollten.
Monatssummen für ein Jahr#
dju2 CreditsZwölf Monatssummen für ein Kalenderjahr, ohne Tagesreihe.
Was das Archiv enthält: erster und letzter Tag mit Daten und die Achse, in die es hineinwachsen wird. Kein Schlüssel nötig.
Eine Kurzform für den häufigen Fall:
?lat=&lon=&year=2025, und zwölf Zeilen kommen zurück.
Dieselben Daten wie /v1/degree-days?breakdown=monthly über dieselbe
Spanne; weniger Parameter, bei denen man sich vertun kann.
/v1/coverage meldet den ersten und letzten Tag des Archivs sowie
seine Auflösung, braucht keinen Schlüssel und ist das Richtige, um es zu prüfen,
bevor Sie einen Zeitraum nahe der Gegenwart anfragen — ERA5-Land hinkt etwa fünf
Tage hinterher, und provisional_days in Ihrer Antwort ist die
Folge.
{
"start": "1950-01-01",
"end": "2026-07-29", // letzter Tag, der Daten ENTHÄLT
"axis_end": "2026-12-31", // wo dieser Lauf aufhören wird zu wachsen
"hours": 671256, "axis_hours": 674976,
"cells": 86274, "resolution_km": 9.0,
"run": "world-1950-2026-p1000"
}
end und axis_end sind zwei verschiedene
Fragen, und nur die erste handelt von Daten. Ein Lauf wird gegen den
gesamten Kalender geschrieben, den er einmal füllen wird — das Archiv 1950–2026
reserviert jede Stunde bis zum 31. Dezember 2026 — und die Nachfüllung besetzt
ihn, sobald Copernicus veröffentlicht.
Bis zum 03.08.2026 meldete dieser Endpunkt die Achse als end und
schrieb dem Archiv damit rund fünf Monate an Stunden gut, die leer waren.
end ist das, was Sie heute anfragen können; eine Anfrage, die
vollständig darüber hinausgeht, ergibt ein 404 outside_archive
statt einer wohlgeformten Antwort mit der Summe null.
CSV-Export#
dju4× the JSON callDie Aufschlüsselungszeilen als CSV-Datei. Nur bezahlte Tarife.
Hängen Sie format=csv an eine beliebige Gradtag-Anfrage an. Sie
erhalten die breakdown-Zeilen als CSV-Datei, benannt nach Ort und
Daten, sodass sie sechs Monate später in einem Download-Ordner noch erkennbar
ist.
year,month,hdd,cdd,days,t_mean,coverage,provisional
2024,1,205.03,2.88,31,11.48,1.0,false
2024,2,168.44,4.10,29,12.31,1.0,false
Nur bezahlte Tarife, und begrenzt: dieselbe Höchstspanne wie
bei einer JSON-Anfrage, nur aggregierte Zeilen — niemals die Stundenreihe — und
es kostet vier Credits für jeden, den der entsprechende JSON-Aufruf kostet. Ein
kostenloser Schlüssel bekommt 402 export_not_in_plan.
Das ist bewusst so und nicht widerwillig. Bezahlt wird für das Archiv, und ein unbegrenzter Export ist der Weg, auf dem ein Wettbewerber es sich an einem Nachmittag beschafft. Erst diese Grenzen erlauben es, das Format überhaupt anzubieten.
Stündliche Historie#
dju(years + 1) × (variables ÷ 2), rounded down, min 1Das Reanalyse-Archiv roh ausgeliefert: stündliches Wetter zurück bis 1950.
Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
lat | float | — | Erforderlich. |
lon | float | — | Erforderlich. |
start | ISO date | — | Die Spanne einer Anfrage ist begrenzt — siehe Tarife. |
end | ISO date | — | |
variables | csv | eine sinnvolle Teilmenge | Fragen Sie /v1/historical/variables, was dieses Archiv enthält. |
hourly | bool | true | Die Reihe Stunde für Stunde mitliefern. |
daily | bool | false — true für Städte | Tagesaggregate mitliefern, geschnitten auf lokale Kalendertage. |
Dasselbe Archiv, aus dem die Gradtage gebaut sind, direkt ausgeliefert:
stündlich, zurück bis 1950, auf einem 9-km-Gitter, überall an Land. Gleicher
Host und gleicher dju-Scope — wer Gradtage aufrufen kann, kann auch
dies aufrufen.
Heute enthält dieses Archiv die Temperatur und sonst nichts. Es wurde für Gradtage aufgenommen, und Gradtage brauchen eine Größe. Diese Seite versprach bis zum 03.08.2026 „Luftfeuchte, Wind, Niederschlag und Sonnenstrahlung“, und das Archiv hat nie eines davon enthalten.
/v1/historical/variables ist die Antwort, die immer aktuell
ist — sie liest den freigegebenen Lauf und nicht diesen Satz, braucht keinen
Schlüssel und kostet nichts. Rufen Sie sie auf, bevor Sie auf einem Feld
aufbauen.
Was das Bezahlen wert macht, ist die Konsistenz. Die Aufzeichnung einer Wetterstation trägt jeden Umzug, jeden Gerätewechsel und jede Lücke ihrer Geschichte in sich: ein daraus berechneter Dreißigjahrestrend ist also zum Teil ein Trend der Messtechnik. Eine Reanalyse hat nichts davon — das Modell ist für jedes Jahr der Aufzeichnung dasselbe Modell.
Für Tageswerte über einen langen Zeitraum oder für Normalwerte und Trends nehmen Sie stattdessen die Klima-API — sie hält die Tagesfelder bereits abgeleitet vor, hat keine 9-km-/1950-Grenze und beantwortet eine ganze Klimatologie in einem Aufruf.
Historie nach Stadt#
dju(years + 1) × (variables ÷ 2), rounded down, min 1Identisch, mit der Zeitzone der Stadt und ihrer Wärmeinselkorrektur.
Zwei Dinge, die eine Koordinate nicht tragen kann: die Zeitzone der Stadt,
damit die Tage dort geschnitten werden, wo die Stadt sie tatsächlich erlebt, und
ihre kalibrierte Wärmeinselkorrektur. daily steht hier
standardmäßig auf true, weil eine Stadt-Anfrage fast immer eine Anfrage über
Tage ist.
Verfügbare Variablen#
Was das Archiv derzeit enthält, mit Einheiten, und welche Felder abgeleitet sind. Kein Schlüssel nötig.
Listet auf, was das Archiv gerade jetzt enthält, mit Einheiten, und
welche Felder abgeleitet statt gespeichert sind. Ein allein für Gradtage
aufgenommenes Archiv enthält nur die Temperatur, und dieser Endpunkt sagt das
geradeheraus, statt Spalten voller null zurückzugeben.
Manche Felder werden berechnet statt gespeichert: die Luftfeuchte aus dem
Taupunkt, Windgeschwindigkeit und -richtung aus den u- und v-Komponenten. Zu
speichern, was in Mikrosekunden zu berechnen ist, würde das Archiv um ein
Drittel vergrößern, für nichts — aber ein abgeleitetes Feld erscheint nur, wenn
seine Quellen im Lauf enthalten sind, und deshalb ist dieser Endpunkt
und nicht eine auf eine Seite geschriebene Liste die Wahrheit darüber, was Sie
anfragen können. Im heute freigegebenen Archiv fehlen die Quellen, die Antwort
lautet also allein temperature_2m.