implmemtace cuttoff genportu
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
-- Feature flag: řízení microinverter export cutoff přes Deye Modbus (GEN / AC coupling).
|
||||
-- Použito pro instalace typu BA81, kde při BLOCK_EXPORT (sell_price < 0) musíme odpojit / zakázat export z MI na GEN portu.
|
||||
|
||||
alter table ems.asset_inverter
|
||||
add column if not exists deye_gen_microinverter_cutoff_enabled boolean not null default false;
|
||||
|
||||
comment on column ems.asset_inverter.deye_gen_microinverter_cutoff_enabled is
|
||||
'Pokud true, EMS při BLOCK_EXPORT přepíná Deye reg 179 (Control board special 1) bits0–1 pro MI export cutoff na GEN portu.';
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- BA81: při BLOCK_EXPORT (sell_price < 0) je potřeba aktivovat „MI export to Grid cutoff“.
|
||||
-- EMS to řeší přes Deye reg 179 bits 0–1 (masked RMW) pouze když je tento feature flag zapnutý.
|
||||
|
||||
update ems.asset_inverter ai
|
||||
set deye_gen_microinverter_cutoff_enabled = true
|
||||
from ems.site s
|
||||
where s.id = ai.site_id
|
||||
and s.code = 'BA81'
|
||||
and ai.code = 'deye-main';
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
-- Explicitní flag pro řízení odpojení GEN portu (mikroinvertory / AC coupling) v daném slotu.
|
||||
-- Použito hlavně u BA81: při záporné výkupní ceně a očekávaném přebytku nechceme exportovat, takže solver může zvolit cut-off.
|
||||
|
||||
alter table ems.planning_interval
|
||||
add column if not exists deye_gen_cutoff_enabled boolean;
|
||||
|
||||
comment on column ems.planning_interval.deye_gen_cutoff_enabled is
|
||||
'True = v daném slotu odpojit GEN port (MI export cutoff) přes Deye reg 179 bits0–1.
|
||||
NULL = lokalita / instalace GEN cut-off nepoužívá nebo flag není relevantní.';
|
||||
|
||||
@@ -51,6 +51,7 @@ begin
|
||||
battery_setpoint_w, battery_soc_target_pct,
|
||||
grid_setpoint_w,
|
||||
deye_physical_mode,
|
||||
deye_gen_cutoff_enabled,
|
||||
ev1_setpoint_w, ev2_setpoint_w, ev1_via_bat_w, ev2_via_bat_w,
|
||||
heat_pump_enabled, heat_pump_setpoint_w,
|
||||
pv_a_curtailed_w, expected_cost_czk,
|
||||
@@ -66,6 +67,7 @@ begin
|
||||
(r.value->>'battery_soc_target_pct')::numeric,
|
||||
(r.value->>'grid_setpoint_w')::int,
|
||||
nullif(trim(r.value->>'deye_physical_mode'), ''),
|
||||
(r.value->>'deye_gen_cutoff_enabled')::boolean,
|
||||
nullif(r.value->>'ev1_setpoint_w', '')::int,
|
||||
nullif(r.value->>'ev2_setpoint_w', '')::int,
|
||||
coalesce((r.value->>'ev1_via_bat_w')::int, 0),
|
||||
@@ -89,6 +91,7 @@ begin
|
||||
battery_setpoint_w, battery_soc_target_pct,
|
||||
grid_setpoint_w,
|
||||
deye_physical_mode,
|
||||
deye_gen_cutoff_enabled,
|
||||
ev1_setpoint_w, ev2_setpoint_w, ev1_via_bat_w, ev2_via_bat_w,
|
||||
heat_pump_enabled, heat_pump_setpoint_w,
|
||||
pv_a_curtailed_w, expected_cost_czk,
|
||||
@@ -101,6 +104,7 @@ begin
|
||||
(r.value->>'battery_soc_target_pct')::numeric,
|
||||
(r.value->>'grid_setpoint_w')::int,
|
||||
nullif(trim(r.value->>'deye_physical_mode'), ''),
|
||||
(r.value->>'deye_gen_cutoff_enabled')::boolean,
|
||||
nullif(r.value->>'ev1_setpoint_w', '')::int,
|
||||
nullif(r.value->>'ev2_setpoint_w', '')::int,
|
||||
coalesce((r.value->>'ev1_via_bat_w')::int, 0),
|
||||
|
||||
@@ -102,7 +102,17 @@ begin
|
||||
|
||||
select jsonb_build_object(
|
||||
'max_import_power_w', sgc.max_import_power_w,
|
||||
'max_export_power_w', sgc.max_export_power_w
|
||||
'max_export_power_w', sgc.max_export_power_w,
|
||||
'deye_gen_microinverter_cutoff_enabled', coalesce(
|
||||
(
|
||||
select ai.deye_gen_microinverter_cutoff_enabled
|
||||
from ems.asset_inverter ai
|
||||
where ai.site_id = p_site_id
|
||||
and ai.code = 'deye-main'
|
||||
limit 1
|
||||
),
|
||||
false
|
||||
)
|
||||
)
|
||||
into v_grid
|
||||
from ems.site_grid_connection sgc
|
||||
|
||||
Reference in New Issue
Block a user