Files
ems/docs/04-modules/energy-flows.md
Dusan Vojacek ed88ef8910
Some checks failed
CI and deploy / migration-check (push) Failing after 11s
CI and deploy / deploy (push) Has been skipped
oprava import/export kwh
2026-05-01 14:58:29 +02:00

44 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Analýza energetických toků (Fáze 2)
## Účel
Stránka **Toky** (`/energy-flows`) zobrazuje **modelované** směrové toky energie mezi FVE, sítí, baterií a spotřebou za den / měsíc. Nejedná se o přímé měření větví u střídače, ale o **prioritní alokaci** z minutové telemetrie.
## Výpočet
Funkce `ems.fn_fill_audit_interval` pro každý 15min slot:
1. Načte minutové řádky `ems.telemetry_inverter` (`pv_power_w`, `load_power_w`, `grid_power_w`, `battery_power_w`).
2. Pro každou minutu aplikuje alokaci (pořadí): PV → spotřeba → nabíjení baterie → export; pak vybití baterie → spotřeba / export; síť → zbytek spotřeby a nabíjení.
3. Součet výkonů × 1/60 h = Wh za slot; výsledek v sloupcích `flow_*_wh` v `ems.audit_interval`.
**Import / export ze sítě (`actual_grid_import_wh` / `actual_grid_export_wh`):** nejprve se bere delta z Deye registrů `grid_import_total_wh` / `grid_export_total_wh` (pokud je k dispozici), jinak součet kladných resp. záporných dílů z `grid_power_w` po minutách. Okamžitě poté `fn_fill_audit_interval` sjednotí hodnoty funkcemi `ems.fn_audit_grid_import_wh_for_economics` / `fn_audit_grid_export_wh_for_economics`: při **jednosměrném** toku v slotu (typicky jen import nebo jen export podle uložených Wh) vezme **maximum** z čítače a z odhadu `max(0, P_grid) × ¼ h` resp. `|min(0, P_grid)| × ¼ h` z průměrného `grid_power_w` — u některých instalací lifetime čítač Deye **rostl pomaleji** než integrál z výkonu, takže bez této úpravy ekonomika a záložka **Ekonomika** podhodnocovaly kWh. Při **obousměrném** toku ve stejném 15min slotu (obě strany > 0 Wh) se uložený split z čítače/per-minute **nemění**.
Sloupce: `flow_pv_to_load_wh`, `flow_pv_to_batt_wh`, `flow_pv_to_grid_wh`, `flow_batt_to_load_wh`, `flow_batt_to_grid_wh`, `flow_grid_to_load_wh`, `flow_grid_to_batt_wh`.
Základní 6 Wh veličin (import/export, PV, baterie, load) zůstává ve Fázi 1; toky jsou nadstavba.
## API
- `GET /api/v1/sites/{site_id}/energy-flows/daily?month=YYYY-MM` — kromě toků vrací denní součty **financí sítě**: `grid_import_cashflow_czk`, `grid_export_revenue_czk` (jako `vw_economics_interval`, join na `vw_site_effective_price`) a nákladový rozpad importu `grid_to_load_cost_czk` / `grid_to_batt_cost_czk` (efektivní nákupní cena × modelovaný tok).
- `GET /api/v1/sites/{site_id}/energy-flows/daily/{day}/intervals`
## SQL
- View `ems.vw_energy_flows_daily` denní agregace z `audit_interval`.
- PostgREST role `ems_anon`: `GRANT SELECT` na `vw_energy_flows_daily` (viz repeatable grants).
## UI
- Sankey (`@nivo/sankey`) součet toků za **celý měsíc** nebo za **jeden vybraný den** (rozbalovací pole „Graf a karty“; klik na název dne v tabulce také přepne den). Síť je ve vizualizaci rozdělena na **Import ze sítě** a **Export do sítě** (jinak by vznikl cyklus síť↔baterie a knihovna hlásí „circular link“).
- Pět perspektivních karet: FVE, síť, baterie, spotřeba a **financí** (nákup/prodej v Kč, průměrná cena Kč/kWh, rozpad nákladů importu do spotřeby vs. baterie; stejný měsíční/denní rozsah jako Sankey).
- Tabulka dnů s rozbalením na 15min intervaly.
## Backfill
Po nasazení migrace V042 a opakovatelné rutiny:
```sql
SELECT ems.fn_fill_audit_range(<site_id>, '<od>'::timestamptz, now());
```