What's Changed
Planning improvement
Major speed improvements due to optimisations.
Better clipping algorithm to remove dead slots (ones only needed for 10%/90% scenario).
- feat(plan): model-based clipping — prune plan slots that are dead in the central forecast by @springfall2008 in #4491
- perf(plan): skip disabled windows in remove_intersecting_windows (3.1x faster planning) by @springfall2008 in #4505
- perf(prediction): build the kernel's ctypes arrays via array.array (1.9x faster planning) by @springfall2008 in #4509
- chore(plan): make the planner log readable at default verbosity by @springfall2008 in #4510
- fix(prediction): collision-safe simulation cache key + clip windows in the C++ kernel by @springfall2008 in #4508
WhatIf
Bug fixes
- fix(inverter): settle before verifying a GivTCP discharge target write by @chalfontchubby in #4492
- fix(output): apply load_scaling to the predicted load curve's future portion by @chalfontchubby in #4506
- fix(output): apply load_scaling_dynamic and manual_load_adjust to today_remaining by @chalfontchubby in #4511
- perf(plan): cache export-to-charge window collisions in the optimiser (1.5x faster planning) by @springfall2008 in #4507
- fix(solis): guard battery_scaling against a documented 0% SOH API response by @chalfontchubby in #4500
- fix(octopus): split a slot around a fully-contained overlap instead of losing its remainder by @chalfontchubby in #4504
PredBat Gateway
- feat(gateway): sync internal-DRAM fields into the shared status schema by @mgazza in #4495
- fix(gateway): pin EV charger entity ids to the charge point id by @mgazza in #4489
Full Changelog: v8.48.0...v8.48.1