Skip to content

House load remains unavailable when loadpoint retains a nonexistent EV driver name #1744

Closed

Description

@hannesb90

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

  1. Configure an EV-capable driver named easee_cloud.
  2. Keep a loadpoint bound to the old/nonexistent name easee (this was found in a live setup after device changes).
  3. View Live Energy Balance / House and GET /api/status.
  4. House displays —; both load_w and load_estimate.watts are null, with missing:easee:ev, even though live grid, battery, PV and charger aggregate readings are available.
  5. 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 — forecastMeasurementTopology adds an expected DerEV flow using every loadpoints[].driver_name, without ensuring it resolves to an existing configured EV driver or known OCPP charge point.
  • go/internal/telemetry/forecast.go — measurementLocked marks absent readings["easee:ev"] as missing:easee:ev.
  • go/internal/api/api_history_quality.go — invalid household balance sets load_w = null; the same error is propagated into load_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

  1. 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.
  2. Do not silently leave a no-longer-resolvable loadpoints[].driver_name that 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.
  3. On missing:<driver>:ev, surface which loadpoint expects that source, rather than only displaying — in House.
  4. 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

  1. frahlg commented on Oct 19, 2026

    @frahlg
    Member

    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.

  2. frahlg commented on Oct 19, 2026

    @frahlg
    Member

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions