Repository navigation
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
power_below_targetalways ends with "The charger has not said why."Change
feedbackReadingreads the driver's vendor-neutralcurrent_limited_by. When an EV driver sets it toload_balancerand the car draws less than asked for the usual grace,classifyControlFeedbackreportsload_balancer_limit.setControlStatusmaps it tolimited/info, likefuse_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."The reason name is not in
contract/registry.yaml; no control-feedback reason is. srcfl/ftw-webapp vendorsweb/control-feedback.jsand 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.jsonto its merge commit onmainbefore this merges.Open draft #1449 also edits
drivers/BUNDLED_SOURCE.json; whichever lands second rebases the pin.Evidence
TestLoadBalancedChargerReadsAsLimitedreplays a 6-minute Easee-like trace: named load balancer at 8.3 kW and at 0 W readslimited/load_balancer_limit/info; without the name it staysnot_following/power_below_target/warning; 13 kW against 11 kW stayspower_above_target. With the new branch disabled, the named cases fail asnot_following.TestControlStatusAnswersEveryReasoncovers the new reason;web/control-feedback.test.mjschecks the words, and the existing test checks every reason insetControlStatushas words.make verifyandnpm test(700 tests) pass locally.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