Dusan Vojacek d81a150014 fix(planner): EV session viditelna i bez deadline / nad targetem (BUG2)
Zivy incident home-01: aktivni plan mel ev_sessions:0, ac session bezela
(target 70 %). Planovac neviděl ~6 kW zatez auta a spatne rozvrhl baterii
(zbytecny vecerni import).

Root cause (dve pasti):
- fn_planning_site_context vracela session jako null, kdyz needed_wh=0
  (auto nad targetem) i kdyz target_deadline is null.
- _ev_session_from_json (Python) zahazovala session bez deadline.

Fix:
- R__038 fn_ev_session_planning_json: session se vyradi (null) JEN bez tvrdych
  dat (kapacita vozidla / soc_at_connect). target_deadline smi byt NULL --
  solver hard deadline constraint aplikuje jen pri needed>0; oportunisticka
  vrstva bezi i bez deadline. Auto nad targetem zustava v planu jako znama
  zatez i s headroomem k levnemu doplneni. R__039 vola helper (deduplikace
  dvou inline poddotazu, SQL-first).
- _ev_session_from_json si NULL deadline ponecha (energy_needed_wh default 0).
- testy test_ev_session_parse.py; docs ev-charging + planning-changelog;
  CLAUDE.md funkce.

Navrh agresivnejsiho oportunistickeho algoritmu (P50 levnych oken z
market_price_stats misto konstanty 1 Kc/kWh) -- NEnasazeno, k rozhodnuti,
sepsano v docs/04-modules/planning.md (EV oportunismus); riziko regrese
golden ekonomiky, nutny EV fixture + eval.

Overeni: pytest -q 362 passed; golden replay gate 7 passed; solver_v2_eval
beze zmeny (fixtures bez EV session).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 22:03:27 +02:00
2026-06-06 22:41:56 +02:00
2026-05-15 23:03:32 +02:00
x
2026-03-20 14:30:03 +01:00

EMS Platform

Systém pro správu energie fotovoltaické elektrárny s baterií, EV nabíječkami a tepelným čerpadlem. Optimalizuje náklady pomocí spotových cen OTE CZ.

Podrobná architektura, datový model a moduly jsou v docs/; stručná orientace pro vývoj je v CLAUDE.md.

Rychlý start

cp .env.example .env
# Uprav .env: DB_PASSWORD, POSTGREST_JWT_SECRET (min 32 znaků)
docker compose up --build -d
# Počkej ~45s na Flyway migrace a start služeb
bash scripts/smoke_test.sh

Inicializace dat (první spuštění)

# 1. Import spotových cen OTE (zítřek v časové zóně lokality)
curl -X POST http://localhost/api/v1/sites/1/prices/import

# 2. PV forecast (Open-Meteo + pvlib → forecast_pv_interval)
curl -X POST http://localhost/api/v1/sites/1/forecast/run

# 3. Spustit optimalizaci (denní plán)
curl -X POST "http://localhost/api/v1/sites/1/plan/run?type=daily"

Ve webovém rozhraní: stránka Plánování a tlačítko Přeplánovat spouští rolling přepočet (vyžaduje již dostupné ceny a forecast v horizontu solveru).

Stack

Komponenta Technologie Port
DB PostgreSQL 16 + TimescaleDB 5432 (mapováno na localhost, interně v síti Docker)
API FastAPI + PostgREST 80 přes Nginx (/api, /rest)
Frontend React + Vite + Tailwind 80
Migrace Flyway (db/migration, db/routines, db/views)

Co ještě nefunguje (před instalací HW)

  • Telemetrie: IP adresy Waveshare (Modbus TCP) doplnit v DB / seedu (db/migration/V003__seed_site_home01.sql a site_endpoint).
  • EV nabíječky: Modbus registry Teltonika zatím často mock / rozpracované.
  • Samsung TČ: Modbus registry pending (mock data).
  • Loxone: nakonfigurovat Virtual Inputs dle docs/loxone-integration.md.

Architektura

Viz docs/02-architecture.md.

Description
No description provided
Readme 19 MiB
Languages
Python 66.9%
TypeScript 19.4%
PLpgSQL 11.9%
Shell 1.4%
JavaScript 0.2%