Release 0.13.0 #164

Merged
admin merged 2 commits from release-0.13.0 into release/1.0 2026-10-02 10:04:13 +02:00
Owner

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.ai/code/session_019DBUfvndgHwaV339Fvd2gr

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
admin added 1 commit 2026-10-02 09:05:26 +02:00
REL-0.13.0: cut 0.13.0
checks / unit (pull_request) Successful in 25m55s
infra-pin / fresh (pull_request) Successful in 2s
28cab03947
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>
Author
Owner

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.

**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.
admin added 1 commit 2026-10-02 09:37:36 +02:00
REL-0.13.0 review: plainer, truer 0.13.0 changelog
checks / unit (pull_request) Successful in 25m52s
infra-pin / fresh (pull_request) Successful in 1s
b37b7f95dc
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>
Author
Owner

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.

**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.0 2026-10-02 10:04:13 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: admin/goodwe-addon#164