Files
home-pump/docs/roadmap.md
T
rootandClaude Opus 5.5 c73059eef7
CI / Backend tests (Maven / Java 21) (push) Successful in 40s
docs: C4 setpoint restored to 8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U8EHjVrf5ffw1Vjn5bPGJu
2026-10-23 23:25:46 +02:00

3.9 KiB
Raw Blame History

Roadmap

Bottom-up: each milestone builds on a verified one below it, and master stays deployable. Closed milestones shrink to one line here; details stay in git history and in decisions/.

Done

  • (none yet) · baseline e345063: read-only, sends 8 sensor values to InfluxDB every 300 s; no control of the controller. Runs on the Pi.

Current: M0 Foundation

No behaviour change.

  • Docs structure: CLAUDE.md, CONTRIBUTING.md, docs/ (this PR)
  • scripts/check.sh: build, tests, doc size limits, secret scan
  • Git pre-push hook and CI both run scripts/check.sh; remove .drone.yml and Dockerfile
  • Deploy: CI builds the backend Docker image; scripts/deploy-gateway.sh copies the jar to the Pi, restarts, checks /health, rolls back on failure
  • Skills: /ship, /close-milestone

Feasibility checks (after M0, before M1)

  • C1 Gateway sharing: MK01 takes one client; our poll drops my parents' Frisko app.
  • C2 Frisko app is used rarely: keep 300 s polls until our UI replaces it, then the backend is the only client, with a "release gateway" switch for the app.
  • C5 Parents raise the economy temperature (CWU 4143, CO 4131) to force heating; no tariff.
  • C6 Energy sources readable locally: Deye via Solarman logger, Fronius Solar API, house meter.
  • C3 Backup of the 14 app-editable settings: research/frisko/settings-backup-2026-10-23.json.
  • C4 Write works: FC6 4143 8 → 9 → 8 (my request), echo OK, read-back after 1 s, no password.

Next

Milestone Scope Done when
M1 Gateway: all readings Fix D7 first. Baseline becomes the gateway: heat pump incl. state registers (4112–4119, 4201–4203, 4221–4228), Deye, Fronius, house meter and BME280 (moved from rpi-measurements, same schemas; then retire it) into Influx with a buffer; snapshot; config outside the jar; fix D1–D5 A week on the Pi without manual action, Grafana unchanged
M2 Understand the controller Timing (safe poll rate, response times), which pumps run in which state, open questions in docs/frisko/ docs/frisko/ reviewed; F3 limits agreed
M3 Backend and web UI, read-only Backend in Docker in Kraków: history from Influx, snapshot from the gateway; F1, F2, F5, F7 with the schematic and charts after research/ui/; Traefik route and auth (decide the login method first) My father sees the heat pump and the energy on his phone
M4 Setpoints F3 through gateway commands with timed restore (ADR-006); CWU first, then CO; S1–S6 Father boosts hot water from his phone, value restored on time
M5 Alarms F4; decide the channel first (e.g. ntfy, Telegram) Simulated alarm reaches the phone
M6 Native app? Decide: keep the web UI, WebView wrapper or React Native Decision recorded

Known defects in the baseline (input for M1)

  • D1 Self-restart works only while something polls /health (HealthMonitor).
  • D2 Influx client logs every request (LogLevel.FULL), ~420 journal lines/hour.
  • D3 Config is packaged inside the jar.
  • D4 Dead code and config: pollIntervalMs, windowSeconds, ModbusCachedWrapper, write path.
  • D5 Single and batch reads use different addresses for registers ≥ 4100 (ModbusRtuTcpRepository).
  • D6 Development runs wrote test fields into the production Dom_Pompa database.
  • D7 Pi network: all 880 DNS errors of the week came in one hour (19.10, 10:00), likely an outage, not config. But the Pi's WireGuard routes most of 192.168.0.0/24 into the tunnel (Kraków uses the same subnet), so it reaches only .10 and .150 locally. Fix: Pi AllowedIPs only 10.0.0.0/24, 10.2.0.0/24 (Influx and Gitea go via the public IP anyway), plus outbound NAT on OPNsense's WireGuard interface so the Pi answers Kraków through the tunnel.

Knowledge