oprava import/export kwh
Some checks failed
CI and deploy / migration-check (push) Failing after 11s
CI and deploy / deploy (push) Has been skipped

This commit is contained in:
Dusan Vojacek
2026-05-01 14:58:29 +02:00
parent 91ee8a6adf
commit ed88ef8910
8 changed files with 158 additions and 40 deletions

View File

@@ -11,8 +11,10 @@ SELECT
site_id,
(date_trunc('day', interval_start AT TIME ZONE 'Europe/Prague'))::date AS day_local,
ROUND(SUM(COALESCE(actual_pv_production_wh, 0)) / 1000, 3) AS pv_production_kwh,
ROUND(SUM(COALESCE(actual_grid_import_wh, 0)) / 1000, 3) AS grid_import_kwh,
ROUND(SUM(COALESCE(actual_grid_export_wh, 0)) / 1000, 3) AS grid_export_kwh,
ROUND(SUM(ems.fn_audit_grid_import_wh_for_economics(
actual_grid_import_wh, actual_grid_export_wh, actual_grid_power_w)) / 1000, 3) AS grid_import_kwh,
ROUND(SUM(ems.fn_audit_grid_export_wh_for_economics(
actual_grid_import_wh, actual_grid_export_wh, actual_grid_power_w)) / 1000, 3) AS grid_export_kwh,
ROUND(SUM(COALESCE(actual_batt_charge_wh, 0)) / 1000, 3) AS batt_charge_kwh,
ROUND(SUM(COALESCE(actual_batt_discharge_wh, 0)) / 1000, 3) AS batt_discharge_kwh,
ROUND(SUM(COALESCE(actual_load_consumption_wh, 0)) / 1000, 3) AS load_kwh,
@@ -29,4 +31,5 @@ GROUP BY
(date_trunc('day', interval_start AT TIME ZONE 'Europe/Prague'))::date;
COMMENT ON VIEW ems.vw_energy_flows_daily IS
'Denní součty energie a modelovaných toků (prioritní alokace z fn_fill_audit_interval). kWh z Wh sloupců.';
'Denní součty energie a toků (prioritní alokace z fn_fill_audit_interval). PV/baterie/load/flow z Wh sloupců;
grid import/export kWh používají fn_audit_grid_*_wh_for_economics shodně jako audit po doplnění intervalu.';

View File

@@ -15,25 +15,43 @@ CREATE VIEW ems.vw_economics_interval AS
SELECT
ai.site_id,
ai.interval_start,
-- Wh-based kWh (per-direction, zachytí bidirectional flow)
ROUND(COALESCE(ai.actual_grid_import_wh, GREATEST(ai.actual_grid_power_w, 0)::NUMERIC / 4) / 1000, 4)
-- Wh-based kWh (per-direction; u čistého importu/exportu max čítač vs. odhad z P_grid)
ROUND(
ems.fn_audit_grid_import_wh_for_economics(
ai.actual_grid_import_wh, ai.actual_grid_export_wh, ai.actual_grid_power_w
) / 1000,
4
)
AS import_kwh,
ROUND(COALESCE(ai.actual_grid_export_wh, ABS(LEAST(ai.actual_grid_power_w, 0))::NUMERIC / 4) / 1000, 4)
ROUND(
ems.fn_audit_grid_export_wh_for_economics(
ai.actual_grid_import_wh, ai.actual_grid_export_wh, ai.actual_grid_power_w
) / 1000,
4
)
AS export_kwh,
-- Směrové cashflow: kolik Kč za import ze sítě / kolik Kč za export do sítě
ROUND(
COALESCE(ai.actual_grid_import_wh, GREATEST(ai.actual_grid_power_w, 0)::NUMERIC / 4)
ems.fn_audit_grid_import_wh_for_economics(
ai.actual_grid_import_wh, ai.actual_grid_export_wh, ai.actual_grid_power_w
)
/ 1000.0 * COALESCE(ep.effective_buy_price_czk_kwh, 0), 4
) AS grid_import_cashflow_czk,
ROUND(
COALESCE(ai.actual_grid_export_wh, ABS(LEAST(ai.actual_grid_power_w, 0))::NUMERIC / 4)
ems.fn_audit_grid_export_wh_for_economics(
ai.actual_grid_import_wh, ai.actual_grid_export_wh, ai.actual_grid_power_w
)
/ 1000.0 * COALESCE(ep.effective_sell_price_czk_kwh, 0), 4
) AS grid_export_revenue_czk,
-- Net cost (zpětná kompatibilita): import_cashflow - export_revenue
ROUND(
COALESCE(ai.actual_grid_import_wh, GREATEST(ai.actual_grid_power_w, 0)::NUMERIC / 4)
ems.fn_audit_grid_import_wh_for_economics(
ai.actual_grid_import_wh, ai.actual_grid_export_wh, ai.actual_grid_power_w
)
/ 1000.0 * COALESCE(ep.effective_buy_price_czk_kwh, 0)
- COALESCE(ai.actual_grid_export_wh, ABS(LEAST(ai.actual_grid_power_w, 0))::NUMERIC / 4)
- ems.fn_audit_grid_export_wh_for_economics(
ai.actual_grid_import_wh, ai.actual_grid_export_wh, ai.actual_grid_power_w
)
/ 1000.0 * COALESCE(ep.effective_sell_price_czk_kwh, 0), 4
) AS dynamic_cost_czk,
ai.actual_cost_czk AS stored_cost_czk,
@@ -65,9 +83,8 @@ LEFT JOIN ems.planning_interval pi
COMMENT ON VIEW ems.vw_economics_interval IS
'Dynamické ekonomické vyhodnocení per 15min slot.
import/export kWh primárně z per-direction Wh sloupců audit_interval (Deye counter / per-minute split),
fallback na průměrný výkon pro zpětnou kompatibilitu se starými daty.
grid_import_cashflow_czk / grid_export_revenue_czk = směrové cashflow podle skutečného toku energie.';
import/export kWh díky fn_audit_grid_*_wh_for_economics: primárně Wh z auditu (čítač Deye), u jednosměrného toku max s odhadem z průměrného grid_power_w (¼ h).
grid_import_cashflow_czk / grid_export_revenue_czk = směrové cashflow podle stejného Wh odhadu × efektivní cena.';
CREATE VIEW ems.vw_economics_daily AS
SELECT