github ffunes/Omnibattery v1.6.1b1

pre-releaseone hour ago

[1.6.1b1] - 2026-11-10

Changed

  • Time Slot: no charging and discharging inside the same window: inside a configured window the battery now discharges only down to the energy needed after the window, and the grid covers the house for the rest of it. The window charges only what is needed after it, so energy is no longer bought in the window and spent in the same window, which lost the round trip on it. A window that needs no charge still lets the battery discharge its spare energy. Weekly full charge and Dynamic Pricing are unchanged.
  • Panel: shorter Daily operation card: the subtitle line is gone; the 15-min interval now sits in the Real / Forecast chip, and the legend's areas and lines share one row.

Fixed

  • Discharge Reserve keeps energy for tomorrow's evening when tomorrow's sun cannot refill the battery (#840): in the evening the reserve planned only to the next sunrise (or to where the sun covers the house that morning), so on a dull day the morning spent what the evening peak needed. When tomorrow's forecast never covers the house, the reserve now plans to the same extended horizon as the charge planner. Thanks to @Sjoedzj.
  • Dynamic Pricing: no night charge for the morning peak with the Discharge Reserve off (#834): 1.6.0 rejected every night slot that ends before an hour left to the grid, so a flat night before a peak booked nothing (cheaper_to_import_kwh = full deficit). Such a slot now also stores what those hours drain and is booked when the peak repays that drain. Thanks to @locmer and @Sk1dmaster.
  • Dynamic Pricing: tomorrow's planning horizon no longer drops for 30 min after a failed forecast fetch (#817): an empty answer from the Energy dashboard solar forecast kept the previous periods and is retried after a minute, instead of collapsing the plan to the next sunrise. The new planning_horizon_reason attribute on the predictive charging sensor says why the horizon did or did not extend past the sunrise. Thanks to @Sjoedzj.
  • Time Slot / Real-Time Price: a window running through midnight now covers the night after it (PR#818): a window such as 22:00-07:00, or a cheap Real-Time run still charging, is re-evaluated for the new day from 00:05, so the 22:00 "nothing needed until midnight" decision no longer leaves the battery empty at sunrise. Thanks to @pocketware.
  • Dynamic Pricing planner fixes (PR#818): battery room is simulated slot by slot in time order; slots are sized by what the house leaves of the grid import cap; tomorrow's charge is planned even when the battery is full now, and the planned grid charge no longer reads 0 kWh while slots are booked (#838); the evening re-evaluation re-plans the slots it keeps and drops stale pre-slot decisions; DST nights no longer break the price slots. Thanks to @pocketware.
  • Dynamic Pricing: late prices and failing price services (PR#818): late prices are retried all day; Tibber, Nord Pool and EnergyZero refreshes back off (1/5/15 min, 30 s timeout) instead of hammering a failing service; evaluations from the button, switches, startup and 00:05 no longer run in parallel. Thanks to @pocketware.
  • Predictive charging notifications say why (PR#818): "waiting for prices" instead of "cheaper to import", the reason when no slot was selected, and the energy planned in tomorrow's slots. Thanks to @pocketware.
  • Robustness (PR#818): a failing predictive step falls back to normal control instead of stopping the cycle; one failing driver no longer aborts unloading the integration; Config Backup restores stored data before the entry loads; a lost Huawei EMMA meter connection is reconnected; a refused Indevolt write counts as failed. Thanks to @pocketware.
  • Restore previous configuration keeps learned profiles and daily counters (PR#819): the restored files are now loaded without a restart instead of being overwritten by the entry's first save; an unreadable file is skipped with a warning instead of aborting the restore. Thanks to @tkaspersNL.
  • A re-plan froze Home Assistant for seconds: spreading the solar forecast onto the planning intervals converted every forecast period's start and end to a timestamp again for every interval, and the learned solar profile compared every quarter-hour of every stored day with all 96 progress bins. On a small host (arm64) one evaluation blocked the event loop for about 6 s, so the UI hung after a setting change and battery reads could time out. Periods now carry their timestamps, an interval only sums the periods that overlap it (a sorted index; an eight-day, two-array forecast has thousands), the solar-profile remap only visits the bins a quarter-hour touches and is cached per stored day, and the local quarter-hour split of a day is cached; the results are unchanged to the last bit and the solar part is about 20× faster. A setting change now re-plans once the settings have stood still for 3 s, so a manual threshold switch (which also stores its starting value) or a moving slider runs one evaluation instead of several. Thanks to @anorakophobia.
  • An unset Minimum Arbitrage Margin never appeared, and the minimum savings showed no currency: an install that never set the margin had it "unknown", which the panel skips as a leftover, so its slider was missing; it now reads 0, which means the same (off). Discharge Reserve Minimum Saving and Surplus Hold Minimum Saving read "/kWh"; they now show €/kWh (CHF/kWh with CKW), like the arbitrage margin and the price thresholds. Thanks to @anorakophobia.
  • Venus E v2/v3 max power sliders go down to 100 W (#815): the Max Charge/Discharge Power sliders in the dashboard and device page now start at 100 W, like the battery limits in the options flow, instead of 800 W. Thanks to @effevee.
  • Panel: the manual charge price ceiling and discharge price floor never appeared: without a stored value their entities are "unknown", which the panel skipped as leftovers, so turning a manual switch on showed nothing, and the switch alone changed nothing either. The rows now render (as "—" until set), and turning manual on stores today's average price as a starting value, kept on the right side of the other threshold. Thanks to @anorakophobia.
  • Predictive charging kept the old plan after some setting changes: changing the charge price ceiling (or its manual switch), the Minimum Arbitrage Margin, the Round-Trip Efficiency, the smart pre-discharge threshold or lowest SOC, or the Weekly Full Charge day or switch left the booked slots standing until the next scheduled evaluation, up to a whole night. A moved or switched-off weekly run even kept its slots, which then charged as ordinary slots. These settings now re-plan on the next control cycle, like the safety margin and the SOC limits already did. Thanks to @anorakophobia.
  • Dynamic Pricing: a booked slot held by Charge Delay passes its energy on: a deficit slot that a charge block (Solar Charge Delay, a no-charge window) held for its whole length was never entered, so its planned energy was silently lost. Once such a slot ends, its quota moves to later slots before its deadline, or is reported as a shortfall. Thanks to @pocketware.
  • Time Slot: a window with no days selected is never planned: the planner read it as every day, while the controller never opens it, so the plan counted on energy that was never charged. Thanks to @pocketware.
  • Dynamic Pricing: smaller planner fixes: the daily cap on re-evaluations after an excluded device's solar claim moves now rolls over each day (yesterday's spent cap no longer blocks today), and the price-only fallback counts only the time left in a slot that is already running. Thanks to @pocketware.
  • Anker: a refused Modbus connection no longer leaks its client: the client was closed when the connection raised, but not when it was refused. Thanks to @pocketware.
  • Legacy-domain migration works on Home Assistant before 2024.10: it read the old entry's discovery_keys, which those versions do not have, and aborted. Thanks to @pocketware.
  • Dynamic Pricing: a slot's "before HH:MM" names when its energy is needed: each slot now carries the earliest deadline its energy serves, not the deadline that booked it, so labels no longer jump back and forth along the night. Thanks to @pocketware.
  • Dynamic Pricing: the night charge no longer overfills a battery with a low discharge limit: the projected drain per interval is capped at the fleet's discharge power and the load above it comes off the night charge, so an 800 W battery under a ~1.2 kW night load no longer reaches sunrise half full. Thanks to @pocketware.
  • Real-Time Price and Discharge Reserve also respect the discharge power limit: Real-Time Price nets the load above the fleet's discharge power from its charge, and the reserve no longer holds energy for load the battery could not deliver.
  • Integration Status shows the two price-hold states in your language (PR#825): "Surplus Exporting (Cheaper Window Ahead)" and "Holding Charge for Dearer Hours" were still English in the Catalan, Dutch, French, German and Spanish translations. A test now fails when an Integration Status state is left in English. Thanks to @syphernl.

Don't miss a new Omnibattery release

NewReleases is sending notifications on new releases.