# 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: ```python 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_w` z `asset_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 ```sql -- 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é) ```env 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