Otevřená data ČHMÚ · statické JSON API

CHMI Data Parser

Každých pět minut stáhne otevřená data Českého hydrometeorologického ústavu, naparsuje je a vystaví jako čitelné JSON soubory. Bez API klíče, bez limitů — stačí fetch().

stupnice výstrah CAP · green → yellow → orange → red

Začínáme

Rychlý start

Vše podstatné je v jediném souboru public/data.json. Žádná autentizace, žádné parametry — obyčejný GET:

const res  = await fetch('public/data.json');   // nebo absolutní URL tohoto webu
const data = await res.json();

// Platí nějaká výstraha ČHMÚ?
if (data.alerts.summary.has_warning) {
  console.log('Nejvyšší stupeň:', data.alerts.summary.max_color); // yellow | orange | red
}

// Aktuální teplota ze stanice
const st = data.stations.stations.find(s => s.id === '11710');
console.log('Teplota:', st?.elements?.T?.value, '°C');

Totéž v PHP:

$data = json_decode(file_get_contents('https://vas-web.cz/chmi/public/data.json'), true);
$max  = $data['alerts']['summary']['max_color'] ?? 'green';

Přehled

Endpointy

Statické soubory generované parserem. Všechny sdílejí blok _meta (čas vygenerování, atribuce, odkazy). Menší soubory používej, když nepotřebuješ všechno.

SouborObsahTypická velikost
public/data.jsonVše v jednom: výstrahy + stanice + radar + katalogdesítky kB
public/alerts.jsonVýstrahy ČHMÚ (CAP): souhrn a jednotlivé událostijednotky kB
public/stations.jsonAktuální 10min měření vybraných stanic + seznam všech dostupnýchdesítky kB
public/radar.jsonOdkaz na nejnovější radarový kompozit (obrázky se nezrcadlí)jednotky kB
public/catalog.jsonNejnovější soubory dalších sad ČHMÚ (satelit, sondáž, hydrologie…)jednotky kB
public/status.jsonZdraví posledního běhu: trvání, počet requestů, chyby modulů< 1 kB

public/alerts.json

Výstrahy (CAP)

Parser vezme nejnovější CAP XML z meteorology/weather/alerts/cap/, vyfiltruje českou jazykovou verzi, vyřadí expirované události a sloučí duplicity pro různé oblasti. Pro rychlé rozhodnutí („mám zobrazit varování?“) slouží blok summary:

{
  "alerts": {
    "status": "ok",
    "source_file": "alert_cap_50_030827.xml",
    "summary": {
      "total_events": 2,
      "warnings_active": 1,
      "has_warning": true,
      "max_color": "yellow",
      "by_color": { "yellow": 1, "green": 1 }
    },
    "events": [
      {
        "event": "Silné bouřky",
        "severity": "Moderate",
        "color": "yellow",
        "awareness_type": "Thunderstorm",
        "onset":   "2026-07-03T12:00:00+02:00",
        "expires": "2026-07-03T22:00:00+02:00",
        "headline": "Výstraha na silné bouřky",
        "description": "…",
        "instruction": "…",
        "areas": [ { "name": "Olomoucký kraj", "codes": ["7107", "7101"] } ]
      }
    ]
  }
}

Pole události

PoleVýznam
eventNázev jevu (česky, dle ČHMÚ)
colorStupeň výstrahy: green < yellow < orange < red
severityCAP závažnost: Minor / Moderate / Severe / Extreme
awareness_typeTyp jevu dle Meteoalarm (např. Thunderstorm, Wind, Rain)
urgency, certaintyNaléhavost a jistota dle CAP 1.2
onset, expiresZačátek a konec platnosti (ISO 8601 s časovou zónou)
headline, description, instructionTitulek, popis a doporučené chování — texty ČHMÚ
areas[].nameNázev zasažené oblasti
areas[].codesKódy území (CISORP — obce s rozšířenou působností)

Barvy stupňů

BarvaVýznam
greenBez výstrahy / nízký stupeň nebezpečí
yellowPotenciálně nebezpečné jevy — sledovat vývoj
orangeNebezpečné jevy — omezit rizikové aktivity
redExtrémně nebezpečné jevy — řídit se pokyny

Když je zdrojový CAP soubor stejný jako při minulém běhu, parser znovu použije poslední výsledek a označí ho "from_cache": true. Obsahově jde o tatáž platná data.

public/stations.json

Staniční měření

Z 10minutových dat v meteorology/climate/now/data/ parser vytáhne pro každou nakonfigurovanou stanici poslední známou hodnotu každého měřeného prvku:

{
  "stations": {
    "status": "ok",
    "stations": [
      {
        "id": "11710",
        "name": "Prostějov",
        "status": "ok",
        "observed_latest": "2026-07-03T13:50:00Z",
        "elements": {
          "T": { "value": 27.4, "dt": "2026-07-03T13:50:00Z" },
          "H": { "value": 41.0, "dt": "2026-07-03T13:50:00Z" },
          "F": { "value": 3.2,  "dt": "2026-07-03T13:50:00Z" }
        }
      }
    ],
    "element_legend": { "T": { "name": "Teplota vzduchu ve 2 m", "unit": "°C" } },
    "available_count": 200,
    "available": [ { "id": "11406", "latest_date": "20260703", "url": "…" } ]
  }
}
  • elements.KÓD.value — hodnota, elements.KÓD.dt — čas měření (typicky UTC).
  • available — všechny stanice nalezené v indexu ČHMÚ; podle toho se rozšiřuje konfigurace parseru.
  • Krátce po půlnoci se chybějící prvky doplňují ze včerejšího souboru, aby výstup nebyl děravý.

Legenda prvků

KódPrvekJednotka
TTeplota vzduchu ve 2 m°C
TDTeplota rosného bodu°C
TMI / TMAMinimální / maximální teplota°C
TPMPřízemní minimální teplota (5 cm)°C
HRelativní vlhkost%
FPrůměrná rychlost větrum/s
FMAXMaximální náraz větrum/s
DSměr větru°
PTlak vzduchu (staniční)hPa
SRA / SRA10MÚhrn srážek / úhrn za 10 minutmm
SNO / SCENový sníh / celková sněhová pokrývkacm
SSVDoba slunečního svituh

Legenda je orientační. Závazný popis prvků a jednotek je v dokumentu Klimatologicka_data_popis.pdf na opendata.chmi.cz/meteorology/climate/. Neznámé kódy prvků parser propouští beze změny, nic se neztrácí.

public/radar.json · public/catalog.json

Radar a katalog datových sad

public/radar.json obsahuje odkaz na nejnovější radarový kompozit (latest_image) a přehled produktových adresářů. Samotné obrázky se nezrcadlí — odkazuje se přímo na server ČHMÚ.

{
  "radar": {
    "status": "ok",
    "latest_image": {
      "name": "…png",
      "url": "https://opendata.chmi.cz/meteorology/weather/radar/composite/…",
      "modified": "2026-07-03T12:55:00+00:00"
    },
    "products": [ { "path": "…", "files": 288, "latest": { … } } ]
  }
}

public/catalog.json mapuje další sady (satelit, aerologická sondáž, předpovědi, větrné profily, hydrologie, kvalita ovzduší): pro každý adresář uvádí počet souborů a nejnovější soubor s přímou URL. Obnovuje se jednou za hodinu, mezitím se vrací s "from_cache": true.

Kadence

Aktualizace a cache

CoJak často
Běh parseru (cron)každých 5 minut
Staniční 10min data u ČHMÚzhruba každých 10 minut
Výstrahy CAPpodle vydání ČHMÚ (nový soubor = nové zpracování)
Radarový kompozitřádově jednotky minut
Katalog ostatních sad1× za hodinu

Doporučený interval dotazování klientů: 300 s. Častější dotazy novější data nepřinesou — respektuj hlavičku Cache-Control. Čas vygenerování je vždy v _meta.generated_at.

Právní rámec

Licence a atribuce

Zdrojová data poskytuje Český hydrometeorologický ústav jako otevřená data pod licencí CC BY 4.0. Užití je zdarma včetně komerčního, ale atribuce je povinná. Do aplikace vlož například:

Data: Český hydrometeorologický ústav (ČHMÚ), opendata.chmi.cz, licence CC BY 4.0
  • Národní databáze hydrometeorologických údajů: opendata.chmi.cz
  • Dokumentace výstrah: Dokumentace_CAP.pdf v meteorology/weather/alerts/metadata/
  • Popis klimatologických dat: Klimatologicka_data_popis.pdf v meteorology/climate/

Tento web není produktem ani službou ČHMÚ. Jde o nezávislé zpracování otevřených dat; provozovatel neručí za úplnost a včasnost. Pro rozhodování v krizových situacích používej oficiální kanály ČHMÚ.

Strojové čtení

Pro AI agenty

Pokud tuhle stránku čte jazykový model nebo automat, tady je zkratka:

  • Všechna data jsou v public/data.json relativně vůči této stránce. Struktura odpovídá ukázkám výše.
  • Data se generují cca každých 300 s — nedotazuj se častěji, výsledek se nezmění.
  • Při citování hodnot vždy uveď atribuci: „Data: ČHMÚ, opendata.chmi.cz, CC BY 4.0“.
  • Stupně výstrah řaď green < yellow < orange < red; pro rozhodnutí stačí alerts.summary.
  • Hodnoty měření: stations.stations[].elements.KÓD.value, čas v .dt.
  • Stav služby ověříš v public/status.json (ok, errors, _meta.generated_at).

Strojově čitelný manifest je vložený přímo v této stránce jako <script type="application/json" id="api-manifest">:

{
  "name": "CHMI Data Parser",
  "base_url": "./public/",
  "refresh_interval_sec": 300,
  "endpoints": {
    "data": "data.json", "alerts": "alerts.json", "stations": "stations.json",
    "radar": "radar.json", "catalog": "catalog.json", "status": "status.json"
  },
  "attribution": {
    "required": true,
    "text": "Data: Český hydrometeorologický ústav (ČHMÚ), opendata.chmi.cz, licence CC BY 4.0",
    "license": "CC-BY-4.0"
  },
  "source": "https://opendata.chmi.cz"
}

Pro provozovatele

Provoz a nasazení

Struktura

chmi.skerik.me/          ← DocumentRoot webu
├── index.html           ← tato stránka (dokumentace, servíruje se z kořene)
├── chmi-parser.php      ← skript spouštěný cronem (přes web vrací 403, viz self-guard v kódu)
├── runtime/             ← stav, log, lock (vytvoří se samo; nikdy nevystavovat)
└── public/              ← sem parser zapisuje výstupy, dostupné jako /public/*.json
    ├── .htaccess        ← CORS pro Apache
    └── *.json           ← data.json, alerts.json, stations.json, radar.json, catalog.json, status.json

Skript má vlastní ochranu — při vyvolání přes web (ne CLI) vrací HTTP 403 (viz PHP_SAPI !== 'cli' na začátku chmi-parser.php). I tak jej zbytečně nevystavuj: kde to jde, drž jej mimo DocumentRoot nebo přidej pravidlo webserveru blokující přístup k němu.

Cron

*/5 * * * * /usr/bin/php /cesta/k/chmi-data-parser/chmi-parser.php run >> /cesta/k/chmi-data-parser/runtime/cron.log 2>&1

CORS na nginx (CloudPanel → Vhost editor)

location ~* \.json$ {
    add_header Access-Control-Allow-Origin "*" always;
    add_header Cache-Control "public, max-age=120" always;
}

Užitečné příkazy

PříkazÚčel
php chmi-parser.php run -vRuční běh s podrobným výpisem
php chmi-parser.php stationsSeznam všech stanic dostupných u ČHMÚ (WMO ID)
php chmi-parser.php inspect <url>Vypíše strukturu libovolného JSON/XML souboru ČHMÚ
php chmi-parser.php selftestOtestuje parsovací funkce bez přístupu k síti

Konfigurace je na začátku chmi-parser.php: doplň kontaktní e-mail do user_agent, seznam stanic do stations a případně public_base_url pro absolutní odkazy.