Repository navigation
House load remains unavailable when loadpoint retains a nonexistent EV driver name #1744
Description
Summary
On FTW v0.152.1-beta.1 (new 0.x Docker deployment), House remains unavailable in the web UI, while Grid/Battery/PV readings are fresh. The local GET /api/status provides a precise root cause:
load_w: null
history_reason: missing:easee:ev
load_estimate:
watts: null
reason: missing:easee:ev
method: reported_energy_balance_v3
The site's charger driver and loadpoint are bound under different names:
drivers:
- name: easee_cloud
lua: drivers/easee_cloud.lua
disabled: false
loadpoints:
- id: Laddbox
driver_name: easee
An operator also tried removing the Easee device in Settings, but the missing-house symptom persisted. The exact edit/save sequence for that removal was not captured; the read-only configuration inspection above confirms the current broken binding.
Reproduction / verified observations
- Configure an EV-capable driver named
easee_cloud. - Keep a loadpoint bound to the old/nonexistent name
easee(this was found in a live setup after device changes). - View Live Energy Balance / House and
GET /api/status. - House displays
—; bothload_wandload_estimate.wattsare null, withmissing:easee:ev, even though live grid, battery, PV and charger aggregate readings are available. - Switching the site meter between Zap and Pixii did not change the symptom. It is not a meter-specific issue.
Sample status from this site (signed FTW power convention):
grid_w = -109.96
bat_w = -3874
load_w = null
history_reason = missing:easee:ev
load_estimate.reason = missing:easee:ev
An instantaneous residual with PV and EV at zero would be about 3.76 kW; that is not a qualified HomeUseEstimate, and the current fail-closed behavior is preferable to reporting unverified consumption as exact.
Likely code path
go/cmd/ftw/forecast_measurements.go—forecastMeasurementTopologyadds an expectedDerEVflow using everyloadpoints[].driver_name, without ensuring it resolves to an existing configured EV driver or known OCPP charge point.go/internal/telemetry/forecast.go—measurementLockedmarks absentreadings["easee:ev"]asmissing:easee:ev.go/internal/api/api_history_quality.go— invalid household balance setsload_w = null; the same error is propagated intoload_estimate.web/settings/tabs/loadpoints.js— the Chargers dropdown can show a nonexistent driver as a saved connection, but the persisted invalid relationship is apparently not conspicuous enough to correct during device removal/rename.
Expected behavior / requested fix
- Prevent or clearly flag dangling loadpoint bindings when an EV driver is renamed, removed or disabled. At least warn in Settings → Chargers, ideally with an actionable relink to an available EV driver.
- Do not silently leave a no-longer-resolvable
loadpoints[].driver_namethat invalidates House indefinitely. Preserve explicit fail-closed semantics for genuinely unknown EV power; do not substitute 0 W for a missing but physically connected charger without evidence. - On
missing:<driver>:ev, surface which loadpoint expects that source, rather than only displaying—in House. - Add regression tests for remove/rename of a charger driver with a retained loadpoint, and verify expected household-balance quality and the Settings UX. Avoid assuming a renamed charger can safely continue to receive dispatch commands.
Status
Root cause evidenced; remediation not yet verified. The operator has been advised to rebind the Laddbox loadpoint from easee to easee_cloud in Settings → Chargers, then retest /api/status. Please treat the outcome of that proposed relink as unconfirmed.
Related but distinct: #1667 covers transient power-balance mismatches invalidating historical household totals. This report concerns a persistent, dangling EV source identifier invalidating current household-load availability.
Activity
frahlg commentedon Oct 19, 2026
The removed/renamed driver case is covered by #1743, merged today. Settings now marks the missing saved connection, names the affected charger and driver, retains the warning after save, and clears it after an explicit relink or removal. The diagnostic catalogue also exposes the exact saved binding. The patch does not choose another charger or replace unknown EV power with 0 W.
Full
make verify, 857 web tests, targeted race tests and PR CI passed. Fredrik reviewed the rendered Settings view before merge.I am keeping this issue open for the disabled-driver case requested above:
LoadpointConnections()still treats a matching configured name as a valid name binding even when that driver is disabled, and the Settings warning does not yet distinguish that case.This is merged code, not a release or an installation on the affected box. We have not verified House recovery on that box after the proposed relink. Related MCP work: srcfl/ftw-cloud#41; the remaining diagnostic requirements are tracked in srcfl/ftw-cloud#42.
frahlg commentedon Oct 19, 2026
Completed in #1743 and #1746, both now merged.
Settings now keeps an actionable warning for a saved charger binding whose driver is missing or disabled. The warning survives save/reopen and clears after an explicit repair. Core does not pick a different charger, enable a disabled driver, or turn unknown EV power into 0 W. The diagnostic catalogue reports the saved association and its state.
Validation passed: full
make verify, 858 web tests, targeted race tests and green CI on the exact merged head. Regressions cover removed/renamed/disabled bindings, warning persistence, explicit repair and household-balance quality. The paired MCP integration also runs through real Core read handlers and SQLite. Fredrik approved the rendered disabled-driver warning before merge.Closing the implementation request. This is merged code; no Core release or box update was performed. Recovery on the reported household after its proposed relink remains unverified. The remaining MCP work is now merged in srcfl/ftw-cloud#43.