Files
ems/docs/04-modules/consumption.md
Dusan Vojacek 8b4af663d8 Initial commit
Made-with: Cursor
2026-03-20 13:27:44 +01:00

6.0 KiB
Raw Blame History

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_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

-- 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