Repository navigation
Add shared Deye/Solarman template with observed service sequences - #5505
arturonaredo wants to merge 2 commits into
Conversation
v9.4.0 publication — 14 October 2026v9.4.0 update — 14 October 2026: this branch now includes the official release
Current-head CI: run 38594153482: The latest code is in the existing PR branches; no installation branch or private configuration is published. Previous dated report — historical evidence, superseded statusConsolidated installation and integration update — 13 October 2026Current-main rebase update: all three PRs now include upstream Current-head CI: run 38375561200 for I have the code from #5486, #5498 and #5505 installed together at home, and the household battery planner is operating through Predbat's native control loop. This is no longer only a shadow display. The read-only check at 07:51 UTC found a normal 07:50 UTC This PR's role and use casesThis PR is rebased at
The template does not advertise forced export, hold/freeze, Program Power control, a solar SOC ceiling or variable EV power. It does not rewrite physical ToU times, work mode, global currents, BMS or protection settings. At home, local Solarman remains the inverter path; Deye Cloud stays disabled and the existing external EV executor remains the only automatic EV switch writer. Concrete field evidence — charge and demandThe shared template is operating on my SUN-16K-SG01LP1-EU, through local Home Assistant/Solarman. There is now HA-observed evidence of both grid-charge and demand operation, not only a simulated plan. The software versions recorded at the 13 October check were Home Assistant 2026.10.1 and Solarman 26.01.31. This is evidence from one installation, not a model/firmware compatibility matrix.
The recorder also shows battery SOC reaching 31% at 23:04:30 UTC during the earlier charging interval. Together with zero reported PV and negative battery power, this is consistent with grid charging. The power samples are the latest recorded values at or before the receipt, not simultaneous calibrated measurements; they are not an efficiency calculation or proof that the eventual SOC target was reached. The later demand sample is consistent with solar supplying the house and charging the battery without grid import. Code/configuration provenance: the installed inverter file matches its deployment manifest, including the file retained during the earlier charge observation. Its generic service-sequence methods, routing wrapper and error class match public head Reproducible software checks on exact public head The template regression loads the actual shared YAML and exercises real native inverter/executor methods against synthetic HA: ordered disable → target → enable across all six rows, repeated-command idempotence, demand/manual minimum changes, failure before source enable, retry, reset, Monitor/read-only and absence of writes to unrelated settings. The generic sequence regressions additionally cover delayed/partial observations, rejection, exceptions and whole-list preflight. With the repository test environment prepared and that head checked out: cd coverage
./run_all --test service_sequences --test deye_solarman_template --test execute > template-tests.log 2>&1
grep -E 'PASSED|FAILED|ERROR' template-tests.logBoundaries: this evidence supports the template's charge/demand path on this installation. HA read-back and recorded telemetry are observations, not independent physical acknowledgements or a general production certification. Hold/freeze, forced export, Program Power control, outage recovery, other firmware and physical EV charging are not established by these observations. No new hardware actions, configuration changes, restarts or faster polling were performed to collect this report. The EV relay/slot were off at the latest check; no session was authorised or renewed. Only this role-labelled summary is published, not private configuration, entity/device identifiers or raw captures. Validation and remaining work
HA read-back is an observation, not hardware confirmation. Multi-row writes can partially apply; stopping Predbat/HA does not automatically undo persistent ToU settings. The shipped template remains guarded and installation-specific commissioning is still required. No physical EV charging session is claimed. EV session authority remains disabled/expired and was not renewed. Charging, pause/restart, actual departure SOC, realised savings, outage recovery and instantaneous power enforcement remain unverified. The 160 A domestic limits, reserve/shutdown, 6000 W Peak Shaving, separate 16000 W EV cutoff and EV hysteresis/cooldown remain unchanged. No forced relay actions, faster hardware polling, BMS bypass or additional control writer were introduced. |
718476c to
4546443
Compare
v9.4.0 update — 14 October 2026: this branch now includes the official release
9bbe3f75b8275781dd7418237444fb9ab6154b18through a fast-forward branch update with a merge commit; existing published history is preserved. Current head:1168ec7fdbc5d3c91558d84723bf3a98b93a3856. The three PRs remain independently owned. Their combined production code matches the v9.4.0 integration installed and verified at home at 15:30 UTC; the publication additionally corrects two optional-backend test runners. HA and the Predbat web UI reported v9.4.0, a fresh plan was generated without a runtime error, and protected settings were retained. Sustained physical EV delivery, deadline completion and real-tariff midnight savings remain unverified.Current-head CI: run 38594153482:
completed/action_required. Upstream execution awaits maintainer approval. Local validation is not an upstream CI pass.Summary
Replaces #5497 following the shared-template direction agreed in #5501.
9bbe3f75, independently of the diagnostics and joint-planning PRs. The template/service-sequence feature patch is unchanged.templates/deye_solarman.yamlusing the existing custominverter_type/inverter:mechanism. No new built-in brand, component or adapter.Supported scope and limits
The experimental template requests grid charging and ordinary self-consumption through all six ToU source/SOC rows. It does not program a six-period forecast into the inverter. Physical ToU times, Program Power, work mode, global currents, BMS and protection settings are not written.
It deliberately does not advertise forced export, freeze, hold, low-power/rate control, or a solar SOC ceiling. It ships with
template: true; verified installation settings, single-writer ownership and site-specific failure/recovery commissioning are prerequisites before using Control charge.HA read-back is an observation, not hardware confirmation. Group writes can partially apply; this is not an atomic transaction or a persistent-control watchdog. Stopping Predbat/HA does not undo ToU settings.
Initial development and validation did not change a live installation. Code from this PR is now installed at my home alongside #5486 and #5498, as reported above. Shared-template compatibility is implemented in #5498; planner-specific session/replay/execution gates remain owned there. This is not a claim of physical EV commissioning or a drop-in production recommendation.
Field evidence on one installation
There is now HA-observed grid-charge and demand operation on a SUN-16K-SG01LP1-EU: the retained 12 October charging receipt and recorder agree on all six rows at
Grid/ 59%; the 13 October 10:32 UTC read-only check finds all six atDisabled/ 10%, nativeDemandand no reported error. The installed template/control implementation was matched to this PR; those dated observations predate the complete v9.4.0 integration now installed. See the consolidated report for anonymised telemetry, source provenance and reproducible checks. These observations are not independent hardware acknowledgement or general firmware certification.Current v9.4.0 validation
1168ec7fdbc5d3c91558d84723bf3a98b93a3856: 347/347 registered test groups passed, including slow suites and a freshly built/loaded native kernel. No optional-backend skips.PREDBAT_JOINT_TEMPLATE_REQUIRED=1and a fresh native kernel; treeefe99e7dc749a91d346dd68c9cd2a9637bf03d09. The shared-file resolutions preserve the independent contributions.Earlier validation and test-contract details (13 October)
execute_plancharge/demand/Monitor/read-only paths. No mock service writes target physical times, global currents, work mode or protections.pre-commit run --all-files: all hooks pass.PREDBAT_KERNEL_REQUIRED=1 python ../apps/predbat/unit_test.py: all 346/346 registered test groups pass on this exact rebased tree, including slow tests, native-kernel parity and golden debug cases. A fresh kernel was built and loaded; indexed source hashes were unchanged across the run.