HU BESS
This commit is contained in:
181
db/migration/V080__seed_site_hulin_bess.sql
Normal file
181
db/migration/V080__seed_site_hulin_bess.sql
Normal file
@@ -0,0 +1,181 @@
|
||||
-- =============================================================
|
||||
-- V080__seed_site_hulin_bess.sql
|
||||
-- Idempotentní seed BESS lokality Hulín, Krátká 780 (bez FVE, nízká vlastní spotřeba).
|
||||
-- Střídač Deye 2×20 kW (AC max 40 kW), baterie 4×32 kWh (128 kWh usable).
|
||||
-- BMS z/do baterie max 2×350 A (~36 kW); jistič import ~63 A (~43 kW); export max 42 kW.
|
||||
-- Viz docs/new-site-setup-template.md (sekce BESS bez FVE).
|
||||
-- =============================================================
|
||||
|
||||
do $$
|
||||
declare
|
||||
v_site_code text := 'hulin-bess';
|
||||
|
||||
-- Modbus host doplnit před zapnutím endpointu (enabled = true).
|
||||
v_host_deye text := '0.0.0.0';
|
||||
v_port_deye int := 502;
|
||||
|
||||
v_site_id int;
|
||||
v_ep_deye int;
|
||||
v_inv_main int;
|
||||
begin
|
||||
insert into ems.site (code, name, timezone, latitude, longitude, active, notes)
|
||||
values (
|
||||
v_site_code,
|
||||
'Hulín, Krátká 780 (BESS)',
|
||||
'Europe/Prague',
|
||||
49.312314,
|
||||
17.474594,
|
||||
true,
|
||||
'Adresa: Krátká 780, 768 24 Hulín. BESS – ukládání energie bez FVE, bez významné vlastní spotřeby. '
|
||||
'Střídač Deye 2×20 kW; baterie 4×32 kWh; BMS max ~36 kW z/do baterie; jistič ~43 kW import, export 42 kW. '
|
||||
'Souřadnice pro případnou budoucí FVE / počasí. Modbus endpoint zatím vypnutý – doplnit IP a enabled.'
|
||||
)
|
||||
on conflict (code) do update set
|
||||
name = excluded.name,
|
||||
timezone = excluded.timezone,
|
||||
latitude = excluded.latitude,
|
||||
longitude = excluded.longitude,
|
||||
active = excluded.active,
|
||||
notes = excluded.notes
|
||||
returning id into v_site_id;
|
||||
|
||||
select se.id into v_ep_deye
|
||||
from ems.site_endpoint se
|
||||
where se.site_id = v_site_id
|
||||
and se.endpoint_type = 'modbus_tcp'
|
||||
and se.notes ilike '%Deye%'
|
||||
order by se.id
|
||||
limit 1;
|
||||
|
||||
if v_ep_deye is null then
|
||||
insert into ems.site_endpoint (
|
||||
site_id, endpoint_type, host, port, protocol, unit_id, enabled, notes
|
||||
)
|
||||
values (
|
||||
v_site_id, 'modbus_tcp', v_host_deye, v_port_deye, 'modbus_tcp', 1, false,
|
||||
'Deye 2×20 kW – Modbus TCP (Waveshare). Host/IP doplnit před enabled = true.'
|
||||
)
|
||||
returning id into v_ep_deye;
|
||||
end if;
|
||||
|
||||
insert into ems.site_grid_connection (
|
||||
site_id,
|
||||
max_import_power_w,
|
||||
max_export_power_w,
|
||||
no_export,
|
||||
reserved_capacity_w,
|
||||
block_export_on_negative_sell,
|
||||
notes
|
||||
)
|
||||
values (
|
||||
v_site_id,
|
||||
43000,
|
||||
42000,
|
||||
false,
|
||||
0,
|
||||
true,
|
||||
'Hlavní jistič ~63 A → import cca 43 kW. Export do DS max 42 kW. '
|
||||
'BESS bez FVE – block_export_on_negative_sell pro zápornou výkupní cenu v LP.'
|
||||
)
|
||||
on conflict (site_id) do update set
|
||||
max_import_power_w = excluded.max_import_power_w,
|
||||
max_export_power_w = excluded.max_export_power_w,
|
||||
no_export = excluded.no_export,
|
||||
reserved_capacity_w = excluded.reserved_capacity_w,
|
||||
block_export_on_negative_sell = excluded.block_export_on_negative_sell,
|
||||
notes = excluded.notes;
|
||||
|
||||
if not exists (
|
||||
select 1 from ems.site_market_config smc
|
||||
where smc.site_id = v_site_id and smc.valid_to is null
|
||||
) then
|
||||
insert into ems.site_market_config (
|
||||
site_id,
|
||||
purchase_pricing_mode, sale_pricing_mode,
|
||||
buy_margin_fixed_czk, buy_margin_percent,
|
||||
sell_margin_fixed_czk, sell_margin_percent,
|
||||
currency, valid_from, valid_to, notes,
|
||||
tariff_id, hdo_code_id, system_services_czk_kwh, ote_fee_czk_kwh
|
||||
)
|
||||
values (
|
||||
v_site_id,
|
||||
'spot', 'spot',
|
||||
0.050, 0,
|
||||
-0.020, 0,
|
||||
'CZK', now(), null,
|
||||
'Výchozí spot nákup/prodej (marže jako home-01). Upřesnit dle smlouvy provozovatele BESS.',
|
||||
null, null, 0, 0
|
||||
);
|
||||
end if;
|
||||
|
||||
insert into ems.site_operating_mode (site_id, mode_code, activated_by, notes)
|
||||
values (
|
||||
v_site_id,
|
||||
'MANUAL',
|
||||
'migration:V080_seed_site_hulin_bess',
|
||||
'Start MANUAL (bez zápisů na Deye). Po ověření Modbus a SoC přepnout na AUTO.'
|
||||
)
|
||||
on conflict (site_id) do nothing;
|
||||
|
||||
select ai.id into v_inv_main
|
||||
from ems.asset_inverter ai
|
||||
where ai.site_id = v_site_id and ai.code = 'deye-main'
|
||||
limit 1;
|
||||
|
||||
if v_inv_main is null then
|
||||
insert into ems.asset_inverter (
|
||||
site_id, code, manufacturer, model, endpoint_id,
|
||||
max_charge_power_w, max_discharge_power_w, max_export_power_w,
|
||||
max_ac_output_w, max_dc_input_w, max_battery_charge_w, max_battery_discharge_w,
|
||||
gen_port_max_power_w,
|
||||
deye_register_max_charge_a, deye_register_max_discharge_a,
|
||||
deye_zero_export_mode,
|
||||
controllable, active, notes
|
||||
)
|
||||
values (
|
||||
v_site_id,
|
||||
'deye-main',
|
||||
'Deye',
|
||||
'2× SUN-20K (40 kW AC)',
|
||||
v_ep_deye,
|
||||
36000, 36000, 42000,
|
||||
40000, 0, 36000, 36000,
|
||||
null,
|
||||
350, 350,
|
||||
2,
|
||||
true, true,
|
||||
'Hybrid 2×20 kW. BMS limit z/do baterie 2×350 A (~36 kW). AC/střídač max 40 kW. '
|
||||
'Reg 108/109 cap 350 A. deye_zero_export_mode=2 (CT na odběrném místě) – ověřit po instalaci.'
|
||||
)
|
||||
returning id into v_inv_main;
|
||||
end if;
|
||||
|
||||
if not exists (
|
||||
select 1 from ems.asset_battery ab
|
||||
where ab.site_id = v_site_id and ab.code = 'bat-main'
|
||||
) then
|
||||
insert into ems.asset_battery (
|
||||
site_id, inverter_id, code,
|
||||
usable_capacity_wh, min_soc_percent, reserve_soc_percent, max_soc_percent,
|
||||
charge_efficiency, discharge_efficiency, degradation_cost_czk_kwh,
|
||||
max_charge_c_rate, max_discharge_c_rate, bms_max_charge_w, bms_max_discharge_w,
|
||||
planner_max_soc_percent,
|
||||
charge_slot_buffer, discharge_slot_buffer
|
||||
)
|
||||
values (
|
||||
v_site_id, v_inv_main, 'bat-main',
|
||||
128000,
|
||||
10, 10, 95,
|
||||
0.95, 0.95,
|
||||
0.50,
|
||||
0.5, 0.5,
|
||||
36000, 36000,
|
||||
100,
|
||||
1.3, 1.5
|
||||
);
|
||||
end if;
|
||||
|
||||
-- Žádné asset_pv_array / EV / TČ – čistý BESS arbitrážní uzel.
|
||||
|
||||
end;
|
||||
$$;
|
||||
@@ -74,6 +74,10 @@ Pro **`site.active = true`** scheduler zpracovává mimo jiné: telemetrii, denn
|
||||
- Nová data pro novou lokalitu: **nový Flyway soubor** `Vxxx__seed_site_<kód>.sql` (neupravovat už aplikované `V00x__*.sql`).
|
||||
- Repeatable SQL (`db/routines`, `db/views`) se nemění kvůli jedné nové site, pokud nepotřebuješ obecnou úpravu.
|
||||
|
||||
### BESS bez FVE (příklad v repu)
|
||||
|
||||
Lokalita **`hulin-bess`** ([`db/migration/V080__seed_site_hulin_bess.sql`](../db/migration/V080__seed_site_hulin_bess.sql)): jen `site`, grid, market, `deye-main`, `bat-main`; **bez** `asset_pv_array`, EV, TČ. `site_grid_connection.block_export_on_negative_sell = true`. Plánovač a forecast PV fungují s nulovou FVE; baseline bez `consumption_baseline_stats` používá default **500 W** ve `fn_load_planning_slots_full` (po telemetrii přepočítat `fn_update_baseline_stats` / `fn_rebuild_consumption_baseline_stats`).
|
||||
|
||||
---
|
||||
|
||||
## 8. SQL šablona (kopie do verzované Flyway migrace)
|
||||
|
||||
Reference in New Issue
Block a user