This update brings us right to the finish line. If all testing goes smoothly, this might just be our final beta before rolling out the stable release!
Special Thanks
A massive shoutout to @cl445. Your immense effort and dedication have been completely instrumental in pushing this project forward and getting the codebase to the fantastic state it is in today. Thank you for all the hard work and help along the way!
Breaking Changes:
- No support for BT UI Card < 3.0
- Eco Mode Services Removed, we use Presets for all kind of modes, inc. Eco mode.
What's Changed
- [EL] Create el.json added Greek Translation by @apo-mak in #1618
- add "temperatur_offset" as a possible offset entity by @DavidBadura in #1623
- Feature/refactor by @wtom in #1662
- Add configurable preset temperatures for comprehensive scheduler-card integration by @Copilot in #1639
- Fix infinite loop and prevent control operations when TRV becomes unavailable by @Copilot in #1666
- Fix infinite wait loop on startup by zeroing out local_temperature_calibration when unavailable by @Copilot in #1665
- Fix KeyError: 'advanced' when adding new devices in v1.7.1beta3 by @Copilot in #1669
- Fix/hvac mode by @wtom in #1670
- refactor by @wtom in #1686
- Add Italian translations for Better Thermostat by @echopage1964 in #1689
- Use new Weather API as the old one has been removed by @Skyslycer in #1682
- Add retries to delegate.py by @imbaczek in #1619
- Implement HVAC mode tolerance handling by @tasomaniac in #1711
- [TASK] implement eco mode and fix some main code by @KartoffelToby in #1721
- Fix ECO mode using separate saved temperature variable to avoid conflicts by @Copilot in #1722
- Fix sets option flow config_entry explicitly, which is deprecated in 2025.12 by @KartoffelToby in #1726
- MPC calibration mode by @wtom in #1727
- Feature/tpi by @wtom in #1751
- pi_heating_demand valve control by @wtom in #1741
- Add Turkish translation support by @muminkoykiran in #1743
- Fix crash when calibration offset is unknown or invalid by @carlosbaraza in #1738
- Preset Modes by @KartoffelToby in #1732
- bugfixes by @wtom in #1757
- Feature/mpc tuning by @wtom in #1759
- Feature/mpc tuning2 by @wtom in #1769
- Fix AI Time Based mode broken by unbounded heating_power learning by @Copilot in #1763
- feat: Add degraded mode for unavailable optional sensors by @cl445 in #1764
- general bugfix by @wtom in #1775
- mpc tuning by @wtom in #1776
- Fix NoneType errors in calibration initialization and control_queue task cleanup by @Copilot in #1778
- allow to run mpc and tpi compute while window open by @wtom in #1779
- config_flow bugfixes, sensors and input numbers for PID, eco temperat… by @wtom in #1780
- Fix climate.set_temperature not working when thermostat is OFF by @Copilot in #1782
- Improve algorithm descriptions: user-friendly UI text and comprehensive documentation by @Copilot in #1786
- Remove front matter from algorithms.md by @wtom in #1787
- mpc penalties by @wtom in #1788
- mpc eco penalty by @wtom in #1793
- Update sk.json by @misa1515 in #1783
- Fix NoneType AttributeError when entities are unavailable by @cl445 in #1800
- Fix apply_pid_defaults in reset_learned_pid_state service by @cl445 in #1799
- Remove unused imports and variables by @cl445 in #1797
- Fix type errors and incorrect API usage by @cl445 in #1796
- Fix preset modes not available when config has empty list by @cl445 in #1815
- Add minimum Home Assistant version to manifest by @cl445 in #1807
- Fix wrong battery entity selected for grouped window sensors by @cl445 in #1816
- Fix grouped TRV calibration not updating all TRVs by @cl445 in #1814
- Fix infinite loop when TRV is unavailable by @cl445 in #1813
- Fix wrong model detection from Z2M by @cl445 in #1806
- fix: preserve temperature precision in convert_to_float by @cl445 in #1805
- Fix cooler entity min/max temp not considered in range calculation by @cl445 in #1810
- Fix TRV staying at min temp after window closes by @cl445 in #1808
- mpc eco penalty by @wtom in #1821
- Valve Based Calibration Type and Config flow improve by @KartoffelToby in #1795
- chore: migrate from black/flake8/pyupgrade to ruff by @cl445 in #1801
- chore: fix all ruff linter errors by @cl445 in #1804
- fix: apply system_mode logic in fallback mode by @cl445 in #1809
- Quickfix: revert unsupported homeassistant key in manifest.json by @cl445 in #1822
- Fix PID tests and add Hold-Time tests by @cl445 in #1824
- Reduce outdoor sensor warning noise during startup by @cl445 in #1826
- Add off_temperature attribute to climate entity with test coverage by @Copilot in #1843
- TRVZB by @wtom in #1861
- mpc loss by @wtom in #1877
- small fixes by @wtom in #1889
- fix: ignore TRV target temp changes during active communication by @cl445 in #1882
- fix: change HEAT to HEAT_MODE if not in available modes by @alawresz in #1880
- fix: don't update cooler state if no change is needed by @alawresz in #1879
- fix: translate HEAT_COOL mode on TRVs when AC entity is connected by @alawresz in #1878
- Fix issue with translated entities use translation_key by @KartoffelToby in #1896
- feature/dynamic entity cleanup by @KartoffelToby in #1897
- Fix aggressive calibration not applied in hysteresis band by @cl445 in #1823
- fix: implement HA best practices for MPC sensor availability by @florianmulatz in #1899
- fix: Prevent complex number crash in heating_power_valve_position by @cl445 in #1870
- fix: Add boost mode support for available TRVs by @cl445 in #1873
- fix: Handle TypeError in check_float for None and invalid types by @cl445 in #1869
- fix: import_mpc_state_map drops string and int fields during state restore by @cl445 in #1904
- fix: Detect regime change when all prediction errors are identical nonzero by @cl445 in #1905
- fix: Extend lock coverage to prevent race conditions in parallel TRV control by @cl445 in #1875
- test: Comprehensive MPC controller test coverage by @cl445 in #1903
- test: Add comprehensive unit tests for helpers.py by @cl445 in #1868
- fix: Improve type hints for mypy compliance by @cl445 in #1867
- [TASK] fix timeout and tolerance bugs by @KartoffelToby in #1909
- fix: Reduce false degraded-mode warnings during startup by @cl445 in #1907
- test: Add unit tests for utils/controlling.py by @cl445 in #1871
- fix: resolve mypy errors in test_mpc_comprehensive.py by @cl445 in #1913
- refactor: Add unified StateManager for runtime state persistence by @cl445 in #1914
- Fix: Enable decimal temperature input for preset number entities by @florianmulatz in #1922
- fix: prevent AttributeError crash when TRV event delivers None state by @cl445 in #1926
- fix: enforce debounce interval in temperature accept condition by @cl445 in #1931
- fix: enforce cooltemp > target_temp invariant in TRV setpoint sync by @cl445 in #1927
- fix: allow no_off_system_mode TRVs to recover from OFF state by @cl445 in #1928
- fix: restore significance threshold to filter sensor noise by @cl445 in #1930
- refactor: Make compute_mpc() return (output, state) tuple by @cl445 in #1915
- refactor: Make compute_pid() and compute_tpi() return state in tuple by @cl445 in #1916
- New website by @KartoffelToby in #1932
- refactor: Wire StateManager into climate.py, replace four legacy stores by @cl445 in #1917
- refactor: DRY sensor.py with base classes, strict typing & cleanup by @cl445 in #1944
- test: Add comprehensive test suite for sensor platform by @cl445 in #1943
- fix: Catch TypeError in HomematicIP detection loop by @cl445 in #1942
- fix: resolve cooler setpoint from each state independently by @cl445 in #1940
- fix: clamp heat target to min_temp in cooler setpoint sync by @cl445 in #1939
- fix: guard against hass.states.get() returning None in TRV event handler by @cl445 in #1937
- Proposal: Extract v0 store migration into dedicated module by @cl445 in #1918
- test: Test suite for events/trv.py – 3 bugs found by @cl445 in #1925
- test: Edge-case coverage for temperature event handler by @cl445 in #1941
- test: Add baseline tests for climate.py by @cl445 in #1946
- refactor: Extract thermal learning into utils/thermal_learning.py by @cl445 in #1947
- refactor: Extract tolerance-FSM into pure utils/hvac_action.py by @cl445 in #1948
- refactor: Extract valve maintenance into utils/valve_maintenance.py by @cl445 in #1949
- refactor: Extract startup() into 8 named submethods by @cl445 in #1951
- Fix: prevent heating state above target temperature (#1853) by @KrX3D in #1955
- fix update and sync of thermostats and correct temperature units by @KartoffelToby in #1977
- refactor: drop unreachable async_retry on delegate.init by @cl445 in #1993
- chore: remove dead code (3 unused helpers + property) by @cl445 in #1986
- typing: strict types for utils/const and utils/retry by @cl445 in #1952
- chore: fix mypy errors on develop by @cl445 in #1999
- chore(ci): pin tool versions, bump actions, retry hassfest by @cl445 in #2000
- refactor: Extract preset management into PresetManager by @cl445 in #1950
- refactor: extract extra_state_attributes telemetry by @cl445 in #1988
- fix: clean up repair-registry issues on config-entry removal by @cl445 in #1998
- fix: boost mode respects valve_max_opening per TRV by @cl445 in #1987
- fix: suppress hvac_action TRV-override at or above target by @cl445 in #1994
- fix: TRV → BT sync for user setpoint changes in TARGET_TEMP_BASED mode by @cl445 in #1992
- fix: gate boost valve/setpoint override by calibration_type by @cl445 in #1995
- fix: convert restored preset value to Celsius using saved unit by @cl445 in #1997
- fix: start BT after Home Assistant has finished booting by @cl445 in #1990
- fix: suppress degraded-mode warning during startup grace period by @cl445 in #1989
- fix: reject implausible temperature readings at the BT input boundary by @cl445 in #1991
- fix: stop exposing current humidity under the reserved attribute key by @cl445 in #1996
- fix: emit repair issue when room sensor is unavailable at startup by @cl445 in #2001
- test: run cleanup test in an isolated event loop by @cl445 in #2012
- refactor: extract preset-record and cool-target guard from async_set_temperature by @cl445 in #2010
- refactor: move controller/thermal state bridging into StateManager by @cl445 in #2011
- refactor: type thermal telemetry records and make TelemetrySource read-only by @cl445 in #2013
- test: cover weather.py call-for-heat logic (12% → 97%) by @cl445 in #2015
- test: drop xfail for integer off_temperature (not a real case) by @cl445 in #2021
- refactor: extract startup-restore parsing into pure, tested helpers by @cl445 in #2014
- refactor: deduplicate PID-key helpers, type device_info, drop a dead branch by @cl445 in #2022
- fix: normalise weather forecast horizon and clarify averaging by @cl445 in #2018
- refactor: parse bt_hvac_mode to HVACMode instead of storing raw strings by @cl445 in #2023
- fix: keep heating when weather forecast data is momentarily unavailable by @cl445 in #2016
- fix: remove unreachable branches and correct a stale maintenance comment by @cl445 in #2019
- refactor: clamp restored thermal values via the shared clamp helper by @cl445 in #2025
- refactor: tighten exception handling in the valve-maintenance path by @cl445 in #2024
- test: expand climate.py unit-test coverage by @cl445 in #2020
- chore: add .coderabbit.yaml to enable reviews on develop PRs by @cl445 in #2026
New Contributors
- @apo-mak made their first contribution in #1618
- @DavidBadura made their first contribution in #1623
- @Copilot made their first contribution in #1639
- @echopage1964 made their first contribution in #1689
- @Skyslycer made their first contribution in #1682
- @imbaczek made their first contribution in #1619
- @muminkoykiran made their first contribution in #1743
- @carlosbaraza made their first contribution in #1738
- @cl445 made their first contribution in #1764
- @alawresz made their first contribution in #1880
- @florianmulatz made their first contribution in #1899
- @KrX3D made their first contribution in #1955
Full Changelog: 1.7.0...1.8.0-beta-18