Files
ems/db/migration/V106__ev_charger_failsafe_current.sql
Dusan Vojacek 54288ee2fd fix(modbus): reg 15 re-asert kazdy tick + per-charger failsafe (BUG1)
Zivy incident home-01 (TeltoCharge .16): od ~22:45 UTC 12.6. nevznikl zadny
telto journal radek (ani failed), auto jelo failsafe 8 A misto planovanych 0 A.

Root cause: reg 15 (amps) byl write-on-change proti journalu
(fn_modbus_device_state_map). Jakmile mel reg 15 radek "0 verified" a plan
dal chtel 0, NIKDY nevznikl novy prikaz -- a TeltoCharge si po vypadku
komunikace sam prepsal reg 15 na failsafe (reg 20) BEZ journal radku. Verify
cte zpet jen 'written' radky, takze tichy drift 0 -> 8 A nikdo nevidel ani
neopravil.

- reg 15 (amps to use) se zapisuje VZDY (re-asert) -- volatilni ridici
  registr, ne EEPROM; drzi verify jobu cerstvy written radek -> drift se
  zachyti a hned opravi. _split_amps_and_watchdog odděluje 15 od 19/20.
- reg 19/20 (watchdog config, EEPROM) zustavaji write-on-change.
- per-charger failsafe/timeout: asset_ev_charger.watchdog_failsafe_a /
  watchdog_comm_timeout_s (V106; default 8 A / 300 s). "Zakaz nabijeni" =
  reg 15 = 0 (protokol rev 0.5 nema samostatny enable registr).
- testy test_ev_write_on_change.py; docs teltocharge + journal + data-model.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 22:03:11 +02:00

19 lines
1.4 KiB
SQL

-- Per-charger watchdog failsafe proud (reg 20 TeltoCharge) + comm timeout (reg 19).
-- Failsafe = proud, na který wallbox spadne po výpadku komunikace EMS delším než
-- comm timeout. Default 8 A historicky (auto se přes noc dobije pomalu i bez EMS),
-- ale po ZAPOJENÍ má jet řízeně z plánu (0 A drží arrival-hold + watchdog sycení
-- čtením telemetrie), ne failsafe. Konfigurovatelné per charger, ať lze failsafe
-- snížit (např. 6 A) nebo zvednout dle dotačních / komfortních požadavků.
--
-- Sémantika: hodnota PŘI výpadku EMS, ne při běžném provozu. Proto se obvykle
-- drží min 6 A (IEC 61851 minimum); 0 = po výpadku vědomě nenabíjet.
alter table ems.asset_ev_charger
add column if not exists watchdog_failsafe_a int not null default 8,
add column if not exists watchdog_comm_timeout_s int not null default 300;
comment on column ems.asset_ev_charger.watchdog_failsafe_a is
'TeltoCharge reg 20: proud (A) při výpadku komunikace EMS déle než watchdog_comm_timeout_s. Default 8 A (pomalé dobití bez EMS). 0 = po výpadku nenabíjet. Běžný provoz řídí reg 15 z plánu, ne failsafe.';
comment on column ems.asset_ev_charger.watchdog_comm_timeout_s is
'TeltoCharge reg 19: timeout (s) bez validní Modbus komunikace, po kterém wallbox přejde na watchdog_failsafe_a. Sytí ho i FC3 čtení telemetrie (60 s). Default 300 s.';