👻👻👻👻👻👻👻👻👻👻
Turn it up a notch. Or down.
Climate, water heaters, humidifiers, covers, valves and media players can now be nudged a step from wherever they are: climate.increase_temperature, cover.decrease_position, media_player.increase_volume and friends. Each works in the device's own units and stays inside its limits. Calendar events can be updated and deleted, and a to-do item moved to the top, the bottom, or after another one.
Two new helpers: Time in state (since when has this been on? "last motion" comes free) and Calibration (a sensor that is a bit off, corrected). The inverse helper now does covers and valves too, and flips a light or a toggle helper as well as a switch.
Four new triggers, for things an admin wants to hear about: an integration, a device or a user added, and a new device discovered. Two new repairs: a dashboard performing an action that does not exist, and a HomeKit bridge naming entities that are gone.
Most of the rest is making Spook more careful. An ignored repair stays ignored, even when what it reports changes. A fix looks again before it removes anything. Automations that are turned off are no longer reported; turn one back on and you hear about it right away. And the light actions no longer hang on lights whose integration does one thing at a time.
Heads up: timer.set_duration
It needs an admin now, like changing a timer in the settings does. Starting, pausing and cancelling a timer still works for everyone, and automations are not affected.
Thanks @snigehere, @Frankster-NL, @pathia, @ZakOyten, @DanfieldNet and @thomasgregg for reporting, and @thomasgregg for fixing it too. 🫶
../Frenck
Blogging my personal ramblings at frenck.dev
Or subscribe to my bi-weekly newsletter: https://frenck.dev/newsletter
✨ New features
- Inverse a cover, position and tilt @frenck (#1744)
- Inverse a valve @frenck (#1747)
- Inverse an on/off helper or a light, as a switch or binary sensor @frenck (#1748)
- Add a time in state helper @frenck (#1753)
- Add a calibration helper @frenck (#1754)
- Notice dashboards performing actions that do not exist @frenck (#1755)
- Notice HomeKit bridges naming entities that do not exist @frenck (#1758)
- Add the spook.integration_added trigger @frenck (#1760)
- Add the spook.user_added trigger @frenck (#1759)
- Add the spook.device_discovered trigger @frenck (#1762)
- Add the spook.device_added trigger @frenck (#1761)
- Add the calendar.delete_event action @frenck (#1764)
- Add the calendar.update_event action @frenck (#1766)
- Add the climate.increase_temperature and climate.decrease_temperature actions @frenck (#1768)
- Add the water_heater.increase_temperature and water_heater.decrease_temperature actions @frenck (#1770)
- Add the humidifier.increase_humidity and humidifier.decrease_humidity actions @frenck (#1771)
- Add the cover.increase_position and cover.decrease_position actions @frenck (#1772)
- Add the valve.increase_position and valve.decrease_position actions @frenck (#1773)
- Add the media_player.increase_volume and media_player.decrease_volume actions @frenck (#1774)
- Add the todo.move_item action @frenck (#1776)
🐛 Bug fixes
- Keep ignored orphaned statistics ignored @frenck (#1729)
- Remember what was ignored, even when the issue changes @frenck (#1730)
- Look again before a fix removes anything @frenck (#1731)
- Read a notification's text as text @frenck (#1733)
- Stop repairs still starting or looking when Spook unloads @frenck (#1734)
- Keep an inverse helper in step with its source @frenck (#1735)
- Step a number in the units it shows @frenck (#1736)
- Do not loop a cron trigger through the hour the clocks go back @frenck (#1737)
- Let a refused restart reach whoever asked for it @frenck (#1738)
- Do not report an integration that was deleted while stuck @frenck (#1740)
- Keep the old snoozes until the new store holds them @frenck (#1741)
- Do not offer a blueprint's own previous version as an update @frenck (#1750)
- Do not read the old default dashboard left behind by the move @frenck (#1751)
- Notice a customized entity a script sets after startup @frenck (#1752)
- Discard obsolete blueprint offers after external imports @thomasgregg (#1757)
- Stop the light actions from waiting on themselves @frenck (#1769)
- Refuse a fraction as a step instead of cutting it down @frenck (#1775)
- Refuse a quota limit too long to write out, instead of tripping over it @frenck (#1778)
- Show the option labels of selectors in Spook's actions @frenck (#1777)
- Make the position choices of todo.move_item translatable @frenck (#1779)
🚀 Enhancements
- Work out rename suggestions off the event loop for every repair @frenck (#1732)
- Keep changing a timer's stored duration to admins @frenck (#1743)
- Leave automations that are turned off alone @frenck (#1749)
🧰 Maintenance
- Keep the Pylint hook from rewriting the lock file @frenck (#1728)
- Keep the tests green on Home Assistant 2026.11 @frenck (#1727)
- Translations update from Hosted Weblate @weblate (#1745)
- Translations update from Hosted Weblate @weblate (#1720)
- Translations update from Hosted Weblate @weblate (#1763)
- Translations update from Hosted Weblate @weblate (#1765)
⬆️ Dependency updates
- ⬆️ Update release-drafter/release-drafter action to v7.8.0 @renovate[bot] (#1724)
- ⬆️ Update dependency ruff to v0.16.10 @renovate[bot] (#1723)
- ⬆️ Update release-drafter/release-drafter action to v7.9.0 @renovate[bot] (#1726)
- ⬆️ Update dependency pytest-homeassistant-custom-component to v0.13.368 @renovate[bot] (#1721)
- ⬆️ Update dependency pylint to v4.1.2 @renovate[bot] (#1746)