new site BA81, tuyne forecast
This commit is contained in:
@@ -1009,7 +1009,7 @@ async def get_site_forecast_pv(
|
||||
rows = await conn.fetch(
|
||||
"""
|
||||
SELECT run_id, pv_array_id, interval_start, power_w,
|
||||
irradiance_wm2, temp_c, pv_array_code
|
||||
irradiance_wm2, temp_c, pv_array_code, controllable
|
||||
FROM (
|
||||
SELECT DISTINCT ON (fpi.interval_start, fpr.pv_array_id)
|
||||
fpi.run_id,
|
||||
@@ -1018,7 +1018,8 @@ async def get_site_forecast_pv(
|
||||
fpi.power_w,
|
||||
fpi.irradiance_wm2,
|
||||
fpi.temp_c,
|
||||
apa.code AS pv_array_code
|
||||
apa.code AS pv_array_code,
|
||||
apa.controllable
|
||||
FROM ems.forecast_pv_interval fpi
|
||||
JOIN ems.forecast_pv_run fpr ON fpr.id = fpi.run_id
|
||||
JOIN ems.asset_pv_array apa
|
||||
@@ -1028,20 +1029,21 @@ async def get_site_forecast_pv(
|
||||
AND fpr.status = 'ok'
|
||||
ORDER BY fpi.interval_start, fpr.pv_array_id, fpr.created_at DESC
|
||||
) latest
|
||||
ORDER BY pv_array_code, interval_start
|
||||
ORDER BY controllable DESC, pv_array_code, interval_start
|
||||
""",
|
||||
site_id,
|
||||
d,
|
||||
)
|
||||
|
||||
# pv_a = řiditelná pole (curtailment / Deye), pv_b = neřízená (GEN, …) — sloučí více orientací
|
||||
pv_a: list[dict[str, Any]] = []
|
||||
pv_b: list[dict[str, Any]] = []
|
||||
for r in rows:
|
||||
item = record_to_dict(r)
|
||||
code = item.get("pv_array_code")
|
||||
if code == "pv-a":
|
||||
item.pop("controllable", None)
|
||||
if r["controllable"]:
|
||||
pv_a.append(item)
|
||||
elif code == "pv-b":
|
||||
else:
|
||||
pv_b.append(item)
|
||||
return {"pv_a": pv_a, "pv_b": pv_b}
|
||||
|
||||
|
||||
@@ -1052,20 +1052,42 @@ async def _load_slots(site_id, from_dt, to_dt, db) -> list[PlanningSlot]:
|
||||
LEFT JOIN ems.vw_site_effective_price ep
|
||||
ON ep.site_id = $1 AND ep.interval_start = s.interval_start
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT fpi.power_w FROM ems.forecast_pv_interval fpi
|
||||
JOIN ems.forecast_pv_run fpr ON fpr.id = fpi.run_id
|
||||
JOIN ems.asset_pv_array apa ON apa.id = fpi.pv_array_id AND apa.site_id = fpr.site_id
|
||||
WHERE fpr.site_id = $1 AND apa.code = 'pv-a'
|
||||
AND fpi.interval_start = s.interval_start AND fpr.status = 'ok'
|
||||
ORDER BY fpr.created_at DESC LIMIT 1
|
||||
SELECT COALESCE(SUM(u.power_w), 0)::INT AS power_w
|
||||
FROM (
|
||||
SELECT DISTINCT ON (apa.id)
|
||||
fpi.power_w
|
||||
FROM ems.asset_pv_array apa
|
||||
JOIN ems.forecast_pv_run fpr
|
||||
ON fpr.pv_array_id = apa.id
|
||||
AND fpr.site_id = apa.site_id
|
||||
AND fpr.status = 'ok'
|
||||
JOIN ems.forecast_pv_interval fpi
|
||||
ON fpi.run_id = fpr.id
|
||||
AND fpi.pv_array_id = apa.id
|
||||
AND fpi.interval_start = s.interval_start
|
||||
WHERE apa.site_id = $1
|
||||
AND apa.controllable IS TRUE
|
||||
ORDER BY apa.id, fpr.created_at DESC
|
||||
) u
|
||||
) fpi_a ON true
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT fpi.power_w FROM ems.forecast_pv_interval fpi
|
||||
JOIN ems.forecast_pv_run fpr ON fpr.id = fpi.run_id
|
||||
JOIN ems.asset_pv_array apa ON apa.id = fpi.pv_array_id AND apa.site_id = fpr.site_id
|
||||
WHERE fpr.site_id = $1 AND apa.code = 'pv-b'
|
||||
AND fpi.interval_start = s.interval_start AND fpr.status = 'ok'
|
||||
ORDER BY fpr.created_at DESC LIMIT 1
|
||||
SELECT COALESCE(SUM(u.power_w), 0)::INT AS power_w
|
||||
FROM (
|
||||
SELECT DISTINCT ON (apa.id)
|
||||
fpi.power_w
|
||||
FROM ems.asset_pv_array apa
|
||||
JOIN ems.forecast_pv_run fpr
|
||||
ON fpr.pv_array_id = apa.id
|
||||
AND fpr.site_id = apa.site_id
|
||||
AND fpr.status = 'ok'
|
||||
JOIN ems.forecast_pv_interval fpi
|
||||
ON fpi.run_id = fpr.id
|
||||
AND fpi.pv_array_id = apa.id
|
||||
AND fpi.interval_start = s.interval_start
|
||||
WHERE apa.site_id = $1
|
||||
AND apa.controllable IS FALSE
|
||||
ORDER BY apa.id, fpr.created_at DESC
|
||||
) u
|
||||
) fpi_b ON true
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT t.status
|
||||
|
||||
Reference in New Issue
Block a user