github springfall2008/batpred v9.7.11
Anker SOLIX X1 support, Predheat fixes and °F support, optional web login, lower memory use

49 minutes ago

What's Changed

New features

  • docs(anker): Anker SOLIX X1 template, Home Assistant package and setup guide (#5066) by @pietrouk in #5677
  • feat(web): optional web_username/web_password login for settings pages by @springfall2008 in #6104
  • feat(config): currency_scale widens the range of money settings (#6155) by @springfall2008 in #6156
  • feat(fox): configurable fox_poll_seconds for the live data refresh by @springfall2008 in #6139
  • feat(core): share embedded startup stages and complete cycle policy by @mgazza in #5932
  • Leave Octopus saving sessions out of the History billing comparison, and estimate their Octopoints by @chalfontchubby in #6135

Bug fixes

  • fix(predheat): correct setpoint fallback, hysteresis and history lookback by @anzimber in #5767
  • fix(predheat): convert °F temperatures to °C on the way in, and publish in the user's unit by @chalfontchubby in #5958
  • fix(predheat): publish unknown instead of 0 for heat_to_temp when heating is off by @Huyvux12 in #6134
  • fix(predheat): allow the persisted volume temperature above 40 °C by @psweens in #6173
  • fix(ha): retry Home Assistant API during Predbat startup by @anzimber in #5766
  • fix(hass): log an unparseable apps.yaml to predbat.log with a !secret hint (#5530) by @springfall2008 in #5642
  • fix(inverter): accept inverter_reserve_max as one value or a per-inverter list (#5369) by @chalfontchubby in #5651
  • fix(inverter): ignore a battery_min_soc that names a reserve entity (#4013) by @chalfontchubby in #6137
  • fix(inverter): learn the charge curve from soc_percent without rescaling by battery_scaling (#6183) by @chalfontchubby in #6184
  • fix(prediction): a manual SoC target still costs something to miss at a 0p or negative rate (#5162) by @chalfontchubby in #6140
  • fix(execute): let a Hold charging battery discharge to its target on inverters with no target SoC (#5937) by @chalfontchubby in #5959
  • fix(sigenergy): use the plant's reported power ceiling when it is above the rating (#5784) by @chalfontchubby in #6180
  • fix(sigenergy): hold the reserve with a zero discharge rate in Demand (#5358) by @chalfontchubby in #6164
  • fix(sigenergy): send no commands when the plan cannot reach the component (#4894) by @chalfontchubby in #6167
  • fix(deye): read PV power on models without TotalSolarPower (#5016) by @Zedas030 in #6066
  • fix(growatt): release by clearing slots, back off unconfirmed writes, retry 105, open the export limit before exporting by @springfall2008 in #6177
  • fix(gateway): publish timeline_sub so devices can tell holds from charging by @mgazza in #5916
  • fix(gateway): hold set_read_only until the handover reset has written the safe state (#6175) by @springfall2008 in #6187
  • fix(solar): hash the solar forecast cache key so long URLs fit the filename limit (#6161) by @springfall2008 in #6165
  • fix(web): give older History days a daily stale-warning threshold by @chalfontchubby in #6128
  • fix(history): take the standing charge off the row that starts at midnight by @chalfontchubby in #6129

Performance

  • perf(memory): replace the requests library with an aiohttp-based helper by @springfall2008 in #6153
  • perf(memory): cut ~7 MB of idle memory (state cache, temperature history, unittest.mock import) by @springfall2008 in #6152
  • perf(mcp): sign MCP tokens with the standard library instead of PyJWT by @springfall2008 in #6176

Docs

  • Correct and clarify Predheat documentation by @graememorgan in #6032
  • docs(anker): add Marketplace install steps and drop stale watch_list entries by @springfall2008 in #6192
  • docs(hanchu): leave import_today automatic when the EV charger is outside the meter by @upton68 in #6149
  • docs(hanchu): move the hanchu-ess-ha bridge guide out of the Predbat docs by @upton68 in #6148
  • docs(debug-journal): keep the Deye error-sentinel conjecture marked as suspected by @springfall2008 in #6179
  • docs(debug-journal): fold the 2026-11-05..11-06 queue slice (15 candidates) by @springfall2008 in #6159
  • docs(debug-journal): fold the 2026-11-03..11-05 queue slice (13 of 15 folded, 2 dropped); correct entries fixed by #5907/#6038/#6101/#6098; rewrite the Growatt section for the merged component by @springfall2008 in #6141

Maintenance

  • refactor(givtcp): asynchronous REST client on one shared session by @springfall2008 in #6160
  • refactor(components): Hanchu and Gateway use the shared on_component_loop hand-over by @springfall2008 in #6162
  • ci: give every workflow job a timeout by @springfall2008 in #6191
  • style(tests): apply black to test_savings_bookkeeping.py (code-quality red on main) by @chalfontchubby in #6186
  • fix(tests): web auth test uses http_sync, not the removed requests library by @springfall2008 in #6163
  • Ask for log files and an update up front: template note, triage skills and an attachment nudge by @chalfontchubby in #6166
  • feat(triage): let the bot replay a reporter's log forwards from their debug yaml by @springfall2008 in #6168

New Contributors

Full Changelog: v9.7.10...v9.7.11

Don't miss a new batpred release

NewReleases is sending notifications on new releases.