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

264 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Loxone Integration dokumentace pro programátora
## Účel tohoto dokumentu
Popis jak nakonfigurovat Loxone Miniserver pro spolupráci s EMS platformou.
Implementaci provede Loxone programátor dle tohoto zadání.
**Klíčový princip:** Loxone je exekutor a bezpečnostní fallback.
Veškerá optimalizační logika je v EMS. Loxone:
- vykonává setpointy od EMS (v režimu AUTO)
- funguje zcela autonomně bez EMS (v ostatních režimech)
- sám detekuje výpadek EMS a přepne do bezpečného stavu
---
## 1. Virtual Inputs (EMS → Loxone)
Vytvořit jako **Virtual HTTP Input** v Loxone Config.
EMS posílá hodnoty přes HTTP GET: `/dev/sps/io/{název}/{hodnota}`
| Název VI | Typ | Rozsah | Popis |
|---|---|---|---|
| `EMS_Heartbeat` | Digital pulse | 0/1 | Minutový pulz od EMS. Základ pro watchdog. |
| `EMS_Mode` | Analog | 04 | Aktivní provozní režim (viz tabulka režimů níže). |
| `EMS_Battery_Setpoint_W` | Analog | -20000 až +20000 | Setpoint baterie ve W. Kladné = nabíjení, záporné = vybíjení. Platí jen v AUTO. |
| `EMS_Grid_Setpoint_W` | Analog | -20000 až +20000 | Setpoint sítě ve W. Kladné = import, záporné = export. Platí jen v AUTO. |
| `EMS_EV1_Power_W` | Analog | 022000 | Povolený výkon nabíječky EV č. 1 ve W. 0 = zakázat nabíjení. |
| `EMS_EV2_Power_W` | Analog | 022000 | Povolený výkon nabíječky EV č. 2 ve W. 0 = zakázat nabíjení. |
| `EMS_HeatPump_Enable` | Digital | 0/1 | Povolení provozu tepelného čerpadla. 1 = povolen, 0 = zakázán. |
> **Poznámka k setpointům:** `EMS_Battery_Setpoint_W` a `EMS_Grid_Setpoint_W` jsou informativní vstupy pro AUTO režim. Loxone je předá jako Modbus příkazy do střídače Deye. V ostatních režimech (SELF_SUSTAIN, PRESERVE, MANUAL) Loxone tyto hodnoty ignoruje a řídí se vlastní logikou.
---
## 2. Virtual Outputs (Loxone → EMS čtení)
Vytvořit jako **Virtual HTTP Output** nebo stav dostupný přes HTTP GET pro EMS backend.
| Název VO | Typ | Popis |
|---|---|---|
| `EMS_Mode_Active` | Analog | Aktuálně aktivní režim v Loxone. EMS čte při startu pro zjištění stavu. |
| `EMS_Watchdog_Triggered` | Digital | 1 pokud watchdog přepnul na SELF_SUSTAIN bez příkazu od EMS. Pro diagnostiku. |
---
## 3. Provozní režimy kódování
| Kód EMS | Loxone hodnota `EMS_Mode` | Název |
|---|---|---|
| `MANUAL` | 0 | Manuální žádná logika |
| `AUTO` | 1 | Automatický EMS řídí |
| `SELF_SUSTAIN` | 2 | Soběstačný Loxone autonomní |
| `CHARGE_CHEAP` | 3 | Nabíjení levnou cenou |
| `PRESERVE` | 4 | Ochrana baterie |
---
## 4. Watchdog detekce výpadku EMS
**Toto je nejdůležitější část Loxone implementace.**
Watchdog musí fungovat čistě v Loxone, bez závislosti na DB nebo síti mimo lokální LAN.
### Požadované chování
```
Pokud EMS_Heartbeat pulz nepřijde déle než 5 minut:
→ nastavit EMS_Mode = 2 (SELF_SUSTAIN)
→ nastavit EMS_Watchdog_Triggered = 1
→ logovat čas přepnutí (Loxone log)
Pokud EMS_Heartbeat znovu přijde po výpadku:
→ EMS_Watchdog_Triggered = 0
→ NEMĚNIT EMS_Mode zpět automaticky
(EMS si to přečte a rozhodne sám při restartu)
```
### Doporučená implementace v Loxone Config
**Varianta A Timer / Watchdog blok:**
- Použít blok `Watchdog` nebo `Timer` resetovaný příchozím pulzem `EMS_Heartbeat`
- Timeout: 300 sekund (5 minut)
- Při vypršení timeoutu: výstup spustí přepnutí do SELF_SUSTAIN
**Varianta B Pulse Counter + Time Trigger:**
- Počítat pulzy `EMS_Heartbeat` v 5min okně
- Pokud počet = 0 → přepnout režim
> Výběr varianty závisí na dostupných blocích ve verzi Loxone Config. Programátor zvolí vhodnou implementaci.
### Co Loxone watchdog NESMÍ dělat
- Číst DB nebo jiný HTTP endpoint pro rozhodnutí o watchdogu
- Automaticky přepínat zpět na AUTO při obnovení heartbeatu
- Zasahovat do Modbus komunikace EMS↔střídač (EMS píše Modbus přímo)
---
## 5. Stavový stroj režimů v Loxone
Pro každý `EMS_Mode` hodnotu definovat chování:
### Režim 1 AUTO
```
Střídač Deye:
- Battery charge limit = EMS_Battery_Setpoint_W (pokud kladné)
- Battery discharge limit = ABS(EMS_Battery_Setpoint_W) (pokud záporné)
- Grid export limit = ABS(EMS_Grid_Setpoint_W) (pokud záporné)
- Grid import limit = EMS_Grid_Setpoint_W (pokud kladné)
EV nabíječka 1:
- Max power / current = EMS_EV1_Power_W (přepočet W → A: W / (fáze × 230))
- Enable = 1 pokud EMS_EV1_Power_W > 1380, jinak 0
EV nabíječka 2:
- Stejná logika, EMS_EV2_Power_W
Tepelné čerpadlo:
- Enable = EMS_HeatPump_Enable
```
### Režim 2 SELF_SUSTAIN
```
Střídač Deye:
- Přepnout do Self-Consumption / Battery Priority modu
(konkrétní Modbus registr/hodnota dle Deye dokumentace)
- Export do sítě: zakázat (export limit = 0 W)
- Import ze sítě: povolen jen při SoC pod min_soc_percent (nouzový)
- Baterie: vybíjí do zátěže, nenabíjí ze sítě
EV nabíječky 1 + 2:
- Enable = 0 (zakázat nabíjení)
Tepelné čerpadlo:
- Enable = 0 (odstavit)
```
### Režim 3 CHARGE_CHEAP
```
Střídač Deye:
- Přepnout do Grid Charge modu
- Battery charge limit = EMS_Battery_Setpoint_W (EMS posílá max výkon)
- Export do sítě: zakázat
EV nabíječky:
- Enable = 0
Tepelné čerpadlo:
- Enable = 0
```
### Režim 4 PRESERVE
```
Střídač Deye:
- Přepnout do Self-Consumption s omezeným nabíjením/vybíjením
- Battery: drží aktuální SoC (charge limit = 0, discharge limit = 0)
- Pokrývá spotřebu z FVE, zbytek ze sítě
EV nabíječky:
- Enable = 0
Tepelné čerpadlo:
- Enable = 0
```
### Režim 0 MANUAL
```
Všechny výstupy: žádné automatické zásahy
Střídač: nechat v aktuálním stavu
EV, TČ: Enable = 0
Použít pouze pro servis a ladění
```
---
## 6. Komunikace Loxone → Deye (Modbus)
Loxone komunikuje s Deye střídačem přes **Modbus TCP** (Loxone Modbus Extension nebo přímý TCP).
> Konkrétní Modbus registry Deye SUN-20K doplnit z Deye protokolu PDF.
> Výchozí reference: Loxone šablona pro Deye (pokud existuje).
### Klíčové registry pro zápis (orientační, ověřit z dokumentace)
| Funkce | Registr | Typ | Poznámka |
|---|---|---|---|
| Battery charge power limit | 0x00F3 | Write Single | W |
| Battery discharge power limit | 0x00F4 | Write Single | W |
| Grid export power limit | 0x00F6 | Write Single | W |
| Work mode | 0x00F0 | Write Single | enum hodnoty dle Deye |
### Klíčové registry pro čtení (telemetrie pouze pokud Loxone čte, jinak EMS přes Waveshare)
> **Doporučení:** Telemetrii čte EMS přímo přes Waveshare (Modbus TCP). Loxone čte jen to co potřebuje pro vlastní logiku (SoC pro SELF_SUSTAIN rozhodování).
---
## 7. Komunikace Loxone → EV nabíječky (Teltonika)
Loxone komunikuje s Teltonika TeltoCharge přes **Modbus TCP** (Waveshare převodník).
> Konkrétní Modbus registry Teltonika TeltoCharge doplnit z dokumentace / Loxone šablony.
### Minimální potřebné registry
| Funkce | Popis |
|---|---|
| Enable charging | Povolení/zakázání nabíjení (digital) |
| Max current limit | Maximální proud v A (632A) |
| Connector status | Stav připojení (read) |
---
## 8. Komunikace Loxone → Samsung TČ (Modbus)
Loxone komunikuje se Samsung tepelným čerpadlem přes **Modbus TCP** (Waveshare převodník).
> Registry doplnit ze Samsung NASA Modbus dokumentace / Loxone šablony.
### Minimální potřebné registry
| Funkce | Popis |
|---|---|
| Enable / Disable | Povolení provozu TČ (digital) |
| DHW target temp | Cílová teplota TUV zásobníku (write) |
| DHW tank temp | Aktuální teplota zásobníku (read) pro watchdog nouzového ohřevu |
### Loxone nouzový ohřev (nezávisle na EMS)
Loxone musí implementovat vlastní minimální ochranu TUV zásobníku:
```
Pokud teplota zásobníku < 40°C (absolutní minimum):
→ spustit TČ bez ohledu na EMS_HeatPump_Enable a aktivní režim
→ logovat jako nouzový ohřev
```
Tato logika chrání zásobník i při výpadku EMS nebo přepnutí na SELF_SUSTAIN.
---
## 9. Testovací scénáře pro programátora
Po implementaci ověřit tyto scénáře:
| # | Scénář | Očekávané chování |
|---|---|---|
| 1 | EMS odešle `EMS_Mode=1`, pak každou minutu `EMS_Heartbeat=1` | Loxone v AUTO, přeposílá setpointy do střídače |
| 2 | EMS přestane posílat heartbeat na 6 minut | Loxone přepne na SELF_SUSTAIN, EMS_Watchdog_Triggered=1 |
| 3 | EMS pošle heartbeat znovu po výpadku | Watchdog_Triggered=0, Mode zůstane SELF_SUSTAIN (EMS rozhodne) |
| 4 | EMS odešle `EMS_Mode=4` (PRESERVE) | Loxone drží baterii, žádné nabíjení/vybíjení |
| 5 | Teplota TUV klesne pod 40°C v SELF_SUSTAIN | Loxone spustí TČ nouzově |
| 6 | EMS odešle `EMS_Battery_Setpoint_W=-5000` (vybíjení) | Loxone nastaví discharge limit 5000W, charge limit 0W |
| 7 | EMS odešle `EMS_EV1_Power_W=0` | Loxone zakáže nabíjení nabíječky 1 |
---
## 10. Otevřené body pro programátora
- [ ] Ověřit dostupnost Watchdog / Timer bloku v instalované verzi Loxone Config
- [ ] Zjistit konkrétní Modbus work mode hodnoty pro Deye (Self-Consumption, Grid-Charge, Backup)
- [ ] Ověřit Modbus registry Teltonika z dodané šablony/dokumentace
- [ ] Ověřit Modbus registry Samsung TČ z dodané šablony/dokumentace
- [ ] Dohodnout jestli Loxone čte SoC ze střídače pro SELF_SUSTAIN logiku (nebo pevný threshold)
- [ ] Loxone log přepnutí watchdogu jak přístupný pro EMS při restartu?