6.0 KiB
Modul: Consumption (Spotřeba)
Členění spotřeby
Systém rozlišuje dva typy spotřeby:
1. Bazální (neflexibilní) spotřeba
- Spotřeba kterou nelze odložit ani řídit
- Příklady: osvětlení, elektronika, vaření, cirkulační čerpadla
- Zdroj: měřená telemetrie ze střídače (
load_power_w- suma flexibilní spotřeby) - Použití v plánování: jako pevný vstup (musí být pokryta)
2. Flexibilní spotřeba
- Spotřeba kterou lze časově přesunout nebo regulovat
- Příklady: nabíjení EV, ohřev TUV, tepelné čerpadlo (při přetopení zásobníku)
- Zdroj: telemetrie z konkrétních zařízení (EV nabíječky, stavové vstupy Loxone)
- Použití v plánování: jako optimalizovatelná proměnná
Jak se měří celková spotřeba
Střídač Deye poskytuje přes Modbus registr load_power_w = celková okamžitá spotřeba objektu (vše za hlavním jističem na AC straně střídače).
load_power_w (Deye) = bazální_spotřeba + EV_nabíjení + TUV + ostatní flexibilní
Odvození bazální spotřeby
bazální_w = load_power_w - sum(flexibilní zařízení aktuální výkon)
V praxi:
bazální_w = load_power_w
- ev_charger_1_power_w
- ev_charger_2_power_w
- tuv_power_w (pokud je měřitelná zvlášť)
Předpoklad: TUV výkon není přímo měřen, pouze víme že je ON/OFF (přes Loxone). Pokud je ON, odečítáme
asset_flexible_device.max_power_w. Toto je zjednodušení – lze zpřesnit později podružným měřením.
Ukládání spotřeby
Real-time telemetrie
Celková spotřeba je součástí telemetry_inverter.load_power_w (1min záznamy).
EV nabíječky mají vlastní tabulku telemetry_ev_charger s přesným výkonem.
Agregovaná spotřeba pro plánování
Tabulka consumption_baseline_interval ukládá 15min průměry bazální spotřeby:
data_type = 'actual'– historická skutečnost (zpětně dopočítáno z telemetrie)data_type = 'forecast'– predikce pro plánování
Predikce bazální spotřeby
Metoda: historický průměr + denní profil
Jednoduchý model pro začátek:
def forecast_baseline_consumption(site_id: int, target_date: date):
"""
Predikce bazální spotřeby na základě průměru posledních N podobných dní.
Podobnost: stejný den v týdnu, přibližně stejná roční doba.
"""
lookback_weeks = 4
day_of_week = target_date.weekday()
# Stáhnout historické bazální hodnoty pro stejné dny v týdnu
historical = db.query("""
SELECT interval_start, power_w
FROM consumption_baseline_interval
WHERE site_id = %s
AND data_type = 'actual'
AND EXTRACT(dow FROM interval_start) = %s
AND interval_start >= %s
ORDER BY interval_start
""", site_id, day_of_week, target_date - timedelta(weeks=lookback_weeks))
# Průměr per 15min slot
profile = aggregate_by_time_of_day(historical) # 96 hodnot (15min sloty)
return profile
Flexibilní zařízení – detailní popis
EV nabíječky (Teltonika TeltoCharge 22kW)
Komunikace: Teltonika poskytuje REST API a/nebo OCPP protokol.
| Parametr | Hodnota |
|---|---|
| Max výkon | 22 000 W (třífázové) |
| Min výkon (1 fáze) | 1 380 W |
| Počet na home-01 | 2 |
| Protokol | OCPP 1.6 nebo Teltonika REST API |
Co systém řídí:
- Povolení/zakázání nabíjení (smart charging on/off)
- Omezení výkonu (charge current limit v Amperech)
- Časový plán nabíjení (nastavit okno kdy smí nabíjet)
Telemetrie (stahuje se každou minutu):
- stav konektoru (available / charging / faulted)
- aktuální výkon [W]
- kumulativní energie [kWh]
- proud [A], napětí [V]
- session ID
Plánování:
- EV se nabíjí v době levné energie nebo přebytku FVE
- Respektuje požadavek uživatele: "nabitý na X % do Y hodin"
- Pokud není požadavek nastaven → nabíjí při přebytku nebo nejlevnějším spotu
Otevřený bod: Teltonika API vs OCPP – rozhodnout při první integraci. Doporučujeme OCPP pro standardizaci.
TUV / Tepelné čerpadlo
Komunikace: přes Loxone (HTTP Virtual Input – zapnout/vypnout)
Co systém řídí:
- Povolení ohřevu (Loxone přepne výstupní relé)
- Systém pošle setpoint do Loxone, Loxone provede
Telemetrie:
- Stav ON/OFF (čteme z Loxone HTTP výstupu nebo Virtual Output stavu)
- Teplota zásobníku (pokud je čidlo v Loxone – doporučeno)
- Aktuální výkon: není přímo měřen, používáme
max_power_wzasset_flexible_device
Plánování:
- TUV se ohřívá v době přebytku FVE nebo levného spotu
- Minimální a maximální teplota zásobníku je respektována (pokud máme čidlo)
- Nouzová priorita: pokud teplota pod minimum → ohřát bez ohledu na cenu
Výpočet bazální spotřeby v auditu
-- Agregovaná skutečná bazální spotřeba za 15min interval
CREATE VIEW consumption_vw_actual_baseline AS
SELECT
t.site_id,
time_bucket('15 minutes', t.measured_at) AS interval_start,
AVG(
t.load_power_w
- COALESCE(ev1.power_w, 0)
- COALESCE(ev2.power_w, 0)
-- TUV: odečíst max_power pokud byl v daném intervalu aktivní
) AS baseline_power_w
FROM telemetry_inverter t
-- JOIN na EV telemetrii
GROUP BY t.site_id, time_bucket('15 minutes', t.measured_at);
Konfigurace (env proměnné)
CONSUMPTION_FORECAST_LOOKBACK_WEEKS=4
TELTONIKA_API_URL_1=http://192.168.x.x/api # charger 1
TELTONIKA_API_URL_2=http://192.168.x.x/api # charger 2
TELTONIKA_POLL_INTERVAL_SEC=60
TUV_DEFAULT_POWER_W=2000 # fallback pokud není měřeno
Otevřené body
- Teltonika: OCPP vs REST API – rozhodnout před implementací
- TUV teplota zásobníku: přidat čidlo do Loxone pro přesnější řízení
- Bazální spotřeba: zpřesnit odečítání TUV výkonu (ON/OFF × čas vs pevný výkon)
- Sezónní korekce predikce spotřeby (léto vs zima) – fáze 2