Initial commit

Made-with: Cursor
This commit is contained in:
Dusan Vojacek
2026-03-20 13:27:37 +01:00
commit 8b4af663d8
77 changed files with 13337 additions and 0 deletions

View File

@@ -0,0 +1,107 @@
# Modul: Tepelné čerpadlo (Heat Pump)
## Zařízení
**Samsung tepelné čerpadlo** s Modbus modulem pro dálkové řízení.
Komunikace: Modbus RTU → Waveshare WS-ETH → Modbus TCP.
Loxone šablona k dispozici (reference pro Modbus registry).
## Co systém řídí
- Povolení/zakázání provozu (Modbus příkaz)
- Požadovaná teplota TUV zásobníku (Modbus setpoint)
- Plánování okna provozu na základě COP a ceny elektřiny
## Co systém nečte (z Loxone šablony nebo Modbus registrů)
- Venkovní teplota čerpadla (`outdoor_temp_c`)
- Teplota zásobníku TUV (`tuv_tank_temp_c`)
- Příkon (`power_w`)
- Provozní režim (`operating_mode`)
- Alarm kód (`alarm_code`)
- Stav odmrazování (`defrost_active`)
---
## Logika řízení
### Prioritní pravidla (v pořadí)
1. **Override blokování** (`site_override.override_type = 'block_heat_pump'`) → TČ se nespouští
2. **Nouzový ohřev** teplota zásobníku pod `tuv_min_temp_c` → spustit bez ohledu na cenu
3. **Zásobník plný** teplota nad `tuv_max_temp_c` → neohřívat
4. **Ekonomické rozhodnutí** spustit pokud cena tepla ≤ prahová hodnota
Logika je implementována v PostgreSQL funkci `ems.fn_heat_pump_should_run()`.
### Výpočet COP
COP závisí primárně na **venkovní teplotě**:
- Vyšší venkovní teplota = lepší COP = levnější teplo
- V chladných měsících je přes poledne venkovní teplota nejvyšší → optimální čas pro ohřev TUV
```
COP(t_venkovní) ≈ COP_rated + (t_venkovní - t_reference) × 0.10
```
Funkce: `ems.fn_cop_estimate(heat_pump_id, outdoor_temp_c)`
Cena tepla = cena elektřiny / COP → funkce `ems.fn_heat_pump_cost_per_kwh_heat()`
### Denní provozní okno
Typický scénář v chladných měsících (říjenbřezen):
- Přes poledne (11:0014:00) je venkovní teplota nejvyšší → COP nejlepší
- Pokud je zároveň spot cena nízká nebo FVE přebytek → ideální okno
- TČ potřebuje cca 12 hodiny denně pro nahrání TUV zásobníku (závisí na objemu a teplotním rozdílu)
Plánovací horizont: TČ se plánuje v rámci standardního 15min plánování stejně jako ostatní flexibilní spotřebiče.
---
## Omezení kompresoru
| Parametr | Hodnota | Důvod |
|---|---|---|
| `min_run_duration_min` | 30 min | Ochrana před krátkými cykly |
| `min_stop_duration_min` | 15 min | Vyrovnání tlaku před restartem |
Plánování musí respektovat tato omezení nevytvářet plán s kratšími ON/OFF cykly.
---
## Modbus registry (doplnit z dokumentace Samsung)
> Konkrétní registry doplnit z Loxone šablony a Samsung Modbus dokumentace.
| Registr | Typ | Popis |
|---|---|---|
| TBD | Read | Venkovní teplota |
| TBD | Read | Teplota zásobníku TUV |
| TBD | Read | Příkon |
| TBD | Read | Provozní režim |
| TBD | Read | Alarm kód |
| TBD | Write | Povolení provozu (on/off) |
| TBD | Write | Požadovaná teplota TUV |
---
## Integrace s Loxone
Alternativní cesta (pokud Modbus přímý přístup není z nějakého důvodu vhodný):
- Loxone čte Modbus a vystavuje stav přes Virtual Outputs
- EMS posílá setpointy do Loxone přes HTTP Virtual Inputs
- Loxone přepisuje Modbus registry
Pro začátek doporučujeme **přímý Modbus TCP** (přes Waveshare) bez Loxone prostředníka pro řídící příkazy, Loxone nechat jako fallback.
---
## Otevřené body
- [ ] Doplnit konkrétní Modbus registry ze Samsung dokumentace / Loxone šablony
- [ ] Doplnit model Samsung a jmenovitý výkon do seed dat
- [ ] Ověřit `min_run_duration_min` a `min_stop_duration_min` z dokumentace
- [ ] Kalibrovat COP model na reálná historická data po prvních 46 týdnech provozu
- [ ] Rozhodnout: přímý Modbus TCP nebo přes Loxone jako prostředník
- [ ] Doplnit objem zásobníku TUV pro výpočet doby ohřevu