Changelog
Breaking Changes 🚨
- 9490029 Home Assistant charger: make milliamp current control optional (BC) (#33858)
- ddbc8f3 Home Assistant: drop battery minsoc/maxsoc preset (BC) (#33707)
- 54403e6 Mode Redesign: rename pv to smart, replace minpv with always charge (BC) (#32490)
- 8160673 Tariffs: reject slots shorter than 15min (BC) (#33865)
- db12193 Templates: move phases1p3p param to defaults.yaml (BC) (#33588)
- 064e585 Zendure Solarflow: consolidate battery templates (BC) (#33505)
New Features 💫
- c591a67 Add battery forced discharge to grid mode (feed-in arbitrage) (#31995)
- 515cb14 Anker Solarbank Max AC: add discharge (#32365)
- 5ece95b Atmoce: add battery discharge (#33437)
- 2791792 EcoFlow Stream: add battery control (#33433)
- cc3feb4 Home Assistant: add holdcharge and discharge battery modes (#33841)
- 61ddada Hoymiles OpenDTU: add cache (#33669)
- 0daa1fe Huawei SUN2000: add force-discharge (#32307)
- 4bccfd3 Issue page: add copy-as-markdown button and menu shortcut (#33699)
- 41fc386 Kostal Plenticore: add forced discharge mode (#32396)
- e5611ad Loadpoint: add fast charging phase upscale delay (#28174)
- 3938f43 Loadpoint: add solar share setting (#32104)
- 77e8284 Meter (Deye): add HTTP micro inverter logger template (#33485)
- c2683e2 Meter: add Solarman V5 transport and Deye micro inverter template (#33502)
- 8dd67f1 Meter: add verifybatterymodes command (#33857)
- 8fca47d Polestar: add official Data Portal M2M API (#33814)
- 7c2f4c5 Script plugin: add float setter (#33426)
- 825573b Spelsberg: add meter capability (#33823)
- cf0fd9f Sungrow: add holdcharge battery mode (#32932)
- 03d12af Tariff: add epexprijzen-be template for Belgium (#33762)
- 51a95cb Tariffs: add spotovaelektrina.cz (#33581)
- 691c77e Tesla BLE: add charged energy (#33585)
- c28a1f6 UI: add missing German date format translations (#33347)
- 68d2f49 Vehicle: add LiveWire S2 motorcycle (#33683)
- c161933 Viessmann: add power and temperature (#32219)
- e11cdef Weishaupt: add heat pump (Modbus TCP) (#33193)
- b79e469 Zendure Solarflow: add forced discharge mode (#33801)
- 50572d9 go-e: add status reason for access control (#33661)
- c140fc8 my-PV HEA: add 5s heartbeat to rewrite active relays (#33626)
- cca3f09 my-PV: add HEA THOR 3.5 and 9.0 support (#33500)
Other Changes ☀️
- c9fa4d9 API: raise the jq query limit to 8k (#33394)
- 87f7613 Battery UI: make new battery page default, remove classic layout (#33434)
- 8796395 Battery: report supported modes per device (#32648)
- bab3970 Charger (Stiebel Eltron WPM): optional inverter power (#33367)
- 9582e96 Chargers: use verify enabled helper (#33811)
- 3e0464e Charging plan: disable optimization when late charging covers everything (#33422)
- f7c4852 Charts: consistent y-axis unit scaling for small values (#33334)
- b34a989 Config UI Loadpoint: rework min/max current inputs (#33418)
- a1a4b2c Config UI: clarify battery soc limit help texts (#33414)
- 50345cd Config UI: improve modal slide transitions (#33833)
- 212dd03 Config UI: raise device test timeout to 15s (#33118)
- 296f6f1 Config UI: untranslated 'continuous' in device card and test result (#33487)
- 53061f7 Config UI: usage-specific energy labels for device tags (#33402)
- e7a8e4d EEBus: capture vehicle identification from update event (#33458)
- c04cf61 EEBus: expose LPC and LPP capabilities only when supported (#33525)
- 32c86ab EEBus: make milli amp current control optional (#33739)
- 3d38f43 EEBus: replay use case support to devices registering after discovery (#33423)
- 0fd6548 EEBus: replay use case support to devices registering after discovery (#33430)
- c90b7d0 EEBus: wait for use case data before returning the device (#33386)
- 535e655 Energy demand profile: improve prediction accuracy for heating loadpoints (#28232)
- db2841e Ghost (Elli): re-login when the REST API rejects the token (#33785)
- 266fe27 HEMS Pro: also probe I2C bus 0 for RTC (#33639)
- 078efa1 HTTP digest: accept X-WWW-Authenticate challenge header (#33793)
- eddfca3 History: remove energy netting, unify bidirectional detection (#33338)
- a611309 Keba modbus: switch back to 1p on disable (#32665)
- a0a96ef Keep access and refresh tokens out of the logs (#33339)
- 556d874 Loadpoint: derive remaining energy and duration from energy limit (#33637)
- a3490cd Loadpoint: do not send zero power values to estimator (#33846)
- 0c6250e Loadpoint: don't fail setup when the charger has lost phase switching (#33619)
- 2e6873c Loadpoint: honor configured phases in minimum active phases (#33462)
- 197043e Loadpoint: ignore dimmer not available (#33486)
- 4e3a60e Loadpoint: log when circuit limit falls below min current (#33671)
- 219cdf1 Loadpoint: recompute charge plan immediately on vehicle-side plan changes (#33467)
- a306d05 Loadpoint: resolve charge meter capabilities once at boot (#33672)
- ef937f4 Loadpoint: resume charging during phase switch (#33552)
- efa9bf6 Loadpoint: seed unknown phases from charger on startup (#33701)
- 10c5d48 Loadpoint: test that persisted settings remain valid config (#33450)
- fc15910 Loadpoint: treat alwaysCharge as dynamic config (#33444)
- d15b1dc MQTT: sanitize map keys used as topic levels (#33819)
- 4e129aa Make diagnostics more discoverable (2) (#33734)
- 39f01db Marstek Venus A/D: derive battery power from AC power minus MPPT (#33473)
- f73c2bd Merge remote-tracking branch 'origin/master'
- 2034523 Merge remote-tracking branch 'origin/master'
- 6512758 Merge remote-tracking branch 'origin/master'
- 5323314 Merge remote-tracking branch 'origin/master'
- 33ab916 Merge remote-tracking branch 'origin/master'
- 2ea2154 Merge remote-tracking branch 'origin/master'
- acd0087 Merge remote-tracking branch 'origin/master'
- 54aa6ab Merge remote-tracking branch 'origin/master'
- 4a335df Merge remote-tracking branch 'origin/master'
- 1be861a Merge remote-tracking branch 'origin/master'
- 23286bd Merge remote-tracking branch 'weblate/master'
- 0df8641 Meter: default battery minsoc/maxsoc to 0/100 (#33589)
- 945ecf7 Modbus proxy: keep default device port after serial round-trip (#33744)
- 4f4f3ea Mode UI: smart mode label and popover alignment (#33479)
- 31d0745 MySkoda: prefer charge limit of current saved location (#33612)
- 75b5b7c MyŠkoda: expose welcomecharge (#33570)
- a577637 NIU E-Scooter: use vehicle-common preset (#33945)
- 0f9c74c NRGkick Connect: write current and enable state in a single request (#33675)
- 15b5744 Nordpool tariff: cache day-ahead price requests (#33655)
- a83118d OAuth: persistent token source (#33370)
- 871817b OCPP: allow transaction-specific charging profiles (#33512)
- 11ffab1 OCPP: keep live meter reading when duplicate measurand contexts collide (#33257)
- a779067 Open-Meteo: cache forecast requests short-term (#33797)
- 0a3cc0a OpenEVSE: use websocket for state and claims API for control (#33539)
- 9912bcb Oprimizer: align battery forecast times to slot boundaries (#33385)
- 275ad68 Optimizer: apply active result slot (#33501)
- b08459e Optimizer: break down household demand into individual profiles (#33749)
- 5e649cb Optimizer: configurable per-slot percentile for the energy demand profiles (#33700)
- 819fb94 Optimizer: empty state, menu entry when enabled, feedback link (#33750)
- b46b2e6 Optimizer: floor end of horizon battery value at export price (#33746)
- dd62baa Optimizer: only offer grid discharge for batteries with discharge mode (#33860)
- 60df102 Optimizer: reapply last solve to newer slots from the control cycle (#33583)
- 3d104bb Optimizer: report loadpoint charging state (#33802)
- 035853d Optimizer: treat unknown battery mode as normal for suggestions (#33698)
- e91c3db Planner: clarify precondition log message (#33400)
- 97e47b5 Playwright: follow Shelly Pro 3EM product rename
- 103aa33 Remote Access UI: don't show toast for proxy errors (#33514)
- 365adff Remote access: cache verified basic-auth credentials (#33593)
- a8d5832 Revert "CI: disable Claude workflows (#33507)"
- 2dc2068 Revert "EEBus: replay use case support to devices registering after discovery (#33423)"
- a3a3441 Revert "ui: hide temperature limit controls for SGReady devices" (#33840)
- 9efc5a9 Shelly: decorate phase readings only when the device meters them (#33706)
- 0ceb428 Site: hide config-disabled loadpoints in energy flow (#33714)
- 5bcfd7f Smart-hello: retry once with a fresh login when the api rejects the token (#33369)
- 0eb008c Solis Hybrid S: require minsoc and maxsoc for active battery control (#33580)
- 0c94a0a Sponsor: accept temp token from hardware check (#33631)
- f3edc12 Subaru vehicle: handle range unit conversion (#33453)
- 7fec24f Tariff (DWD, ESIOS): evaluate forecast dates per request (#33601)
- a120fb5 Tariff (fixed): drop zero-length slot on dst spring forward (#33869)
- e78e382 Tariff: don't serve cached rates that have entirely elapsed (#33904)
- f8a2b2a Tariff: keep serving cached rates and retry while tariff unavailable (#33880)
- a683ffd Tariff: retry creating unavailable tariff (#33894)
- 592f39c Templates: pass bool params as real booleans (#33153)
- 5a3c4d1 Translated using Weblate (Catalan)
- 4f8a5c1 Translated using Weblate (Danish)
- 2a890b5 Translated using Weblate (Dutch)
- ae8841b Translated using Weblate (Finnish)
- c5338fa Translated using Weblate (Latvian)
- 252240c Translated using Weblate (Lithuanian)
- 48fb60f Translated using Weblate (Russian)
- 0c65292 Translated using Weblate (Swedish)
- de0faa4 Translated using Weblate (Turkish)
- f63cd70 UI: improve chart line readability (#33410)
- be68265 UI: place chart tooltips beside the pointer (#33411)
- b5dfdee Use official vite+ image for Devcontainer (#33564)
- 7f0bfb4 Vehicle API: handle TeslaMate sleeping response (#33560)
- 93dbcb4 Voltie: detect phase switching from the capability register (#33574)
- d470c99 Zaptec: do not offer phase switching in passive mode (#33447)
- 84e1e59 Zaptec: don't expose phase switching for Go (#33484)
- 890b00f Zaptec: ignore empty session identifier in connection duration (#33720)
- a7a3ad9 Zendure Solarflow: read charge setpoint from device (#33803)
- c6dae0b Zendure Solarflow: suggest battery serial via HTTP (#33510)
- 8af06cf aa55 udp: reject responses whose length does not match the request (#33696)
- 584977e eebus-ohpcf: fail setup when the device does not support OHPCF (#33468)
- ea60ae3 fox-ess-h3-smart: hold via On-Grid SoC reserve instead of Feed-in First (#33537)
- 9893252 my-PV HEA: derive heartbeat interval from power timeout register (#33628)
- 7320785 ui: hide temperature limit controls for SGReady devices (#33754)
Bug Fixes 🐞
- fe065ee EEBus: fix ship-go connection backoff reset (#33384)
- bb9491d Huawei EMMA: fix grid import/export energy registers (#33432)
- 432d318 Issue triage: apply area label alongside type Bug, fix label names (#33663)
- b2274a5 Optimizer: fix plan SoC goal slot placement off-by-one (#33832)
- e485998 Shelly TopAC: fix enabled (#33805)
- 09efbf9 Toyota: fix partial api response handling (#33689)
- 85c1017 Vehicle: fix UI location in deprecated mode warning (#33551)
- af4aa75 Zaptec: fix model detection (#33504)