gpt5.5 - odladeni dokumentace dle kodu
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
|
||||
## Co modul dělá
|
||||
|
||||
- Čte data ze střídače Deye, EV nabíječek Teltonika a tepelného čerpadla Samsung přes Modbus TCP
|
||||
- Čte data ze střídače Deye přes Modbus TCP
|
||||
- EV nabíječky Teltonika a tepelné čerpadlo Samsung mají zatím placeholder
|
||||
vzorky; konkrétní registry jsou TODO
|
||||
- Ukládá surová měření do DB (1min granularita)
|
||||
- Detekuje výpadky komunikace a loguje chyby
|
||||
- Agreguje 1min data na 15min průměry pro spotřebu, audit a plánování
|
||||
@@ -18,15 +20,15 @@ Samostatná Python služba. Běží jako smyčka, nezávislá na FastAPI.
|
||||
| Zařízení | Interval | Důvod |
|
||||
|---|---|---|
|
||||
| Deye střídač | 60 s | 1min granularita telemetrie |
|
||||
| Teltonika EV nabíječka 1 | 60 s | |
|
||||
| Teltonika EV nabíječka 2 | 60 s | |
|
||||
| Samsung tepelné čerpadlo | 60 s | |
|
||||
| Teltonika EV nabíječka 1 | 60 s | zatím placeholder `available`, 0 W |
|
||||
| Teltonika EV nabíječka 2 | 60 s | zatím placeholder `available`, 0 W |
|
||||
| Samsung tepelné čerpadlo | 60 s | zatím placeholder hodnoty |
|
||||
|
||||
### Chování při chybě
|
||||
|
||||
- Chyba komunikace: záznam se nezapíše, chyba se loguje
|
||||
- 3 po sobě jdoucí chyby = alert (log WARNING)
|
||||
- 10 po sobě jdoucích chyb = log ERROR + pokus o reconnect
|
||||
- Kód zatím nedrží počítadlo po sobě jdoucích chyb podle zařízení; chyby se logují
|
||||
při jednotlivých poll pokusech
|
||||
- Data se neinterpolují – chybějící minuty zůstanou prázdné (audit to pozná)
|
||||
|
||||
---
|
||||
@@ -43,7 +45,7 @@ Komunikace: Modbus TCP, Unit ID dle DIP přepínače na střídači (typicky 1).
|
||||
| 514 (0x0202) | uint16 | Dnešní nabití baterie | Wh | `batt_charge_today_wh` |
|
||||
| 515 (0x0203) | uint16 | Dnešní vybití baterie | Wh | `batt_discharge_today_wh` |
|
||||
| 588 (0x024C) | uint16 | Battery SoC | % | `battery_soc_percent` |
|
||||
| 590 (0x024E) | int16 | Tok výkonu baterie | W | signed: **+ vybíjení, − nabíjení** |
|
||||
| 590 (0x024E) | int16 | Tok výkonu baterie | W | signed z Deye; v DB `battery_power_w` platí **+ nabíjení, − vybíjení** |
|
||||
| 625 (0x0271) | int16 | Výkon sítě | W | signed: **+ import, − export** |
|
||||
| 653 (0x028D) | uint16 | Celková spotřeba | W | `load_power_w` |
|
||||
| 667 (0x029B) | int16 | Výkon GEN portu (FVE pole B) | W (signed) | `gen_port_power_w`; záporné při zpětném toku / bez výroby — **číst signed** |
|
||||
@@ -60,6 +62,13 @@ Komunikace: Modbus TCP, Unit ID dle DIP přepínače na střídači (typicky 1).
|
||||
|
||||
**Zápis setpointů (plánování → Deye):**
|
||||
|
||||
Aktuální řízení Deye je popsané v [`control.md`](control.md) a
|
||||
[`modbus-registers.md`](modbus-registers.md). Nepoužívá starý `write_register`
|
||||
model, ale journal `ems.modbus_command` a FC 0x10 (`write_registers`) pro
|
||||
registry 108/109/141/142/143/145/178/340 + TOU bloky.
|
||||
|
||||
Historická orientační mapa níže neplatí jako implementační kontrakt:
|
||||
|
||||
| Registr (hex) | Typ | Popis | Hodnota |
|
||||
|---|---|---|---|
|
||||
| 0x00F3 | Write Single | Battery charge power limit | W |
|
||||
@@ -114,14 +123,15 @@ Komunikace: Modbus TCP přes Waveshare.
|
||||
|
||||
## Kód telemetrie (Python)
|
||||
|
||||
Implementace: `backend/services/telemetry_collector.py` — `poll_inverter()` používá konstanty `DEYE_REG_*` a třídu `ModbusDevice`; hlavní smyčka je `run_telemetry_loop` / `run_telemetry_loop_wrapper`.
|
||||
Implementace: `backend/services/telemetry_collector.py` — `poll_inverter()` používá konstanty `DEYE_REG_*` a sdíleného Modbus klienta z `services.modbus_client`; hlavní smyčka je `run_telemetry_loop` / `run_telemetry_loop_wrapper`.
|
||||
|
||||
---
|
||||
|
||||
## Agregace 1min → 15min
|
||||
|
||||
Prováděna PostgreSQL funkcí `ems.fn_fill_audit_interval()` a `ems.fn_fill_baseline_consumption()`.
|
||||
Spouštěna každých 15 minut jako scheduled task (Python APScheduler nebo pg_cron).
|
||||
Prováděna PostgreSQL funkcí `ems.fn_fill_audit_interval()` a navazujícími
|
||||
funkcemi pro baseline/accuracy. Spouští ji Python APScheduler: audit filler v
|
||||
minutách `:01,:16,:31,:46`, forecast accuracy v `:02,:17,:32,:47`.
|
||||
|
||||
```sql
|
||||
-- Příklad agregace telemetrie na 15min průměr
|
||||
@@ -161,12 +171,13 @@ Nad `ems.telemetry_inverter` běží dva **continuous aggregate** (TimescaleDB);
|
||||
|
||||
```env
|
||||
TELEMETRY_POLL_INTERVAL_SEC=60
|
||||
TELEMETRY_ERROR_WARN_THRESHOLD=3 # počet chyb před WARNING logem
|
||||
TELEMETRY_ERROR_RECONNECT_THRESHOLD=10
|
||||
MODBUS_CONNECT_TIMEOUT_SEC=5
|
||||
MODBUS_READ_TIMEOUT_SEC=3
|
||||
```
|
||||
|
||||
`TELEMETRY_POLL_INTERVAL_SEC` a chybové prahy zatím nejsou v kódu používány;
|
||||
smyčka běží každých 60 s přímo v `run_telemetry_loop_wrapper`.
|
||||
|
||||
---
|
||||
|
||||
## Otevřené body
|
||||
|
||||
Reference in New Issue
Block a user