API Grade-zile
Grade-zile de încălzire și de răcire din reanaliza orară ERA5-Land, din 1950 încoace, oriunde pe uscat — inclusiv în locurile fără nicio stație meteo pe o rază de 60 km. Un singur scope — dju — acoperă toată pagina.
Grade-zile#
dju2 credite, +1 pentru fiecare perioadă completă de 365,25 zile din intervalGrade-zile de încălzire și de răcire pentru o coordonată.
Parametri
| Parametru | Tip | Implicit | Descriere |
|---|---|---|---|
lat | float | — | Obligatoriu. |
lon | float | — | Obligatoriu. |
base | number | preset | csv | 18 | Orice temperatură de bază în °C sau o presetare: uk (15,5), ashrae (18,333), iso, france, eurostat. Până la 60, separate prin virgulă, fără cost suplimentar — vedeți mai jos. |
method | string | hourly | hourly, costic, mean sau eurostat. Contractul dumneavoastră decide asta, nu noi. |
start | ISO date | 1 ianuarie al anului de sfârșit | Maximum 10 ani per cerere. |
end | ISO date | azi | |
type | string | both | HDD, CDD sau both. |
breakdown | string | monthly | daily, weekly, monthly sau yearly. |
elevation | float (m) | — | Altitudinea reală a sitului dumneavoastră. Mută seria de la altitudinea celulei la a dumneavoastră — vedeți mai jos. |
format | string | json | json sau csv. CSV-ul e o funcție a planurilor plătite. |
{
"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 } ]
}
Blocul quality nu e decor. Un
coverage sub 1,0 înseamnă că lipseau ore din arhivă.
provisional_days numără zilele completate din prognoză, nu din
reanaliza finală, pentru că ERA5-Land se publică cu circa cinci zile de
întârziere.
Dacă decontați un contract pe aceste cifre, verificați-le pe amândouă. Un
total calculat pe o acoperire de 0,98 nu e greșit, dar nu e aceeași afirmație ca
unul pe 1,0 — iar diferența e invizibilă în totals.
Ce este un grad-zi, într-un paragraf
Un grad-zi de încălzire măsoară cât de mult sub o temperatură de bază a stat
aerul de afară și cât timp. La baza 18 °C, o oră la 16 °C contribuie cu
(18 − 16) / 24 = 0.083 HDD. Însumați orele și aveți un număr
proporțional cu energia de care a avut nevoie o clădire. Gradele-zile de răcire
sunt oglinda: cât de mult peste bază. E modul standard de a compara un
sezon de încălzire cu altul, după ce vremea a fost scoasă din comparație.
Mai multe baze, o cerere, un preț#
djusame as one basePână la 60 de temperaturi de bază într-un singur apel, la prețul uneia.
Citirea și decodarea seriei orare reprezintă tot costul unui răspuns de grade-zile. Odată ce vectorul acela e în memorie, încă o bază e o scădere peste el, deci a cere șaizeci costă cât a cere una.
Răspunsul câștigă un vector by_base care poartă toate bazele în
ordinea în care le-ați enumerat. totals și breakdown
descriu în continuare prima, deci codul scris înainte ca asta să existe
funcționează neschimbat.
"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}
]
Util când nu știți încă ce bază reproduce cifrele unui contract sau când aceeași clădire e decontată la baze diferite de părți diferite — un proprietar pe 15,5 și un furnizor de energie pe 18 au amândoi dreptate, iar asta le întoarce pe amândouă într-un singur apel.
Metode de calcul#
dju2 credite, +1 pentru fiecare perioadă completă de 365,25 zile din intervalToate cele patru metode pe aceeași perioadă, una lângă alta.
Definițiile metodelor și presetările lor. Fără cheie.
Metoda e un parametru pentru că o decide contractul dumneavoastră, nu noi. Aceleași date, aceeași bază, același an, la Alger:
| Metodă | HDD 18 °C | CDD 18 °C | Când se folosește |
|---|---|---|---|
hourly | 781.9 | 1331.6 | Implicită. Integrează deficitul orar — cea mai fidelă fizic. |
costic | 741.7 | 1349.5 | DJU unifiés franceze. Cerută de contractele franceze de performanță energetică. |
mean | 659.9 | 1267.8 | Media zilnică față de bază. Cea mai răspândită convenție internațională. |
eurostat | 587.7 | 656.6 | Statistici europene. Pragurile sunt fixate prin definiție și ignoră base. |
Metoda orară și media zilnică diferă cu 18 % pe aceleași
date. Nu e o diferență de rotunjire — e diferența dintre a câștiga și a
pierde o dispută despre o factură de energie. Alegeți metoda care reproduce
cifrele din contractul dumneavoastră înainte să vă angajați la un plan;
pentru asta există compare-methods, și costă o cerere.
eurostat ignoră complet base: definiția își fixează
propriile praguri, iar respectarea parametrului dumneavoastră ar produce un
număr care nu e un grad-zi Eurostat, dar care ar pretinde că este.
/v1/methods nu cere cheie. Folosiți-l ca să populați un selector
de metode în interfața dumneavoastră fără să cheltuiți nimic și fără să fixați
în cod o listă care se va învechi.
Grade-zile pe oraș#
dju2 credite, +1 pentru fiecare perioadă completă de 365,25 zile din intervalAcelași lucru, cu fusul orar al orașului și cu corecția lui de insulă de căldură urbană.
Aplică două corecții pe care o coordonată simplă nu le poate face: fusul orar al orașului, ca zilele să fie tăiate local, și decalajul calibrat al insulei de căldură urbană.
Reanaliza subestimează zonele construite cu 1–3 °C. Asta trage în jos gradele-zile de răcire — important dacă dimensionați aer condiționat, și invizibil dacă nu știți că trebuie să căutați.
elevation nu se aplică pe această cale, iar
omisiunea e deliberată. Decalajul orașului e deja calculat față de stații
normalizate la altitudinea orașului, deci o a doua corecție de gradient ar
socoti aceeași altitudine de două ori — în același sens și suficient de plauzibil
încât nimeni să nu observe. Dacă vă trebuie altitudinea unei clădiri anume,
folosiți endpointul pe coordonate cu elevation și renunțați la
corecția de insulă de căldură.
Grade-zile pentru clădirea dumneavoastră, nu pentru celula de grilă#
djusameCorecție de gradient termic de la altitudinea terenului celulei la a dumneavoastră.
O stație meteo se află la altitudinea la care se află și nimeni nu o poate muta 600 m mai sus pe versantul văii pentru dumneavoastră. Sursa noastră e un model, deci altitudinea terenului din celulă e un număr în arhivă, iar diferența e aritmetică: 0,65 °C la fiecare 100 m. Pe un sezon de încălzire, asta nu e o eroare de rotunjire.
Se activează la cerere, iar răspunsul spune exact ce a făcut:
"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."
}
Avertismentul călătorește în răspuns, nu doar pe pagina asta, pentru că cine va citi JSON-ul peste șase luni nu e cine a citit documentația.
Fixarea unei celule, ca o referință să rămână comparabilă#
dju1 creditCe celulă ar răspunde pentru un punct și cât de departe este.
dju2 credite, +1 pentru fiecare perioadă completă de 365,25 zile din intervalGrade-zile pentru o celulă numită — fără nicio căutare a celei mai apropiate celule.
Toate celelalte forme de localizare reiau căutarea celei mai apropiate celule la fiecare cerere, deci răspunsul depinde de ce conține arhiva azi. E valoarea implicită potrivită pentru o consultare izolată și cea nepotrivită pentru o referință: o comparație pe mai mulți ani e o comparație doar dacă fiecare an vine din același loc.
Pe măsură ce arhiva se lărgește, celula cea mai apropiată de un sit dat se schimbă — o îmbunătățire de acoperire care altfel ar ajunge în datele dumneavoastră ca un salt inexplicabil.
# o dată, la configurare
GET /v1/cells/resolve?lat=45.19&lon=5.72
→ { "id": "era5l_45.20_5.70", "distance_km": 1.4, "resolution_km": 9 }
# de fiecare dată după aceea
GET /v1/degree-days/cell/era5l_45.20_5.70?base=18&start=2015-01-01&end=2025-12-31
distance_km este 0 într-o cerere fixată prin
construcție: ați numit celula, deci nimic nu a fost înlocuit. O celulă care nu
mai există întoarce 404 cell_not_found în loc să cadă tăcut pe una
vecină — ceea ce ar reintroduce exact substituția pe care ați fixat-o ca s-o
evitați.
/v1/cells/resolve e și modul ieftin de a afla înainte să
plătiți pentru date că cea mai apropiată celulă e la 60 km. Nu decodează nimic
și nu citește nicio serie de timp, iar prețul e pe măsură: un credit.
Perioade de detaliere#
djusameAgregați aceeași cerere la perioada pe care se decontează contractul dumneavoastră.
Fiecare răspuns de grade-zile poartă un vector breakdown agregat
la perioada pe care o cereți. Contractele se decontează pe perioade diferite,
deci toate patru sunt disponibile în aceeași cerere, la același preț.
| Perioadă | Fiecare rând poartă |
|---|---|
daily | data, HDD, CDD, temperatura min./max./medie |
weekly | anul și săptămâna ISO, data de început, totalurile |
monthly | anul, luna, totalurile — implicit |
yearly | anul, totalurile |
Săptămânile sunt săptămâni ISO, deci o săptămână aparține anului care conține joia ei. 1 ianuarie 2023 cade în săptămâna 52 din 2022 și acolo o raportăm — la fel va face și foaia dumneavoastră de calcul, iar a nu fi de acord cu foaia de calcul e felul în care începe o ședință de reconciliere.
Fiecare interval poartă și days, ca o lună parțială la marginea
intervalului dumneavoastră să fie vizibilă, nu tăcut mai scurtă. Un februarie cu
"days": 12 e un februarie pe care n-ar trebui să-l comparați cu
unul întreg.
Totaluri lunare pentru un an#
dju2 crediteDouăsprezece totaluri lunare pentru un an calendaristic, fără serie zilnică.
Ce conține arhiva: prima și ultima zi cu date și axa în care va crește. Fără cheie.
O scurtătură pentru cazul obișnuit:
?lat=&lon=&year=2025 și se întorc douăsprezece rânduri.
Aceleași date ca /v1/degree-days?breakdown=monthly pe același
interval; mai puțini parametri de greșit.
/v1/coverage raportează prima și ultima zi a arhivei și
rezoluția ei, nu cere cheie și e lucrul potrivit de verificat înainte să cereți
o perioadă aproape de marginea prezentului — ERA5-Land e în urmă cu vreo cinci
zile, iar provisional_days din răspunsul dumneavoastră e
consecința.
{
"start": "1950-01-01",
"end": "2026-07-29", // ultima zi care CONȚINE date
"axis_end": "2026-12-31", // unde se va opri din creștere această rulare
"hours": 671256, "axis_hours": 674976,
"cells": 86274, "resolution_km": 9.0,
"run": "world-1950-2026-p1000"
}
end și axis_end sunt întrebări diferite, iar
doar prima e despre date. O rulare e scrisă față de tot calendarul pe
care îl va umple în cele din urmă — arhiva 1950-2026 alocă fiecare oră până la
31 decembrie 2026 — iar completarea o umple pe măsură ce publică Copernicus.
Până la 2026-08-03 acest endpoint raporta axa drept end, deci
credita arhiva cu vreo cinci luni de ore care erau goale. end e ce
puteți cere azi; o cerere aflată în întregime dincolo de el e un
404 outside_archive, nu un răspuns bine format cu totalul zero.
Export CSV#
dju4× the JSON callRândurile de detaliere ca fișier CSV. Doar planuri plătite.
Adăugați format=csv la orice cerere de grade-zile. Primiți
rândurile din breakdown ca fișier CSV, denumit după loc și date,
astfel încât să fie încă recognoscibil peste șase luni într-un folder de
descărcări.
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
Doar planuri plătite, și limitat: același interval maxim ca
la o cerere JSON, doar rânduri agregate — niciodată seria orară — și costă patru
credite pentru fiecare unul pe care îl costă apelul JSON echivalent. O cheie
gratuită primește 402 export_not_in_plan.
Asta e o alegere deliberată, nu o cârcoteală. Arhiva e ceea ce plătiți, iar un export nelimitat e felul în care un concurent și-o însușește într-o după-amiază. Limitele sunt cele care fac posibilă existența formatului.
Istoric orar#
dju(years + 1) × (variables ÷ 2), rounded down, min 1Arhiva de reanaliză servită brut: vreme orară din 1950 încoace.
Parametri
| Parametru | Tip | Implicit | Descriere |
|---|---|---|---|
lat | float | — | Obligatoriu. |
lon | float | — | Obligatoriu. |
start | ISO date | — | Intervalul unei cereri e plafonat — vedeți Planuri. |
end | ISO date | — | |
variables | csv | un subset rezonabil | Întrebați /v1/historical/variables ce conține arhiva aceasta. |
hourly | bool | true | Include seria oră de oră. |
daily | bool | false — true pentru orașe | Include agregate zilnice, tăiate pe zile calendaristice locale. |
Aceeași arhivă din care sunt construite gradele-zile, servită direct: orar,
din 1950, pe o grilă de 9 km, peste tot pe uscat. Aceeași gazdă și același scope
dju — dacă puteți apela gradele-zile, puteți apela și asta.
Astăzi această arhivă conține temperatură și nimic altceva. A fost ingerată pentru grade-zile, iar gradelor-zile le trebuie o singură variabilă. Pagina asta a promis „umiditate, vânt, precipitații și radiație solară” până la 2026-08-03, iar arhiva nu a conținut niciodată nimic din toate astea.
/v1/historical/variables e răspunsul mereu actual — citește
rularea promovată, nu propoziția asta, nu cere cheie și nu costă nimic.
Apelați-l înainte să construiți ceva pe un câmp.
Ce o face să merite plătită e consistența. Înregistrarea unei stații meteo poartă fiecare mutare, fiecare schimbare de instrument și fiecare gol din istoria ei, deci o tendință pe treizeci de ani calculată din ea e în parte o tendință a instrumentației. O reanaliză nu are nimic din toate astea: modelul e același model pentru fiecare an al înregistrării.
Pentru valori zilnice pe o perioadă lungă, sau pentru normale și tendințe, folosiți în schimb API-ul Climă — conține câmpurile zilnice deja derivate, nu are limita de 9 km/1950 și răspunde cu o climatologie întreagă într-un singur apel.
Istoric pe oraș#
dju(years + 1) × (variables ÷ 2), rounded down, min 1Identic, cu fusul orar al orașului și cu corecția de insulă de căldură.
Două lucruri pe care o coordonată nu le poate purta: fusul orar al orașului,
ca zilele să fie tăiate acolo unde orașul le trăiește cu adevărat, și corecția
lui calibrată de insulă de căldură urbană. Aici daily e implicit
true, pentru că o cerere pe oraș e aproape mereu o cerere despre zile.
Variabile disponibile#
Ce conține arhiva chiar acum, cu unități, și care câmpuri sunt derivate. Fără cheie.
Enumeră ce conține arhiva chiar acum, cu unități, și care câmpuri
sunt derivate în loc să fie stocate. O arhivă ingerată doar pentru grade-zile
conține numai temperatură, iar endpointul acesta o spune limpede în loc să
întoarcă coloane de null.
Unele câmpuri sunt calculate, nu stocate: umiditatea din punctul de rouă,
viteza și direcția vântului din componentele u și v. A stoca ce se calculează în
microsecunde ar mări arhiva cu o treime degeaba — dar un câmp derivat apare doar
când sursele lui sunt în rulare, și de aceea adevărul despre ce puteți
cere este acest endpoint, nu o listă scrisă pe o pagină. În arhiva promovată azi
sursele lipsesc, deci răspunsul este doar temperature_2m.