What's new in v9.6.0
Cap each car's charge rate at what the car can take: a car's planned charge rate could exceed what the car accepts. For example, a 3.6 kW plug-in hybrid on a 7.4 kW charger was planned at 7.4 kW, so its charge window came out too short. A new optional apps.yaml setting, car_charging_max_rate, takes one entry per car: a number in kW, or a sensor. Each car's charge rate is capped at it, including after Octopus Intelligent raises it to the charger's power. A blank entry or 0 means no cap. The ML load model's car-load subtraction uses the capped rate too.
Predbat no longer stalls when the clocks go back: in standalone mode (Predbat.com and Docker), the scheduler compared due times with the local wall clock. When the clocks went back, the next run was an hour away again, so Predbat stopped planning and controlling the inverter for up to an hour overnight, often during a charge window. Due times are now kept in UTC. The file watcher had the same flaw and could restart Predbat in the repeated hour; that is fixed too.
Teslemetry: no battery exports a Powerwall is not permitted to make: a Powerwall left at Tesla's installer-level Solar Only export permission accepts export commands but only covers the house load. Predbat now reads the permission, publishes binary_sensor.predbat_teslemetry_battery_export_permitted, warns once with the Tesla One setting to change, and stops planning battery exports. Spare-solar export is still planned. Set teslemetry_battery_export to true or false to override the detection.
Octopus and Kraken back off when rate limited: a rate-limited request is no longer retried straight away. Octopus GraphQL polling pauses (2 minutes, doubling to 30 minutes, or longer if Octopus asks), and a rate-limited token request uses the existing backoff. On Kraken (EDF, E.ON), a rate-limited token request no longer disables the provider until restart.
Sigenergy with a third-party PV inverter: on a SigenStor with an AC-coupled PV inverter (for example SolarEdge), PV power read 0 on every cloud REST poll, and inverter_hybrid was left on. PV power is now rebuilt from the energy balance on these systems, and inverter_hybrid is switched off automatically when every system is AC-coupled. REST polls are also less frequent: the MQTT feed now counts as fresh for 450 seconds instead of 300, so normal message jitter no longer triggers one.
Hypervolt on the shared charger control: the Hypervolt now uses the same control as the GivEnergy, myenergi and Ohme chargers. That means it handles Intelligent Octopus when Octopus drives the car rather than the charger, supports switch.predbat_hypervolt_guest_charging, and puts back a stop or start made in the Hypervolt app. A charger Predbat stopped is still always released, including after a restart or while offline. Readings now match a real V3 charger, so charge power no longer reads near 0 W for the first moments of a charge.
EV chargers
- Cap each car's planned charge rate at its own max rate (
car_charging_max_rate) by @mgazza in #5669 - Hypervolt: run Predbat-led charging on the shared charger control by @chalfontchubby in #5791
- Hypervolt: match what a real V3 charger sends by @chalfontchubby in #5771
- Gateway: reconcile EV control and honour read-only overrides by @mgazza in #5739
Octopus and rates
- Octopus, Kraken: back off when rate limited instead of retrying at once by @springfall2008 in #5781
- AgilePredict: cache forecasts for three hours, matching its update schedule by @mgazza in #5792
Inverters
- Teslemetry: stop planning battery exports a Powerwall is not permitted to make (#5710) by @springfall2008 in #5782
- Sigenergy: detect AC coupling for
inverter_hybridand recover third-party PV by @springfall2008 in #5789 - Sigenergy: widen the MQTT freshness window to 450 s so cadence jitter doesn't trigger REST polls by @springfall2008 in #5790
- GE Cloud: name the device and setting in request-rejected warnings (#5777) by @springfall2008 in #5800
Scheduler
- Keep the scheduler running when the clocks go back (#5770) by @chalfontchubby in #5772
Tests
- Test that a target export stands in for Freeze Export by @springfall2008 in #5780
Documentation
- Restructure the development guide around the branch, test and PR workflow by @gcoan in #5763
- Debug journal: fold the 2026-10-24..26 queue slice by @springfall2008 in #5774
- Debug journal: fold the 2026-10-24..27 queue slice by @springfall2008 in #5803
Full Changelog: v9.5.3...v9.6.0