Bazén vizualizace + EV Discord notifikace po příjezdu (fáze A)
- R__097: vw_latest_pool_pump + vw_pool_pump_day_energy (denní kWh z delty čítače, minuty běhu) + ems_anon granty - PoolCard na Dashboardu: stav/W/dnešní kWh+hodiny/7denní mini sloupce - _notify_ev_arrival_plan: po příjezdu EV Discord souhrn (SoC auta → cíl, deadline, nabíjecí okna shlukovaná ze slotů aktivního plánu, ø cena) - docs/discord-ev-interaction.md: fáze B (bot s tlačítky přes gateway — žádný veřejný endpoint; čeká na DISCORD_BOT_TOKEN od uživatele) - docs: pool-shelly + ev-charging aktualizovány (pravidlo docs 1:1) První commit na dev větvi (nová kadence: deploy až s milníkovým merge). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
45
docs/discord-ev-interaction.md
Normal file
45
docs/discord-ev-interaction.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Discord EV interakce — návrh (fáze A nasazena, fáze B čeká na bot token)
|
||||
|
||||
## Fáze A — notifikace po příjezdu (HOTOVO, `dev`)
|
||||
|
||||
Píchneš auto → detekce (~60 s) → Tesla SoC → replan → **Discord zpráva**
|
||||
(webhook `discord_webhook_daily_url`):
|
||||
|
||||
```
|
||||
🔌 Tesla Model Y připojeno
|
||||
Baterie auta: 55 % → cíl 100 % (~34 kWh)
|
||||
Deadline: po 15.06. 06:30
|
||||
Plán nabíjení: 11:30–13:45; 02:15–04:30 — 34.2 kWh, ø 1.85 Kč/kWh
|
||||
```
|
||||
|
||||
Implementace: `_notify_ev_arrival_plan` v `telemetry_collector.py` (sloty
|
||||
`ev*_setpoint_w > 0` z aktivního plánu shlukované do oken).
|
||||
|
||||
## Fáze B — zpětná vazba tlačítkem („odjíždím za 2 h")
|
||||
|
||||
**Architektura: Discord BOT přes gateway** — spojení jde Z backendu VEN
|
||||
(websocket), žádný veřejný endpoint do EMS (na rozdíl od interactions
|
||||
webhooku). Knihovna `discord.py`, token v `/opt/ems-deploy/.env`.
|
||||
|
||||
Zpráva z fáze A dostane tlačítka:
|
||||
`[Odjezd za 2 h] [za 4 h] [Ráno (typicky)] [Do plna hned] [Nenabíjet]`
|
||||
|
||||
Callback tlačítka:
|
||||
1. `fn_ev_session_apply_patch(site, session, {"target_deadline": now+2h, …})`
|
||||
(„Do plna hned" navíc `target_soc_pct=100`; „Nenabíjet" `target_soc_pct=soc`),
|
||||
2. okamžitý `run_rolling_replan` + `export_setpoints` (vzor ev_arrival),
|
||||
3. bot **edituje původní zprávu** novým plánem (žádný spam).
|
||||
|
||||
Bezpečnost: bot reaguje jen na whitelisted user ID (majitel), akce omezené
|
||||
na patch session + replan (žádné režimy/registry). Tlačítka expirují
|
||||
s koncem session.
|
||||
|
||||
**Co je potřeba od uživatele:** vytvořit Discord aplikaci + bota
|
||||
(discord.com/developers → New Application → Bot → token), pozvat na server
|
||||
(scope `bot`, oprávnění Send Messages + Read History), token jako
|
||||
`DISCORD_BOT_TOKEN` do `.env`. Pak implementuju `services/discord_bot.py`
|
||||
(lifespan task vedle telemetry smyčky).
|
||||
|
||||
## Výhled (fáze C)
|
||||
Stejný bot = kanál pro ranní triáž s dotazy („proč jsi v 19:00 nabíjel?" →
|
||||
delta-triage skill) a rychlé akce (bazén, režimy) — viz noční roadmapa.
|
||||
Reference in New Issue
Block a user