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.
| Soubor | Obsah | Typická velikost |
|---|---|---|
public/data.json | Vše v jednom: výstrahy + stanice + radar + katalog | desítky kB |
public/alerts.json | Výstrahy ČHMÚ (CAP): souhrn a jednotlivé události | jednotky kB |
public/stations.json | Aktuální 10min měření vybraných stanic + seznam všech dostupných | desítky kB |
public/radar.json | Odkaz na nejnovější radarový kompozit (obrázky se nezrcadlí) | jednotky kB |
public/catalog.json | Nejnovější soubory dalších sad ČHMÚ (satelit, sondáž, hydrologie…) | jednotky kB |
public/status.json | Zdraví 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
| Pole | Význam |
|---|---|
event | Název jevu (česky, dle ČHMÚ) |
color | Stupeň výstrahy: green < yellow < orange < red |
severity | CAP závažnost: Minor / Moderate / Severe / Extreme |
awareness_type | Typ jevu dle Meteoalarm (např. Thunderstorm, Wind, Rain) |
urgency, certainty | Naléhavost a jistota dle CAP 1.2 |
onset, expires | Začátek a konec platnosti (ISO 8601 s časovou zónou) |
headline, description, instruction | Titulek, popis a doporučené chování — texty ČHMÚ |
areas[].name | Název zasažené oblasti |
areas[].codes | Kódy území (CISORP — obce s rozšířenou působností) |
Barvy stupňů
| Barva | Význam |
|---|---|
green | Bez výstrahy / nízký stupeň nebezpečí |
yellow | Potenciálně nebezpečné jevy — sledovat vývoj |
orange | Nebezpečné jevy — omezit rizikové aktivity |
red | Extré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ód | Prvek | Jednotka |
|---|---|---|
T | Teplota vzduchu ve 2 m | °C |
TD | Teplota rosného bodu | °C |
TMI / TMA | Minimální / maximální teplota | °C |
TPM | Přízemní minimální teplota (5 cm) | °C |
H | Relativní vlhkost | % |
F | Průměrná rychlost větru | m/s |
FMAX | Maximální náraz větru | m/s |
D | Směr větru | ° |
P | Tlak vzduchu (staniční) | hPa |
SRA / SRA10M | Úhrn srážek / úhrn za 10 minut | mm |
SNO / SCE | Nový sníh / celková sněhová pokrývka | cm |
SSV | Doba slunečního svitu | h |
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
| Co | Jak často |
|---|---|
| Běh parseru (cron) | každých 5 minut |
| Staniční 10min data u ČHMÚ | zhruba každých 10 minut |
| Výstrahy CAP | podle vydání ČHMÚ (nový soubor = nové zpracování) |
| Radarový kompozit | řádově jednotky minut |
| Katalog ostatních sad | 1× 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.jsonrelativně 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 -v | Ruční běh s podrobným výpisem |
php chmi-parser.php stations | Seznam 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 selftest | Otestuje 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.