🎉 Better Thermostat 1.8.0: The Massive "Ground-Up" Update
Welcome to the biggest Better Thermostat update ever!
First and foremost, I want to say a massive THANK YOU to all the amazing contributors, my wonderful supporters, and everyone who took the time to report issues over the past year. Thanks to your incredible support, the community has grown immensely, and the project has officially crossed 1,400 stars on GitHub! 🌟 And more than 7500 active installations (ha opt in statistics)
I know it has been a whole year since my last major release, but there is a very good reason for the wait. My ultimate goal was to make Better Thermostat incredibly stable, universally usable, and the absolute easiest way for anyone to optimize their heating, save on energy costs, and maximize home comfort. I had to rebuild a lot to make that dream a reality. Looking forward, I promise that my next releases won't take nearly as much time!
Here is everything that is new, changed, and improved in version 1.8.0:
🚨 Important Breaking Changes & Upgrading
Because of the massive scale of this ground-up rewrite, updating to 1.8.0 might break your existing automations. I highly recommend taking a moment to completely reconfigure your existing Better Thermostat devices after updating to ensure everything is set up correctly with the new system.
🎨 A Huge Update to the Companion UI Card
Alongside version 1.8.0, I am also releasing a massive update to the companion Better Thermostat UI Card!
- A Modern Redesign: The card has received a complete style polish to perfectly match the current, beautiful, modern look of Home Assistant.
- Eco Mode is Gone (Breaking Change): Please note that the "Eco Mode" controls on the old card will no longer work with the new integration. You will need to update to this new card to use the new "Preset Modes" instead.
- Say Hello to the "Mini Card": I have officially introduced a second card option—the brand new Mini Card! If you love keeping your dashboard compact and clean (similar to the popular Mushroom mini climate card), you will love this. Just keep in mind that you'll need to select and set up this specific new card type if you want to use it!
📚 Brand New Website & Effortless Setup
- Welcome to better-thermostat.org: I have launched a completely brand-new website: https://better-thermostat.org/! It is packed with beginner-friendly documentation, step-by-step guides, and helpful configuration tools to assist you.
- "No-Brainer" Default Settings: I’ve made it easier than ever for first-time users to get started. The new default settings work beautifully right out of the box, meaning you don't have to be a tech expert or tweak dozens of dials to start saving energy immediately.
🏗️ A Complete, Ground-Up Rewrite
- Over 50,000 Lines of Code Changed: I didn't just patch a few bugs; Its a completely rebuilt from the ground up! The engine running your thermostats has been totally rewritten to be faster, far more reliable, and future-proof.
🧠 Smarter Heating & Advanced Controls
- Upgraded AI Algorithms: My classic "AI Time-Based" heating algorithms have received massive upgrades, making them much more advanced, responsive, and accurate than ever before.
- New Scientific Heating Formulas (MPC, TPI, & PID): I’ve introduced brand-new, highly advanced learning models for how your thermostat understands your room. Whether you use the new PID, TPI, or MPC methods, the system uses advanced math to learn exactly how your room heats up, preventing energy waste and overheating.
- Direct Valve Control: For compatible thermostats, I now support direct valve control! Better Thermostat can now bypass the thermostat's internal brain and tell the physical radiator valve exactly how far to open or close, giving you ultimate, pinpoint temperature accuracy.
- New Preset Modes: I have added full support for native "Preset Modes" (like Home, Away, Sleep, etc.). This makes integrating your heating with your daily routines easier than ever. (Remember, this completely replaces the old "Eco Mode"!)
⚙️ Easier Dashboard Controls & Settings
- New Dashboard Sensors & Switches: You no longer have to dig through complicated menus to change how Better Thermostat works. I've added new sensors and configuration switches right into your Home Assistant dashboard. Viewing system information and tweaking your settings is now just a simple click away!
- Cleaner Interface: I removed old, obsolete learning sensors to keep your device pages clean and clutter-free.
- Better Main Thermostat Swapping: I greatly improved the settings menu for how you swap or assign your main radiator valve (TRV), making it much easier to configure.
- New Blueprints: I've added new automation blueprints to help you set up your heating routines faster.
🛠️ Bulletproof Reliability & Device Support
- Offline Device Protection: If one of your thermostats temporarily loses its connection, goes offline, or is removed, it will no longer crash the whole integration! The system will now gracefully wait for it to come back online.
- HomematicIP Reliability: I greatly improved how HomematicIP devices are handled. Corrupted or missing data from these devices will no longer freeze the system.
- Fixes for Specific Brands: I’ve improved model detection for Zigbee2MQTT users, updated the interface for TRVZB models, and added specific fixes for ME167 thermostats.
🐛 Important Bug Fixes & General Polish
- No More False "Heating" Status: I fixed a frustrating issue where the dashboard would say the room was "heating" even when it had already perfectly reached your target temperature.
- Better Syncing & Temperatures: I fixed an issue where multiple thermostats in the same room wouldn't sync properly. I also ensured that your temperature units (Celsius/Fahrenheit) are always rock-solid and correct.
- Cooling vs. Heating Boundaries: I fixed a bug where cooling settings could overlap with your heating limits. The system now guarantees a safe separation between your hot and cold setpoints.
- Language & Translation Fixes: I squashed several bugs related to translations, ensuring all the new menus and settings display perfectly in your chosen language.
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!
Technical PR Changelog
- [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
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