fix OTE fformat
This commit is contained in:
@@ -49,14 +49,36 @@ BEGIN
|
|||||||
-- starší / jiná odpověď = jen 24 hodinových bodů s tooltip "Cena".
|
-- starší / jiná odpověď = jen 24 hodinových bodů s tooltip "Cena".
|
||||||
SELECT t.dl INTO v_dl
|
SELECT t.dl INTO v_dl
|
||||||
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
|
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
|
||||||
WHERE dl ->> 'tooltip' = 'flash_chart_01_y_15m_price_tooltip'
|
WHERE (
|
||||||
|
dl ->> 'tooltip' in (
|
||||||
|
'flash_chart_01_y_15m_price_tooltip', -- legacy OTE
|
||||||
|
'15min cena (EUR/MWh)', -- current OTE (2026-04+)
|
||||||
|
'15 min cena (EUR/MWh)'
|
||||||
|
)
|
||||||
|
or (
|
||||||
|
lower(dl ->> 'tooltip') like '%15min%'
|
||||||
|
and lower(dl ->> 'tooltip') like '%cena%'
|
||||||
|
and lower(dl ->> 'tooltip') like '%mwh%'
|
||||||
|
)
|
||||||
|
)
|
||||||
AND jsonb_array_length(dl -> 'point') >= 90
|
AND jsonb_array_length(dl -> 'point') >= 90
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
|
|
||||||
IF v_dl IS NULL THEN
|
IF v_dl IS NULL THEN
|
||||||
SELECT t.dl INTO v_dl
|
SELECT t.dl INTO v_dl
|
||||||
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
|
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
|
||||||
WHERE dl ->> 'tooltip' = 'flash_chart_01_y_60m_price_tooltip'
|
WHERE (
|
||||||
|
dl ->> 'tooltip' in (
|
||||||
|
'flash_chart_01_y_60m_price_tooltip', -- legacy OTE
|
||||||
|
'60min cena (EUR/MWh)', -- current OTE (2026-04+)
|
||||||
|
'60 min cena (EUR/MWh)'
|
||||||
|
)
|
||||||
|
or (
|
||||||
|
lower(dl ->> 'tooltip') like '%60min%'
|
||||||
|
and lower(dl ->> 'tooltip') like '%cena%'
|
||||||
|
and lower(dl ->> 'tooltip') like '%mwh%'
|
||||||
|
)
|
||||||
|
)
|
||||||
AND jsonb_array_length(dl -> 'point') >= 90
|
AND jsonb_array_length(dl -> 'point') >= 90
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
END IF;
|
END IF;
|
||||||
@@ -64,7 +86,7 @@ BEGIN
|
|||||||
IF v_dl IS NULL THEN
|
IF v_dl IS NULL THEN
|
||||||
SELECT t.dl INTO v_dl
|
SELECT t.dl INTO v_dl
|
||||||
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
|
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
|
||||||
WHERE dl ->> 'tooltip' = 'Cena'
|
WHERE dl ->> 'tooltip' in ('Cena', '60min cena (EUR/MWh)', '60 min cena (EUR/MWh)')
|
||||||
AND jsonb_array_length(dl -> 'point') >= 90
|
AND jsonb_array_length(dl -> 'point') >= 90
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
END IF;
|
END IF;
|
||||||
@@ -72,7 +94,7 @@ BEGIN
|
|||||||
IF v_dl IS NULL THEN
|
IF v_dl IS NULL THEN
|
||||||
SELECT t.dl INTO v_dl
|
SELECT t.dl INTO v_dl
|
||||||
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
|
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') AS t(dl)
|
||||||
WHERE dl ->> 'tooltip' = 'Cena'
|
WHERE dl ->> 'tooltip' in ('Cena', '60min cena (EUR/MWh)', '60 min cena (EUR/MWh)')
|
||||||
AND jsonb_array_length(dl -> 'point') BETWEEN 2 AND 28
|
AND jsonb_array_length(dl -> 'point') BETWEEN 2 AND 28
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
END IF;
|
END IF;
|
||||||
@@ -87,7 +109,7 @@ BEGIN
|
|||||||
|
|
||||||
IF v_dl IS NULL THEN
|
IF v_dl IS NULL THEN
|
||||||
RAISE EXCEPTION
|
RAISE EXCEPTION
|
||||||
'OTE price dataLine not found (očekáváno 15min flash_* nebo hodinová Cena); '
|
'OTE price dataLine not found (očekáváno 15min flash_* / 15min cena nebo hodinová Cena); '
|
||||||
'dostupné tooltips: %',
|
'dostupné tooltips: %',
|
||||||
(SELECT jsonb_agg(dl ->> 'tooltip' ORDER BY dl ->> 'tooltip')
|
(SELECT jsonb_agg(dl ->> 'tooltip' ORDER BY dl ->> 'tooltip')
|
||||||
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') dl);
|
FROM jsonb_array_elements(in_payload #> '{data,dataLine}') dl);
|
||||||
@@ -153,7 +175,7 @@ $$;
|
|||||||
COMMENT ON FUNCTION ems.fn_ote_parse_15m_price_json(jsonb, numeric) IS
|
COMMENT ON FUNCTION ems.fn_ote_parse_15m_price_json(jsonb, numeric) IS
|
||||||
'Parsuje raw JSON z OTE @@chart-data?time_resolution=PT15M.
|
'Parsuje raw JSON z OTE @@chart-data?time_resolution=PT15M.
|
||||||
Datum z graph.title (DD.MM.YYYY). Sloty: kotva půlnoci Europe/Prague jako timestamptz + násobky 15 min (bez DST duplicit).
|
Datum z graph.title (DD.MM.YYYY). Sloty: kotva půlnoci Europe/Prague jako timestamptz + násobky 15 min (bez DST duplicit).
|
||||||
Výběr série: flash_15m ≥90, flash_60m ≥90, Cena ≥90, Cena 2–28 h, flash_15m 2–28 h.
|
Výběr série: 15min tooltip (flash_* nebo "15min cena…") ≥90, 60min tooltip (flash_* nebo "60min cena…") ≥90, Cena ≥90, Cena 2–28 h, 15min tooltip 2–28 h.
|
||||||
EUR/MWh → Kč/kWh. Typicky 96 řádků, 92 při zkráceném dni (letní čas).
|
EUR/MWh → Kč/kWh. Typicky 96 řádků, 92 při zkráceném dni (letní čas).
|
||||||
Testování přímo v DB:
|
Testování přímo v DB:
|
||||||
SELECT * FROM ems.fn_ote_parse_15m_price_json(pg_read_file(''/tmp/ote.json'')::jsonb, 25.0) LIMIT 5;';
|
SELECT * FROM ems.fn_ote_parse_15m_price_json(pg_read_file(''/tmp/ote.json'')::jsonb, 25.0) LIMIT 5;';
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ OTE CZ publikuje denní ceny zpravidla **den předem (D-1)** okolo 13:00–14:00
|
|||||||
- Přepočet do `buy_raw_price_czk_kwh`: EUR/MWh → `× EUR_CZK / 1000`; CZK/MWh → `/ 1000`; CZK/kWh beze změny.
|
- Přepočet do `buy_raw_price_czk_kwh`: EUR/MWh → `× EUR_CZK / 1000`; CZK/MWh → `/ 1000`; CZK/kWh beze změny.
|
||||||
- Časové razítko slotu při importu: závisí na volbě dne; scheduler a globální import používají **Europe/Prague**. Volitelný parametr `site_id` v `import_ote_prices` umožní pro manuální volání bez explicitního data použít `site.timezone` místo Prahy.
|
- Časové razítko slotu při importu: závisí na volbě dne; scheduler a globální import používají **Europe/Prague**. Volitelný parametr `site_id` v `import_ote_prices` umožní pro manuální volání bez explicitního data použít `site.timezone` místo Prahy.
|
||||||
|
|
||||||
|
**Poznámka k výběru série (tooltipy):** OTE v čase mění názvy `dataLine[].tooltip`. Import v DB (`ems.fn_ote_parse_15m_price_json`) umí jak legacy tooltipy typu `flash_chart_01_y_15m_price_tooltip`, tak i novější „lidské“ názvy jako `15min cena (EUR/MWh)` / `60min cena (EUR/MWh)`.
|
||||||
|
|
||||||
### Legacy / alternativa
|
### Legacy / alternativa
|
||||||
|
|
||||||
- **OTE pubapi:** `https://www.ote-cr.cz/pubapi/v1/market-data/dam?...` (hodinová data – v projektu už není primární)
|
- **OTE pubapi:** `https://www.ote-cr.cz/pubapi/v1/market-data/dam?...` (hodinová data – v projektu už není primární)
|
||||||
|
|||||||
Reference in New Issue
Block a user