Cuts 0.13.0: config.yamlversion 0.12.0 -> 0.13.0 and a closed ## 0.13.0 CHANGELOG section. No code change.
Version: 0.13.0 (minor). New behaviour and six new options (77 -> 83), none removed or renamed, no existing default changed. Same rule 0.11.0 and 0.12.0 were cut on (option surface moves = minor).
Checks run locally (offline, nothing live touched):
test_version_gate.py, test_docs.py, test_defaults_pin.py, test_validate.py, test_tool_inputs.py: all pass.
tools/predeploy_check.py --deployed-version 0.12.0 --options <data.options of data/live-options-now.json>: CLEARED (before the bump it REFUSED as a no-op, 73 runtime commits behind an unchanged version). Note: that options snapshot is from 2026-09-24 and says 0.11.0 (76 keys); the deploy must re-run it against a fresh export.
Deviations from docs/RELEASE.md
RELEASE.md step 1 says "bump version: on release/1.0". Done here as its own PR into release/1.0 (branch release-0.13.0), since release/1.0 is protected and takes no direct push. Same as PKG-18 (#117) for 0.12.0.
RELEASE.md does not mention the CHANGELOG at all; the CI version gate (test_version_gate.py part 11) requires a closed ## <version> section with exactly one "in merge order since" table and the three withdrawn price_provider ids named. Written to that gate.
RELEASE.md does not mention tags. v0.12.0 sits on the master ship commit (3ce1870), not on release/1.0. No tag made here; tagging v0.13.0 on the master merge commit is left to the manager.
Not a RELEASE.md deviation, but wider than the brief: git log v0.12.0..release/1.0 (158 commits, the same set as from the 0.12.0 cut a45ed06) holds 43 first-parent merges, #119-#163, not only SAFETY-78..87 and OPT-11 P3/P4. All are listed.
RELEASE.md does not ask for predeploy_check.py at cut time; run anyway, offline only.
What the deploy step needs (from RELEASE.md, for the manager's brief)
After this PR is merged into release/1.0:
Open a PR release/1.0 -> master. No push to master (pre-receive hook refuses).
Wait for checks / unit (pull_request) to be green (a skipped is not green).
Merge it (pin head_commit_id). Merging to master is a deployment: it needs the owner's explicit go.
Reload the store and update on the box: ssh root@192.168.2.158 "ha store reload && ha addons update local_goodwe_controller". This conflicts with the standing "no ha addons update" constraint, so the deploy needs its own owner go that lifts it.
Before step 4: re-run predeploy_check.py with the live data.options and the deployed version read from the box.
Make sure Watchdog is on for the add-on (SAFETY-61 / DOC-5).
Rollback: revert on release/1.0, bump again, through the same path (RELEASE.md §3); /addons/ rollback is in HANDOVER.md.
Known issue SAFETY-93: do not adopt a second inverter on this version.
CHANGELOG section
0.13.0
A minor bump: new behaviour, a new settings page, and six new options.
No option was removed or renamed, and no default of an existing option
changed (77 options -> 83). The live options blob on record passes this
version's validator (tools/predeploy_check.py, offline).
New options, and what they do if you leave them alone:
option
default
left alone
peak_margin_w
50
the peak guard aims 50 W below your peak limit; set 0 for the old aim (SAFETY-79)
⚠️Turn on Watchdog on the add-on's Info tab. If control stops, the
add-on now sets the batteries to 0 W and exits; Home Assistant only starts it
again when Watchdog is on (SAFETY-61, DOC-5).
Contents of this release, in merge order since 0.12.0 (a45ed06):
fa3d237
Docs name the right P1 age entity and a battery list that starts (DOC-1)
6e65272
If control stops, the batteries go to 0 W and the add-on exits (SAFETY-61)
3e38baf
The check tools refuse a file they cannot read, instead of saying all clear (SAFETY-60, SAFETY-62)
43b2740
A missing value in a check is a named failure (tests only) (TEST-26)
Battery modes (off by default): per-battery limits, on/off, solar order (OPT-11)
7995e4d
Simple settings view and a Batteries screen (UX-13)
7337b79
Battery modes in Home Assistant, when modes are on (OPT-11)
7a00f12
New option peak_margin_w: the peak guard keeps a margin below the limit (SAFETY-79)
5a4cdc2
Battery modes: charge in cheap hours, hold for expensive hours; selling is off for now (OPT-11)
4f25b24
No false "Load too high" alarms at quarter edges or with a noisy load (10 s hold) (SAFETY-81)
35cdffe
Maintenance drain with two batteries no longer stalls (SAFETY-78)
1145a93
Battery modes: a solar forecast decides how much to buy from the grid (OPT-11)
9d5b7d1
With one battery, the peak guard wins over the maintenance drain (SAFETY-83)
4ad8298
Maintenance charge with two batteries no longer stalls; it gives way to the peak guard (SAFETY-84)
b8ddfd7
The peak guard wins over the maintenance hold; the hold ends on time, with no top-up (SAFETY-86)
9358781
With two or more batteries, the peak guard uses every battery that can still give; peak alarms no longer say control stopped (SAFETY-87)
61072ca
No false "Battery is not keeping up" during maintenance; real shortfalls still warn; the counter counts episodes (SAFETY-85)
Known issues
A false "Battery is not keeping up" can still show when the peak guard pauses a maintenance charge (SAFETY-92).
Two inverters: at the end of a maintenance charge one battery can charge from the grid while the house uses a lot. Do not add a second inverter before the next release (SAFETY-93).
A healthy battery that turns from charging to giving can be held at 0 W for up to 15 min (SAFETY-94).
After a gap in the P1 meter, the peak guard is blind for the rest of that quarter hour (SAFETY-90).
Two batteries: one at its peak reserve can be used before a draining battery has used its room (SAFETY-91).
If you are crossing from a version older than 0.10.0
## 0.10.0 below can refuse an old config: slew_w above its limit, and the
withdrawn price_provider ids engie_dynamic, totalenergies_dynamic and eneco_eddy. Read it before you update. Run tools/predeploy_check.py with the
bare options (jq '.data.options') first.
Cuts **0.13.0**: `config.yaml` `version` 0.12.0 -> 0.13.0 and a closed `## 0.13.0` CHANGELOG section. No code change.
**Version: 0.13.0 (minor).** New behaviour and six new options (77 -> 83), none removed or renamed, no existing default changed. Same rule 0.11.0 and 0.12.0 were cut on (option surface moves = minor).
**Checks run locally (offline, nothing live touched):**
- `test_version_gate.py`, `test_docs.py`, `test_defaults_pin.py`, `test_validate.py`, `test_tool_inputs.py`: all pass.
- `tools/predeploy_check.py --deployed-version 0.12.0 --options <data.options of data/live-options-now.json>`: **CLEARED** (before the bump it REFUSED as a no-op, 73 runtime commits behind an unchanged version). Note: that options snapshot is from 2026-09-24 and says 0.11.0 (76 keys); the deploy must re-run it against a fresh export.
## Deviations from docs/RELEASE.md
1. RELEASE.md step 1 says "bump `version:` on `release/1.0`". Done here as its own PR into `release/1.0` (branch `release-0.13.0`), since `release/1.0` is protected and takes no direct push. Same as PKG-18 (#117) for 0.12.0.
2. RELEASE.md does not mention the CHANGELOG at all; the CI version gate (`test_version_gate.py` part 11) requires a closed `## <version>` section with exactly one "in merge order since" table and the three withdrawn `price_provider` ids named. Written to that gate.
3. RELEASE.md does not mention tags. `v0.12.0` sits on the `master` ship commit (`3ce1870`), not on `release/1.0`. No tag made here; tagging `v0.13.0` on the master merge commit is left to the manager.
4. Not a RELEASE.md deviation, but wider than the brief: `git log v0.12.0..release/1.0` (158 commits, the same set as from the 0.12.0 cut `a45ed06`) holds 43 first-parent merges, #119-#163, not only SAFETY-78..87 and OPT-11 P3/P4. All are listed.
5. RELEASE.md does not ask for `predeploy_check.py` at cut time; run anyway, offline only.
## What the deploy step needs (from RELEASE.md, for the manager's brief)
After this PR is merged into `release/1.0`:
1. Open a PR **`release/1.0` -> `master`**. No push to `master` (pre-receive hook refuses).
2. Wait for `checks / unit (pull_request)` to be **green** (a `skipped` is not green).
3. Merge it (pin `head_commit_id`). Merging to `master` is a deployment: it needs the owner's explicit go.
4. Reload the store and update on the box: `ssh root@192.168.2.158 "ha store reload && ha addons update local_goodwe_controller"`. This conflicts with the standing "no `ha addons update`" constraint, so the deploy needs its own owner go that lifts it.
5. Before step 4: re-run `predeploy_check.py` with the live `data.options` and the deployed version read from the box.
6. Make sure **Watchdog** is on for the add-on (SAFETY-61 / DOC-5).
7. Rollback: revert on `release/1.0`, bump again, through the same path (RELEASE.md §3); `/addons/` rollback is in HANDOVER.md.
8. Known issue SAFETY-93: do not adopt a second inverter on this version.
## CHANGELOG section
## 0.13.0
**A minor bump: new behaviour, a new settings page, and six new options.**
No option was removed or renamed, and no default of an existing option
changed (77 options -> 83). The live options blob on record passes this
version's validator (`tools/predeploy_check.py`, offline).
New options, and what they do if you leave them alone:
| option | default | left alone |
|---|---|---|
| `peak_margin_w` | `50` | the peak guard aims 50 W below your peak limit; set `0` for the old aim ([[SAFETY-79]]) |
| `battery_modes_enabled` | `false` | no battery modes, control as before ([[OPT-11]]) |
| `pv_forecast_entity`, `pv_forecast_tomorrow_entity` | empty | no solar forecast is used ([[OPT-11]]) |
| `solar_trust_pct` | `70` | only used with a solar forecast ([[OPT-11]]) |
| `pv_invert_entities` | `[]` | PV readings as before ([[TEL-14]]) |
⚠️ **Turn on Watchdog** on the add-on's Info tab. If control stops, the
add-on now sets the batteries to 0 W and exits; Home Assistant only starts it
again when Watchdog is on ([[SAFETY-61]], [[DOC-5]]).
Contents of this release, in merge order since 0.12.0 (`a45ed06`):
| | |
|---|---|
| `fa3d237` | Docs name the right P1 age entity and a battery list that starts ([[DOC-1]]) |
| `6e65272` | If control stops, the batteries go to 0 W and the add-on exits ([[SAFETY-61]]) |
| `3e38baf` | The check tools refuse a file they cannot read, instead of saying all clear ([[SAFETY-60]], [[SAFETY-62]]) |
| `43b2740` | A missing value in a check is a named failure (tests only) ([[TEST-26]]) |
| `20260e8` | Docs: turn on Watchdog ([[DOC-5]]) |
| `16c796f` | New option `pv_invert_entities`: flip the sign of a PV sensor that reads backwards ([[TEL-14]]) |
| `6a8a5ff` | CI tests against the real inverter simulator (CI only) ([[CI-12]]) |
| `82f032e` | CI pin checks report failures properly (CI only) ([[TOOL-9]]) |
| `fe13251` | CI pin update (CI only) |
| `397dd15` | Alarm cards come back after a Home Assistant restart ([[SAFETY-34]]) |
| `59415ea` | CI pin update (CI only) |
| `2503de1` | The integrator limit is a warning, not a "bug" alarm; alarm figures are correct ([[SAFETY-40]]) |
| `48ef06a` | Shorter, plainer notifications ([[UX-08]]) |
| `5c151a3` | CI pin update (CI only) |
| `d57767f` | Shorter, plainer status rows and banners ([[UX-08]]) |
| `e1d0970` | Details link works on current Home Assistant; plainer words ([[UX-09]]) |
| `a02cd4b` | Shorter refusals, errors and option texts ([[UX-08]]) |
| `32b9e56` | Plainer log lines and docs ([[UX-08]]) |
| `125b070` | CI pin update (CI only) |
| `2b14b88` | Last plain-language fixes in logs and the status page ([[UX-10]]) |
| `c4032eb` | CI pin update (CI only) |
| `d1f7e33` | Safety log lines: one plain sentence and a code ([[UX-11]]) |
| `652097a` | A battery that stops responding is asked for 0 W, with a 200 W test every 15 min ([[SAFETY-52]]) |
| `afd6af0` | Groundwork for the new settings pages ([[UX-13]]) |
| `a36dca6` | New page with a Home screen ([[UX-13]]) |
| `28a49cc` | With two or more inverters, a battery that stops responding is held on its own ([[SAFETY-73]]) |
| `515c11b` | New Installer settings view ([[UX-13]]) |
| `4de9675` | New setup wizard for installers ([[UX-13]]) |
| `8c34647` | A new install with no inverter opens the setup wizard instead of stopping ([[UX-15]]) |
| `a5dddad` | Dutch text and a time-period editor ([[UX-13]]) |
| `ed739d4` | Battery modes (off by default): per-battery limits, on/off, solar order ([[OPT-11]]) |
| `7995e4d` | Simple settings view and a Batteries screen ([[UX-13]]) |
| `7337b79` | Battery modes in Home Assistant, when modes are on ([[OPT-11]]) |
| `7a00f12` | New option `peak_margin_w`: the peak guard keeps a margin below the limit ([[SAFETY-79]]) |
| `5a4cdc2` | Battery modes: charge in cheap hours, hold for expensive hours; selling is off for now ([[OPT-11]]) |
| `4f25b24` | No false "Load too high" alarms at quarter edges or with a noisy load (10 s hold) ([[SAFETY-81]]) |
| `35cdffe` | Maintenance drain with two batteries no longer stalls ([[SAFETY-78]]) |
| `1145a93` | Battery modes: a solar forecast decides how much to buy from the grid ([[OPT-11]]) |
| `9d5b7d1` | With one battery, the peak guard wins over the maintenance drain ([[SAFETY-83]]) |
| `4ad8298` | Maintenance charge with two batteries no longer stalls; it gives way to the peak guard ([[SAFETY-84]]) |
| `b8ddfd7` | The peak guard wins over the maintenance hold; the hold ends on time, with no top-up ([[SAFETY-86]]) |
| `9358781` | With two or more batteries, the peak guard uses every battery that can still give; peak alarms no longer say control stopped ([[SAFETY-87]]) |
| `61072ca` | No false "Battery is not keeping up" during maintenance; real shortfalls still warn; the counter counts episodes ([[SAFETY-85]]) |
### Known issues
- A false "Battery is not keeping up" can still show when the peak guard pauses a maintenance charge ([[SAFETY-92]]).
- Two inverters: at the end of a maintenance charge one battery can charge from the grid while the house uses a lot. Do not add a second inverter before the next release ([[SAFETY-93]]).
- A healthy battery that turns from charging to giving can be held at 0 W for up to 15 min ([[SAFETY-94]]).
- After a gap in the P1 meter, the peak guard is blind for the rest of that quarter hour ([[SAFETY-90]]).
- Two batteries: one at its peak reserve can be used before a draining battery has used its room ([[SAFETY-91]]).
### If you are crossing from a version older than 0.10.0
`## 0.10.0` below can refuse an old config: `slew_w` above its limit, and the
withdrawn `price_provider` ids `engie_dynamic`, `totalenergies_dynamic` and
`eneco_eddy`. Read it before you update. Run `tools/predeploy_check.py` with the
bare options (`jq '.data.options'`) first.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_019DBUfvndgHwaV339Fvd2gr
Bump config.yaml version 0.12.0 -> 0.13.0 and close a ## 0.13.0
CHANGELOG section covering every merge since 0.12.0 (a45ed06), with the
known issues SAFETY-90/91/92/93/94. Option surface 77 -> 83, none removed.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review round 1 (REL-0.13.0 review agent). Checked: version (6 new options, 0 removed/renamed, no existing default or schema changed: minor is right), all 43 first-parent merges #119-#163 listed once in merge order with the right SHAs, CI green on 28cab03, and test_version_gate, test_docs, test_validate, test_defaults_pin pass in the CI image. Findings on the owner-facing text, all in CHANGELOG.md; I push the fixes myself.
"If control stops" is wrong and alarming (Watchdog warning and row 6e65272). Pressing Stop also stops control, and that does not exit. SAFETY-61 is about the control loop crashing. Fix: "If the control loop crashes". Also say Watchdog is off by default, which is why the owner must act.
The peak margin is a behaviour change on every install, but the header says "no default of an existing option changed", which reads as "nothing changes". Add a ⚠️ line of its own. The table row also misses that the 50 W margin applies under a higher month peak already reached too (SAFETY-79 "banked peak", owner decision 2026-09-29).
Header sentence "The live options blob on record passes this version's validator" is about one house, from a 0.11.0 snapshot of 2026-09-24, and means nothing to another client. Replace with the general, checked fact: the only new start-up checks are on the new options (validate.py rules 12 and 13; every other refusal changed wording only), so options that start 0.12.0 start 0.13.0.
SAFETY-52 / SAFETY-73 rows say "stops responding". That reads as lost comms. It is a battery that gives no power when asked (e.g. empty); the page says "refuses". The 200 W test also lasts 34 s.
SAFETY-40 row: "integrator limit" is jargon. The owner sees "Battery is not keeping up"; say that, and that it has its own notification now.
SAFETY-85 row: "the counter counts episodes": which counter? It is the status row, "N times since start".
SAFETY-60/62 row is tools only (operator check tools, not the add-on); mark it like the CI rows.
Header: "a new settings page" undersells it. The whole add-on page is new (Home, Settings, Batteries, Setup).
SAFETY-34 row: "Alarm cards" means HA notifications; say "Alarm notifications that are still active".
Known issues SAFETY-90..94: wording is plain and consistent with the code and HANDOVER (SAFETY-91); no change asked.
**Review round 1 (REL-0.13.0 review agent).** Checked: version (6 new options, 0 removed/renamed, no existing default or schema changed: minor is right), all 43 first-parent merges #119-#163 listed once in merge order with the right SHAs, CI green on 28cab03, and `test_version_gate`, `test_docs`, `test_validate`, `test_defaults_pin` pass in the CI image. Findings on the owner-facing text, all in `CHANGELOG.md`; I push the fixes myself.
1. **"If control stops" is wrong and alarming** (Watchdog warning and row `6e65272`). Pressing Stop also stops control, and that does not exit. SAFETY-61 is about the control loop *crashing*. Fix: "If the control loop crashes". Also say Watchdog is **off by default**, which is why the owner must act.
2. **The peak margin is a behaviour change on every install, but the header says "no default of an existing option changed"**, which reads as "nothing changes". Add a ⚠️ line of its own. The table row also misses that the 50 W margin applies under a higher month peak already reached too (SAFETY-79 "banked peak", owner decision 2026-09-29).
3. **Header sentence "The live options blob on record passes this version's validator"** is about one house, from a 0.11.0 snapshot of 2026-09-24, and means nothing to another client. Replace with the general, checked fact: the only new start-up checks are on the new options (validate.py rules 12 and 13; every other refusal changed wording only), so options that start 0.12.0 start 0.13.0.
4. **SAFETY-52 / SAFETY-73 rows say "stops responding"**. That reads as lost comms. It is a battery that gives no power when asked (e.g. empty); the page says "refuses". The 200 W test also lasts 34 s.
5. **SAFETY-40 row: "integrator limit" is jargon.** The owner sees "Battery is not keeping up"; say that, and that it has its own notification now.
6. **SAFETY-85 row: "the counter counts episodes"**: which counter? It is the status row, "N times since start".
7. **SAFETY-60/62 row** is tools only (operator check tools, not the add-on); mark it like the CI rows.
8. Header: "a new settings page" undersells it. The whole add-on page is new (Home, Settings, Batteries, Setup).
9. SAFETY-34 row: "Alarm cards" means HA notifications; say "Alarm notifications that are still active".
Known issues SAFETY-90..94: wording is plain and consistent with the code and HANDOVER (SAFETY-91); no change asked.
Crash, not stop, for SAFETY-61; Watchdog off by default; its own
warning for the 50 W peak margin (also under a higher month peak);
"refuses power" for SAFETY-52/73; no one-house options claim.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Round 1 fixed in b37b7f9 (CHANGELOG.md only; test_version_gate and test_docs pass in the CI image). Points 1-9 of the comment above are all done:
"If the control loop crashes ... and stops", plus "It is off by default" (Watchdog warning and row 6e65272).
Its own ⚠️ line: the peak guard starts a little earlier, aiming 50 W below the limit; peak_margin_w: 0 restores the old aim. The table row now covers a higher month peak too.
The one-house sentence is replaced by: the only new start-up checks are on the new options, so options that start 0.12.0 start 0.13.0. Checked: in the validator diff, refusal logic changed only in rules 12 (peak_margin_w) and 13 (forecast/trust); every other refusal changed wording only.
4-9. "refuses power (e.g. empty) ... 200 W for 34 s every 15 min"; "Battery is not keeping up" named; "status row counts each episode once"; "(tools only)"; "a new add-on page (Home, Settings, Batteries, Setup)"; "Alarm notifications that are still active".
Waiting for checks / unit on b37b7f9 before merging.
**Round 1 fixed in `b37b7f9`** (CHANGELOG.md only; `test_version_gate` and `test_docs` pass in the CI image). Points 1-9 of the comment above are all done:
1. "If the control loop crashes ... and stops", plus "It is off by default" (Watchdog warning and row `6e65272`).
2. Its own ⚠️ line: the peak guard starts a little earlier, aiming 50 W below the limit; `peak_margin_w: 0` restores the old aim. The table row now covers a higher month peak too.
3. The one-house sentence is replaced by: the only new start-up checks are on the new options, so options that start 0.12.0 start 0.13.0. Checked: in the validator diff, refusal logic changed only in rules 12 (`peak_margin_w`) and 13 (forecast/trust); every other refusal changed wording only.
4-9. "refuses power (e.g. empty) ... 200 W for 34 s every 15 min"; "Battery is not keeping up" named; "status row counts each episode once"; "(tools only)"; "a new add-on page (Home, Settings, Batteries, Setup)"; "Alarm notifications that are still active".
Waiting for `checks / unit` on b37b7f9 before merging.
admin
merged commit 8c438ab2e6 into release/1.02026-10-02 10:04:13 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Cuts 0.13.0:
config.yamlversion0.12.0 -> 0.13.0 and a closed## 0.13.0CHANGELOG section. No code change.Version: 0.13.0 (minor). New behaviour and six new options (77 -> 83), none removed or renamed, no existing default changed. Same rule 0.11.0 and 0.12.0 were cut on (option surface moves = minor).
Checks run locally (offline, nothing live touched):
test_version_gate.py,test_docs.py,test_defaults_pin.py,test_validate.py,test_tool_inputs.py: all pass.tools/predeploy_check.py --deployed-version 0.12.0 --options <data.options of data/live-options-now.json>: CLEARED (before the bump it REFUSED as a no-op, 73 runtime commits behind an unchanged version). Note: that options snapshot is from 2026-09-24 and says 0.11.0 (76 keys); the deploy must re-run it against a fresh export.Deviations from docs/RELEASE.md
version:onrelease/1.0". Done here as its own PR intorelease/1.0(branchrelease-0.13.0), sincerelease/1.0is protected and takes no direct push. Same as PKG-18 (#117) for 0.12.0.test_version_gate.pypart 11) requires a closed## <version>section with exactly one "in merge order since" table and the three withdrawnprice_providerids named. Written to that gate.v0.12.0sits on themastership commit (3ce1870), not onrelease/1.0. No tag made here; taggingv0.13.0on the master merge commit is left to the manager.git log v0.12.0..release/1.0(158 commits, the same set as from the 0.12.0 cuta45ed06) holds 43 first-parent merges, #119-#163, not only SAFETY-78..87 and OPT-11 P3/P4. All are listed.predeploy_check.pyat cut time; run anyway, offline only.What the deploy step needs (from RELEASE.md, for the manager's brief)
After this PR is merged into
release/1.0:release/1.0->master. No push tomaster(pre-receive hook refuses).checks / unit (pull_request)to be green (askippedis not green).head_commit_id). Merging tomasteris a deployment: it needs the owner's explicit go.ssh root@192.168.2.158 "ha store reload && ha addons update local_goodwe_controller". This conflicts with the standing "noha addons update" constraint, so the deploy needs its own owner go that lifts it.predeploy_check.pywith the livedata.optionsand the deployed version read from the box.release/1.0, bump again, through the same path (RELEASE.md §3);/addons/rollback is in HANDOVER.md.CHANGELOG section
0.13.0
A minor bump: new behaviour, a new settings page, and six new options.
No option was removed or renamed, and no default of an existing option
changed (77 options -> 83). The live options blob on record passes this
version's validator (
tools/predeploy_check.py, offline).New options, and what they do if you leave them alone:
peak_margin_w500for the old aim (SAFETY-79)battery_modes_enabledfalsepv_forecast_entity,pv_forecast_tomorrow_entitysolar_trust_pct70pv_invert_entities[]⚠️ Turn on Watchdog on the add-on's Info tab. If control stops, the
add-on now sets the batteries to 0 W and exits; Home Assistant only starts it
again when Watchdog is on (SAFETY-61, DOC-5).
Contents of this release, in merge order since 0.12.0 (
a45ed06):fa3d2376e652723e38baf43b274020260e816c796fpv_invert_entities: flip the sign of a PV sensor that reads backwards (TEL-14)6a8a5ff82f032efe13251397dd1559415ea2503de148ef06a5c151a3d57767fe1d0970a02cd4b32b9e56125b0702b14b88c4032ebd1f7e33652097aafd6af0a36dca628a49cc515c11b4de96758c34647a5dddaded739d47995e4d7337b797a00f12peak_margin_w: the peak guard keeps a margin below the limit (SAFETY-79)5a4cdc24f25b2435cdffe1145a939d5b7d14ad8298b8ddfd7935878161072caKnown issues
If you are crossing from a version older than 0.10.0
## 0.10.0below can refuse an old config:slew_wabove its limit, and thewithdrawn
price_provideridsengie_dynamic,totalenergies_dynamicandeneco_eddy. Read it before you update. Runtools/predeploy_check.pywith thebare options (
jq '.data.options') first.🤖 Generated with Claude Code
https://claude.ai/code/session_019DBUfvndgHwaV339Fvd2gr
Review round 1 (REL-0.13.0 review agent). Checked: version (6 new options, 0 removed/renamed, no existing default or schema changed: minor is right), all 43 first-parent merges #119-#163 listed once in merge order with the right SHAs, CI green on
28cab03, andtest_version_gate,test_docs,test_validate,test_defaults_pinpass in the CI image. Findings on the owner-facing text, all inCHANGELOG.md; I push the fixes myself.6e65272). Pressing Stop also stops control, and that does not exit. SAFETY-61 is about the control loop crashing. Fix: "If the control loop crashes". Also say Watchdog is off by default, which is why the owner must act.Known issues SAFETY-90..94: wording is plain and consistent with the code and HANDOVER (SAFETY-91); no change asked.
Round 1 fixed in
b37b7f9(CHANGELOG.md only;test_version_gateandtest_docspass in the CI image). Points 1-9 of the comment above are all done:6e65272).peak_margin_w: 0restores the old aim. The table row now covers a higher month peak too.peak_margin_w) and 13 (forecast/trust); every other refusal changed wording only.4-9. "refuses power (e.g. empty) ... 200 W for 34 s every 15 min"; "Battery is not keeping up" named; "status row counts each episode once"; "(tools only)"; "a new add-on page (Home, Settings, Batteries, Setup)"; "Alarm notifications that are still active".
Waiting for
checks / unitonb37b7f9before merging.