Repository navigation
fix(solis): stop trusting SolisCloud's slot metadata, and sweep the probe to a half amp - #5314
Merged
Merged
Conversation
…robe to a half amp Issue #5068. The slot current cap was lowered to the smallest sysCommand max that the API-key route returns with each slot register. That metadata is a UI definition for a list of model codes (its productModel), and SolisCloud returns definitions for other models. An S5-EH1P5K-L (model 3104, 5kW, 51.2V pack, 100A in CID 7224/7226) was given: - 60A for its slot currents, from the definition for models 3101/3102 - 62.5A for slot 1 charge, from the definition for models 3111/3140/3145 - 70A for CID 7224, which reads 100A Its slots 2-6 held 100A the whole time. Predbat still capped slot 1 at 60A, about 3.1kW from the battery, and the customer saw exports of around 3.6kW on a 5kW inverter. The metadata is now ignored. The battery-side cap is the register itself. The probe starts from it and measures what the slots really accept, with the rated estimate as the fallback until it has run. The probe sweep now ends with one half-amp step. After 1A up is refused, it tries 0.5A up, so a ceiling such as 62.5A is found exactly rather than rounded down to 62A. Candidates are written as the inverter shows them ("60", "62.5"). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This was referenced Sep 30, 2026
springfall2008
added a commit
that referenced
this pull request
Oct 2, 2026
…0-01 docs(debug-journal): fold in the 2026-10-01 queue slice (9 candidates); mark GH#5313 fixed by PR #5315, GH#5136 by PR #5293, GH#5222 by PR #5283, the iog-slot-io-adjusted row by PR #5304, GH#5068 reworked by PRs #5309/#5314; add the dynamic-load car cancel row and the GH#2649/#5302/#5324 findings
gcoan
pushed a commit
to gcoan/batpred
that referenced
this pull request
Oct 3, 2026
…); mark GH#5313 fixed by PR springfall2008#5315, GH#5136 by PR springfall2008#5293, GH#5222 by PR springfall2008#5283, the iog-slot-io-adjusted row by PR springfall2008#5304, GH#5068 reworked by PRs springfall2008#5309/springfall2008#5314; add the dynamic-load car cancel row and the GH#2649/springfall2008#5302/springfall2008#5324 findings Co-Authored-By: Claude Code <noreply@anthropic.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.
Fixes #5068. Follows #5309.
Problem
On the API-key route, SolisCloud's batch read returns a
sysCommanddefinition with each register. Predbat capped slot currents at the smallestsysCommand.maxacross the six slots. That definition is a cloud UI entry for a list of model codes (productModel), and the cloud hands back entries for other models.Live on an S5-EH1P5K-L (model 3104, 5 kW, one PureDrive LV pack at 51.2 V, CID 7224/7226 = 100 A):
f4,f7,f8,3101,3102,3109,3110,3121,3122,f53111,3140,31453104 is in none of those lists. Predbat still capped slot 1 at 60 A (≈3.1 kW from the battery), so the customer saw exports of about 3.6 kW on a 5 kW inverter.
max_export_powerwas 99999 (no limit). The 60 A entry does match model 3102, whose real 60 A ceiling #5309 measured by probing.Change
sysCommandmetadata is ignored. The battery-side cap is the CID 7224/7226 register itself. The fix(solis): probe the slot current ceiling the inverter enforces but does not report #5309 probe starts there and measures what the slots really accept. Until it has run, the rated estimate is the fallback, as before.60,62.5). This adds one write per direction to a probe.Testing
test_slot_current_limits_inputsnow covers the 5 kW case, using the real definitions and model lists from the inverter. The metadata does not lower the 100 A battery cap, and the unprobed cap is the 97 A rated estimate rather than 60 A.test_slot_probe_finds_half_amp_ceiling: a 62.5 A ceiling is found as 62.5 A (62 kept, 63 refused, 62.5 kept).solis.py, run test by test, all three fail: the metadata lowers the cap, 62.5 A is found as 62 A, and the sequence has no half step. All pass with the change../run_all --quickpasses, and pre-commit passes on the changed files.Notes
slot_*_power_max/battery_rate_maxread 4966 W.tools/debug-journal.md's Solis row still describes thesysCommandminimum as a deliberate cap (the GH#5068 paragraph). It can be refreshed once this merges.🤖 Generated with Claude Code