Skip to content

fix(control): show a charger's load balancer as the limit - #1537

Draft
frahlg wants to merge 1 commit into
masterfrom
easee-load-balancer-limited
Draft

frahlg wants to merge 1 commit into
masterfrom
easee-load-balancer-limited

Conversation

@frahlg

@frahlg frahlg commented Oct 8, 2026

Copy link
Copy Markdown
Member

Problem

A tester on v0.140.0-beta.1 (Easee Cloud, Pixii, 25 A three-phase fuse) saw "Not following. Asked for 11.0 kW charge, delivering 8.3 kW. The charger has not said why." Requested current, charger offer and charger limit all read 16 A. The charger's load balancer had cut the car to about 12 A per phase.

#1536 stops FTW's own battery charge from causing that cut. A load balancer set tighter than FTW's fuse, or a fast house load, can still cut the car. FTW should then name the cause.

Two things hid it:

Change

  • feedbackReading reads the driver's vendor-neutral current_limited_by. When an EV driver sets it to load_balancer and the car draws less than asked for the usual grace, classifyControlFeedback reports load_balancer_limit. setControlStatus maps it to limited / info, like fuse_limit: a load balancer protecting the fuse is expected and clears on its own. More power than asked still warns.
  • web/control-feedback.js: title "Limited by the charger's load balancer"; "Asked for 11.0 kW charge, delivering 8.3 kW. The charger's load balancer is limiting the car." At zero: "…but the charger's load balancer gives the car no current." Next step: "The load balancer raises the current again when the house uses less. If this happens often, check that FTW's main fuse setting matches the load balancer's."
  • Move the bundled driver pin from c9de251 to 3c0bc2a, the head of fix(easee_cloud): report a load-balancer limit while the car charges device-drivers#172 (easee_cloud 1.3.7). The only other upstream change in that range is a test (fix(control): drop planner_self live idle-gate override (#167) #168).
  • Changeset: patch.

The reason name is not in contract/registry.yaml; no control-feedback reason is. srcfl/ftw-webapp vendors web/control-feedback.js and needs a fresh copy after this merges. Until then the app shows "Limited" with "The box reports “load_balancer_limit”, which this version cannot describe."

Paired PR

srcfl/device-drivers#172 must merge first. Then move drivers/BUNDLED_SOURCE.json to its merge commit on main before this merges.

Open draft #1449 also edits drivers/BUNDLED_SOURCE.json; whichever lands second rebases the pin.

Evidence

  • TestLoadBalancedChargerReadsAsLimited replays a 6-minute Easee-like trace: named load balancer at 8.3 kW and at 0 W reads limited/load_balancer_limit/info; without the name it stays not_following/power_below_target/warning; 13 kW against 11 kW stays power_above_target. With the new branch disabled, the named cases fail as not_following.
  • TestControlStatusAnswersEveryReason covers the new reason; web/control-feedback.test.mjs checks the words, and the existing test checks every reason in setControlStatus has words.
  • make verify and npm test (700 tests) pass locally.
  • Browser review: the PR's web/ served against the home box's live /api/status, with the EV row replaced by Core's output for the tester's case. Desktop and 375 px phone width read correctly; Numbers show 16 A requested, offered and limit. Not yet seen with a real load-balanced Easee.

🤖 Generated with Claude Code

An Easee charger's load balancer can cut the car below FTW's request.
The EV sheet then said "Not following" and that the charger had not said
why, with requested current, charger offer and charger limit all equal.

Read the driver's vendor-neutral current_limited_by. When it names the
load balancer and the car draws less than asked, report
load_balancer_limit as limited, with words that name the load balancer.
More power than asked still warns.

Move the bundled driver pin to srcfl/device-drivers#172, which keeps the
load-balancing reason while the car charges.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Fredrik Ahlgren <fredrik@sourceful-labs.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant