Compatibility

Firmware Integration ESPHome Device Builder Home Assistant
v0.0.28 v0.0.96 2026.5.0+ 2025.8.0+*

Always run the latest firmware and integration together. If you update the integration, check the firmware changelog for any matching firmware release.

*Home Assistant 2025.8.0 or later is required. This is a hard requirement, not a recommendation: the integration’s options flow uses OptionsFlowWithReload, which does not exist before 2025.8.0, so on older releases Pivot fails while loading or configuring. The bundled blueprints additionally need the action: key and trigger: shorthand introduced in 2024.4.0.


Integration

Blueprints are updated independently of the integration. Import them directly from GitHub – see the Timer page and Custom Automations page for links. Re-importing picks up any fixes without needing an integration update.

v0.0.96
  • Fix: A long press on the button still reset the timer to 1 minute. v0.0.95 fixed this for the dashboard, voice and the automatic resets, but not for the button. Since Home Assistant 2026.7, writes made while a press is being handled reach Pivot only once that handling finishes, so the cancel’s empty dial arrived after the timer had already gone idle and still read as a turn of the knob. Pivot now ignores a value written before the timer went idle, or by the same automation run that set it idle. This fix is in the integration, so it covers blueprints imported before v0.0.95 too.
  • Fix (Timer Control blueprint): A running timer could be cancelled when the Voice PE reconnected, for example after a Wi-Fi drop. A reconnecting button comes back carrying its last press, and if that was a long press, Timer Control treated it as a new one. That’s likely when the timer was started by voice or from a dashboard after a long-press cancel. Reconnects are now ignored, as Pivot itself already ignored them. Requires re-importing the Pivot - Timer Control blueprint.
  • Fix (Timer Control blueprint): “Switch to timer bank when timer starts” never worked. Its trigger read the device suffix from the blueprint’s variables, which a trigger can’t see, so it watched a timer that doesn’t exist. Home Assistant logged “‘suffix’ is undefined” when the automation loaded. Requires re-importing the Pivot - Timer Control blueprint.
  • Fix (Timer - Voice blueprint): Voice timers over an hour never started. “Set a timer for an hour and a half”, “set a 2 hour timer” and “two and a half hours” all failed. The blueprint wrote the minutes to Timer Duration, which goes up to 60, and Home Assistant’s rejection stopped the timer before it began. The timer now runs its full time, and Timer Duration is set to 60: the dial stays full until the last hour. Requires re-importing the Pivot - Timer - Voice blueprint.
  • Fix (Timer - Voice blueprint): “Dismiss the alarm”, the example in the blueprint’s own description, wasn’t one of its phrases, so it did nothing. It now dismisses the alarm. Requires re-importing the Pivot - Timer - Voice blueprint.
  • Fix: Pivot could ignore a button press. After Home Assistant restarted while a Voice PE was offline, the button came back with no last press, and Pivot skipped the first real press after that as if it were a reconnect.
  • Fix: Configure couldn’t clear anything. Clearing a bank’s entity, the TTS entity or the media player in the form had no effect: Home Assistant sends nothing for an emptied field, and Pivot filled the old value back in. Cleared fields now stay cleared.
  • Fix: A bank whose light was unavailable showed a full dial, because an unavailable light reports no brightness and Pivot read that as fully on. The dial now keeps its last value until the light comes back.
  • Fix: On Home Assistant 2026.10, adding a dial and Reconfigure used two device-registry lookups that Home Assistant has deprecated. Each logged a “Detected that custom integration ‘pivot’…” warning, and they stop working in Home Assistant 2027.8 and 2027.9. Pivot now uses their replacements, and still works on older versions.
  • Change: Automated tests expanded from 122 to 153 for the integration. They now run both timer blueprints in Home Assistant’s own automation engine, driven the way the hardware drives them: every button press, knob turn, alarm, dashboard action and voice command. They run on Home Assistant 2026.10 as well as an older release.
v0.0.95
  • New: The Pivot card can be set up for any kind of dashboard. Its editor now groups the options under Banks, Timer and Settings:
    • Banks to show: all four, the ones you choose, only the active bank (it changes as the dial does), or only the timer bank. Banks with nothing assigned can be left out.
    • Two banks per row on wide dashboards. Narrower, they stack.
    • Show or hide the title, the active bank line, EDIT ENTITY, the Mirror Light Colour and Announce Value rows, and Silent Timer. Hiding EDIT ENTITY suits wall tablets and family dashboards.
    • Your own timer presets: up to six buttons, each from 1 to 60 minutes.
    • Settings: choose which ones show, put them on a card background so they read over a photo, place them below the banks instead of beside them, or turn them off and use the Pivot settings card elsewhere. See Example layouts for examples.
  • New: The Pivot bank card can show the bank the dial is on (bank: active) or whichever bank is the timer (bank: timer), and takes the same bank options. The Pivot status and Pivot settings cards gain Show active bank and card background.
  • Fix (dashboard cards): The Pivot cards could fail to load, showing an error card (“Custom element doesn’t exist”) instead. Home Assistant loads the cards at the same time as its own app, in no fixed order, and when the cards won the race they registered themselves where Home Assistant couldn’t see them. It depended on timing, so it came and went between page loads and devices. The cards now wait for Home Assistant’s app.
  • Fix (Timer Control and Timer - Voice blueprints): Cancelling a timer reset its duration to 1 minute. With announcements on, it also said “1 minute timer. Press to start.” after “Timer cancelled.” The cancel set the timer to idle and then emptied the dial, and Pivot read that 0 on an idle timer bank as a turn of the knob. The same happened when a paused timer was cleared after 15 minutes and when a stuck alarm was cleared. The dial is now emptied first. Requires re-importing both blueprints. Cancelling from a dashboard card was fixed in the integration itself.
  • Fix: A false “Pivot can’t hear the button” repair could appear while a timer ran on a Voice PE that was switched off. Timer Control updates the dial every 30 seconds from a time-based trigger, and Pivot mistook those updates for the device being online. Automations and scripts no longer count.
  • Fix: A single press on a bank assigned to a number, input number or sensor logged a Home Assistant warning on every press, because these can’t be turned on or off. Pivot now leaves them alone. Automations still receive the press.
  • Fix: Configure couldn’t be saved when a bank held an entity from a domain the bank picker doesn’t offer, such as a group set through EDIT ENTITY. The picker rejected its own pre-filled value.
  • Fix: Pointing a bank at the timer now shows the timer’s duration on the dial straight away, as pointing it at any other entity already did.
  • Fix (card editor): A space typed at the end of a title vanished, so two-word titles couldn’t be typed. A hand-written settings row order now survives the editor. A seventh timer preset is refused instead of replacing the longest one. A card following the dial stays on its bank until a drag ends.
  • Change: rows: [] on the Pivot settings card now shows no rows. It used to show all of them.
  • Change: Cards set up with v0.0.93 or v0.0.94 look and work exactly as before. show_status: false and the status card’s show_name: false still work, and the editor rewrites them as the new options.
  • Change: Automated tests expanded from 113 to 122 for the integration and from 52 to 112 for the cards. They now include runs of the Timer Control blueprint itself in Home Assistant’s automation engine.
v0.0.94
  • Fix (dashboard cards): The cards looked wrong over a background image or on see-through cards. Their greys were solid colours chosen for a plain dark card, so on a translucent card the values, EDIT ENTITY and the row icons all but vanished, while the toggles and the timer strip sat on top as solid black shapes. They are now see-through white and black, so they take on whatever is behind them. On a solid dark card they look exactly as before.
  • Fix (dashboard cards): The toggle knob sat 2px from the edge when off but 5px when on, and 3.5px from the top and bottom. It now has an even 3px gap all round. Toggles also get a faint edge, so they stay visible on a black background.
  • Fix: Google Assistant logged an error for every Pivot bank colour light (Unexpected error serializing query), because the lights reported no brightness. They now report full brightness. Nothing else reads it.
  • Fix: Home Assistant 2026.10 logs “Detected that custom integration ‘pivot’ accesses DeviceEntry.config_entries“. That property stops working in Home Assistant 2027.10. Pivot now reads the device’s config entry the new way, and still works on older versions.
  • Change: Automated tests expanded from 108 to 113.
v0.0.93
  • New: Dashboard cards, built in. Pivot now ships its own Lovelace cards: Pivot (the whole dashboard for one device), Pivot bank, Pivot status and Pivot settings. Add them from the card picker and choose your device from a list. There is nothing to install beyond the integration, no YAML to paste and no suffix to type. They replace the custom:button-card templates, which drop out along with button-card, my-slider-v2 and layout-card. The cards draw the same layout as the templates, follow your theme, and include a visual editor. See the Dashboard page.
  • New: pivot.timer_toggle and pivot.timer_cancel actions. They press the timer bank like the physical button: toggle starts, pauses, resumes or dismisses; cancel cancels. Both switch the device to its timer bank first. They replace the Pivot - Timer Toggle Script, which could only send a single press, so a dashboard could never properly cancel a timer.
  • Fix (Timer Control blueprint): A cancel sent from a dashboard was ignored. The long-press condition read trigger.to_state, which an event trigger doesn’t have, so the template errored and the cancel branch never ran. The old dashboard cancel button worked around this by setting the timer state to idle directly, which skipped the cleanup: timer_end was left behind and Display Persistent Value wasn’t restored. Requires re-importing the Pivot - Timer Control blueprint. Until you do, pivot.timer_cancel performs the same reset itself, without the spoken confirmation.
  • Fix (Timer - Voice blueprint): “Set a 5-minute timer” started a timer at the default duration instead. Speech-to-text writes the duration as “5-minute”, so the spoken number reached the blueprint as 5- and read as zero. The same happened with “30-second” and “2-hour”. Requires re-importing the Pivot - Timer - Voice blueprint.
  • Fix (dashboard): Several behaviours the templates got wrong:
    • Dragging the bar of a bank that wasn’t active moved the bar but never changed the entity. It now makes the bank active first.
    • Timer presets and the timer bar only worked while the timer bank was active.
    • The idle timer showed minutes estimated from the gauge instead of the real duration, so it could read 60 mins for a 1-minute timer.
    • The 15m preset never showed as selected.
    • Garage doors read On/Off instead of Open/Closed and offered Announce Value.
    • The downloadable button-card-templates.yaml still used the old 0-based bank numbers, so every bank card it drew was empty. It is fixed for anyone still using it.
  • Change: Automated tests expanded from 99 to 108, plus 52 for the cards.
v0.0.92
  • Fix: Re-pointing a bank at a different entity left the previous entity’s value on the dial. The gauge was only re-synced when the new entity was a passive one (a scene, script, switch or garage door), so a bank moved from, say, a light at 100% to a number helper reading 57 kept showing 100 until something else happened to re-sync it — the entity changing state, or switching banks. Re-pointing now mirrors the new entity in every case, matching what switching banks already did. Most noticeable when an automation re-points a bank at an entity that then sits still.
  • Change: Automated tests expanded from 96 to 99.
v0.0.91
  • Fix: Renaming a device in ESPHome silently stopped Pivot pushing settings to it. The settings push after a Home Assistant restart calls an action named after the device’s ESPHome name, and Pivot used the name recorded when the entry was set up – so after a rename the push never reached the device, and settings could stay stale until changed. Pivot now looks up the device’s current name at every attempt. Existing entries are fixed by updating; no re-setup needed.
  • New: Reconfigure. If the VPE is added to Home Assistant again – re-adopted in ESPHome, reset, or first added by IP address – it becomes a new device and the Pivot entry stayed linked to the old one: the knob kept working, but button presses and triple-press announcements silently stopped. Choose Reconfigure from the entry’s menu to pick the right device; your suffix, bank assignments and settings are kept. Previously the only fix was deleting and re-adding the entry. Automations that point at the device’s button entity directly – the Pivot Timer blueprint’s Button event entity input, or your own – still need updating by hand; those built on the pivot_button_press event do not.
  • New: A Repairs notice when Pivot can’t hear the button. Raised when the linked device or its button no longer exists, or when the device is clearly online (it just sent a knob turn or bank switch) while the button Pivot listens to has been unavailable for over a minute. A device that is simply switched off never triggers it, and the notice clears itself once the button can be heard.
  • Change: When the settings push fails, the log now names the exact action it looked for and mentions Reconfigure, instead of only suggesting the device is offline or on old firmware.
  • Fix: The bank assignment screen said only scenes and scripts ignore the knob. It now covers switches, input_booleans and open/close-only covers such as garage doors, and mentions their status ring.
  • Fix: input_boolean entities can now be chosen in the bank entity picker. They were supported, but could only be assigned by editing the bank’s text entity directly.
  • Fix: Re-linking an entry no longer replaces its Pivot device. The device is identified by the ESPHome device it is linked to, so a re-link would have built a second one and moved every entity to it — losing the device’s area, its name, and any automation targeting it.
  • Change: Automated tests expanded from 71 to 96.
v0.0.90
  • New: Switch and input_boolean banks show their state on the LED ring – a full ring in the bank colour when on, off when off. It updates live however the entity changes: the button, a dashboard, an automation or voice. The bank’s value now mirrors the entity’s state (100 on, 0 off) instead of being held at zero. Requires firmware v0.0.27 to display; with older firmware these banks behave exactly as before.
  • New: Garage doors and other open/close-only covers are now passive banks. The knob does nothing, the button toggles the door, and with firmware v0.0.27 the ring is full when the door is open and off when it is closed. Previously the knob sent a set-position command that Home Assistant rejected, so it silently did nothing; the bank value never followed a door that does not report a position; and value announcements could say “50 percent open” about a garage door. Covers that accept a position – blinds, shutters – are unchanged.
  • Fix: Whether a cover is open/close-only is decided by its SET_POSITION feature, not by whether it reports a position – some garage doors report 0 and 100 but cannot be sent one. A cover whose state has not loaded yet keeps the original behaviour until it does, then becomes passive automatically, so a Home Assistant restart cannot misclassify a blind.
  • Fix: Reassigning a bank that is not currently active to a passive entity now sets its value straight away. Previously only the active bank was updated, so the previous entity’s value (a light’s 60%, say) stayed in the device’s cache until you next switched to that bank.
  • Change: Automated tests expanded from 45 to 71, adding end-to-end coverage of the status ring: live state changes, restarts, entities that load after Pivot, unavailable entities, reassignment, and confirmation that the knob never commands a passive bank.
v0.0.89
  • Fix: A successful reduced sync was reported as a total failure. When a bank colour entity is unavailable, Pivot falls back to repairing the boolean settings only – but that fallback was then mistaken for “the device just gained full support mid-push”, retried against the same unavailable entity, and logged a delivery failure for a push that had in fact succeeded. Startup sync was also never marked complete in that case.
  • Fix: Cover, climate and media player commands are briefly delayed to avoid flooding a device while the knob is turning. A delayed command is now cancelled if the integration is unloaded or the bank is reassigned in the meantime – previously it could still fire at whichever entity the bank used to point to.
  • Fix: Bank colours are now validated properly. Any seven-character value starting with # was accepted, so a malformed colour reached the firmware and was applied as black instead of being rejected.
  • Change: Automated tests expanded to 45, adding coverage for reduced-sync completion state, delayed-command cancellation on unload and on reassignment, and colour validation.
v0.0.88
  • Fix: Device settings could silently fail to reach the device after a Home Assistant restart, staying stale until each switch was toggled off and on again. Home Assistant’s ESPHome integration only delivers a subscribed entity’s value as an initial state at subscribe time or as a genuine change – if Pivot’s entities are not restored when the device subscribes, nothing is sent, and the later entity-addition event is discarded. The pivot_sync_settings push added in v0.0.84 targeted this exactly, but ran only once at startup and gave up permanently if the device had not connected or an entity was not yet readable, so it lost the same race it was built to fix. The push now also fires when the device registers its action, retries on a backoff schedule until an attempt actually succeeds, and logs a warning if it never does.
  • Fix: The settings push now confirms delivery instead of assuming it. Home Assistant registers ESPHome device actions from cached metadata during setup, so the action existing does not mean the device is reachable; a push to a powered-off device was previously recorded as successful and cancelled the retries.
  • New: Startup repair now covers the active bank, per-bank values, displayed bank colours and the configured identity colours used by the Bank Indicator. Previously only the boolean settings were repaired, so these could remain stale after a restart.
  • Fix: The declared minimum Home Assistant version was wrong. Pivot advertised 2024.4.0 but uses OptionsFlowWithReload, which was introduced in 2025.8.0 – installations on the advertised minimum could fail while loading or configuring the integration. The minimum is now 2025.8.0.
  • Fix: The ESPHome device name is now read from device_name, the key current Home Assistant actually writes. Pivot checked a legacy name key first and always fell through to the connection host, so a device added by IP address produced a corrupted entity suffix (192168142_…) that silently broke every entity ID. An IP-derived name is now rejected with a clear warning instead.
  • Fix: Debug logging no longer includes the whole ESPHome config entry, which contains the API password and noise PSK.
  • Fix: Clearing the Text-to-Speech or media player option now sticks. An emptied field was treated as “not set” and fell back to the previously saved value, so it could never be cleared.
  • Change: Removed the device configuration link, which pointed at a web server the firmware does not run.
  • Change: Requires firmware v0.0.25 for the full startup repair. With older firmware the integration automatically falls back to the original boolean-only sync, so mixed versions keep working in both directions.
  • Change: Automated tests expanded from 26 to 40, covering the sync payload, version fallback and its race orderings, offline retry, device-name discovery, IP rejection, secret-safe logging and cleared options. Lint tooling is now pinned so CI results cannot change without a deliberate edit.
v0.0.87
  • Fix: Restored the integration’s brand icons, removed in error in v0.0.86. On Home Assistant 2026.3 and later, the brand/ folder inside the integration is the official local brand image mechanism, so the Pivot icon shows on the integrations page again. No functional changes.
v0.0.86
  • Fix: Upgrading to v0.0.85 could reset bank assignments to the values chosen during initial setup. Seeding now only fills banks whose text entity is empty – the bank entity text inputs remain the source of truth, and editing them directly (or from an automation) is fully supported and persists across restarts.
  • Change: All internal fire-and-forget tasks are now config-entry-tracked background tasks – visible in diagnostics, cancelled on unload, exceptions surfaced.
  • Change: Removed unused logo/icon files from inside the component directory – they were never read by Home Assistant or HACS.
v0.0.85
  • Fix: Bank entities selected during initial setup are now applied. They were stored during the config flow but never read, so fresh installs silently ignored the bank assignments chosen in the setup wizard (changing them later via the options flow was unaffected). They are now seeded into the bank text entities on first setup.
  • Fix: Passive bank flags could permanently stop updating after a restart depending on platform setup order – the sensor looked its sibling text entity up in the entity registry before it was guaranteed to exist. Sensors now track the pinned text entity ID directly, making startup order irrelevant.
  • New: Automated test suite (25 tests) covering setup and entity provisioning, value mapping, bank control and loop prevention, the config flow, and restart regression scenarios for the v0.0.84 fixes. Runs in CI on every change alongside hassfest, HACS validation and ruff.
  • Fix (Timer Control blueprint): Added a stuck-alert backstop. If the alarm-dismiss callback from the device is lost (e.g. the device rebooted mid-alarm while Home Assistant was also restarting), the timer state could remain stuck on alerting, blocking any new timer. Since the firmware hard-stops every alarm after 15 minutes, an alerting state older than 16 minutes is now automatically reset to idle. Requires re-importing the Pivot – Timer Control blueprint.
v0.0.84
  • Fix: Mirror Light colour is no longer lost when Home Assistant restarts. The bank colour picker previously pushed its restored (configured) colour over the mirrored colour on every startup – an active mirror now survives restarts without needing a knob turn to recover.
  • Fix: Device settings (Control Mode, Show Control Value, Dim LEDs When Idle, per-bank Mirror Light and passive flags) are now pushed directly to the device via the new pivot_sync_settings firmware action once Home Assistant has finished starting. The previous re-publish approach (v0.0.82) could not reach the device: Home Assistant’s ESPHome integration only forwards genuine state changes, so a device that subscribed before the Pivot entities were restored never received their values. Requires firmware v0.0.24 – with older firmware the push is skipped silently and behaviour is unchanged.
  • Change: Internal modernisation – per-entry state moved to entry.runtime_data, internal sync writes now use tracked contexts instead of a sentinel parent context, and startup colour handling keys off Home Assistant’s started signal instead of a fixed delay. No behaviour change intended.
  • Change: Removed the invalid min_version key from the manifest (the minimum Home Assistant version is declared in hacs.json). Added automated repository validation (hassfest, HACS validation, ruff) that runs on every change.
v0.0.83
  • Fix: Knob value changes triggered by user automations are no longer silently ignored. Previously, any number.set_value call made inside an automation (which carries a parent context) was incorrectly treated as an internal sync write and dropped.
  • Fix: Timer duration knob scaling now uses the correct fallback maximum of 60 minutes, matching the timer duration entity definition.
v0.0.82
  • Fix: Setup notification is now shown only once. The flag is stored in the config entry after the notification is sent, so it is never recreated on subsequent restarts even if dismissed.
  • Fix: Switch states (e.g. Show Control Value, Dim LEDs When Idle) are now re-published to the firmware after Home Assistant finishes starting. The ESPHome device subscribes via WebSocket and may receive unavailable during startup before state is restored – the re-publish ensures it receives the correct value once HA is ready.
  • New (Timer Toggle script blueprint): Dashboard timer button now switches to the timer bank before firing the press if the device is currently on a different bank. Requires re-importing the Pivot Timer Toggle script blueprint.
v0.0.81
  • New (Timer blueprint): Display Persistent Value (show_control_value) is now automatically turned on when the timer starts or resumes, and restored to its previous state when the timer ends, is cancelled, or auto-cancels after 15 minutes of being paused. If it was already on before the timer started, it stays on afterwards. Requires re-importing the Pivot – Timer Control blueprint.
v0.0.80
  • Change: Blueprints are no longer bundled with the integration. They are now hosted publicly on GitHub and imported via URL – see the Timer page for import links. Re-importing picks up any updates without needing an integration release. A setup notification now appears when a new device is added, linking directly to the import URLs.
v0.0.79
  • Change: Triple press now announces the assigned bank entity regardless of the System Announcements switch. Mute Announcements still silences it.
v0.0.78
  • Fix: Climate and cover value announcements now speak the commanded value rather than reading from the entity attribute. Previously the announcement fired ~200 ms after the debounced service call, which was not enough time for cloud devices to confirm the new state – so the spoken temperature or position was always the previous value. Climate now computes the target temperature from the knob position using the entity’s min/max range; cover announces the commanded position directly.
v0.0.77
  • Fix: Climate, cover, and media player service calls are now debounced (400 ms) when the knob is turned quickly. Previously, rapid knob turns sent a service call on every tick, which could cause cloud-connected devices (e.g. Tuya, MagiqTouch) to drop commands or go temporarily offline. The actual command now only fires once the knob settles. Visual feedback (LED ring colour, pivot_knob_turn events) is unaffected and still updates in real-time.
v0.0.76
  • Fix: Configure screen bank entity assignments were shifted by one and Bank 4 was unreachable. The options flow was using the 0-based form field key directly as the entity ID key, producing bank_0_entity through bank_3_entity entity lookups that no longer exist after the v0.0.75 rename. Form key and entity ID key are now decoupled with the correct +1 offset applied only to the entity ID lookup.
v0.0.75
  • Breaking change: Bank entity IDs are now 1-based to match user-facing bank numbers. bank_0_* entities are now bank_1_*, bank_1_* are now bank_2_*, and so on through bank_4_*. Existing entity registry entries for renamed entities will be orphaned and must be removed. Any custom automations or dashboards referencing the old entity IDs will need to be updated. The firmware, integration, dashboard YAML, and blueprints are all updated together in this release.
v0.0.74
  • Fix: All Pivot devices failed to load on startup with AttributeError: 'EntityRegistry' object has no attribute 'async_entries_for_device'. The button event entity lookup was using an instance method form of the API that was added in a later HA version. Reverted to the stable module-level er.async_entries_for_device(registry, device_id) call, which works across all supported versions. The crash occurred after bank control listeners were registered but before they were stored, so knob control continued to work while button toggle and announcements were completely non-functional.
v0.0.73
  • Fix: Non-dimmable lights (lights with no brightness attribute) now sync to 100% when on instead of 0%. Switching to a bank assigned to a non-dimmable light no longer shows an empty gauge.
  • Fix: number and input_number entity values are now snapped to the entity’s declared step size before being applied. Previously, the exact knob value was written regardless of the entity’s step, which could produce out-of-step values on strict entities.
  • Fix: Climate temperature sync no longer falls back silently on conversion error. If min_temp, max_temp, or the current temperature cannot be read, the sync is skipped cleanly rather than writing an incorrect value.
  • Fix: Switch entities reliably publish their restored state immediately on startup. Previously, if the last state was unavailable, the entity could briefly appear unavailable before the next state write.
  • Fix: The startup push timer on bank colour light entities is now correctly cancelled if the entity is removed before it fires. Previously the cancel handle was not registered with async_on_remove, so it could attempt to fire on an entity that no longer existed.
  • Fix: ESPHome device hostname is now URL-encoded when building the device configuration link. Devices with hyphens, dots, or other special characters in their name no longer produce a malformed link in the device page.
  • Fix: Config flow now fails clearly if the ESPHome device name cannot be read from the config entry, instead of silently falling back to a wrong suffix and misconfiguring the device.
  • Change: Config flow suffix field now pre-fills with the suffix detected from the selected ESPHome device, so it does not need to be re-typed.
  • Internal: Translations file (translations/en.json) added – config flow steps, field labels, error messages, and abort reasons now appear correctly in the HA UI.
  • Internal: __init__.py split into focused modules (bank_control, button, mirror, blueprints, announcements, entity_mappings). No change in behaviour.
  • Internal: PASSIVE_DOMAINS consolidated into a single definition in const.py – previously duplicated in four places.
v0.0.72
  • Fix: Climate temperature mapping now reads min_temp, max_temp, and target_temp_step directly from the thermostat entity’s attributes instead of assuming a hardcoded 16–30 °C range. Works correctly with Fahrenheit thermostats, non-standard ranges, and any step size – no configuration required.
  • Change: All legacy migration code that read and wrote scripts.yaml and automations.yaml has been removed. This eliminates a category of fragile file-mutation behaviour that was a holdover from the removed Automatic (managed) mode.
v0.0.71
  • Fix: Turning off System Announcements no longer silences value announcements (knob turn). System Announcements and Value Announcements are independent – System Announcements controls bank change and control mode spoken announcements only; per-bank Announce Value switches control value announcements. These were incorrectly coupled.
  • Fix: input_number entities now correctly trigger value announcements and speak their value with unit after the knob settles. They were inadvertently excluded from the announcement domain list despite being a fully supported active domain.
  • Fix: Switching to a timer bank while the timer is idle no longer causes a spurious write back to the timer duration. A missing sync context meant the bank value update was treated as a physical knob turn, producing a rounding-affected duration write and a false pivot_timer_duration_set event.
  • Fix: Minimum required Home Assistant version corrected to 2024.4.0 in HACS metadata (was incorrectly listed as 2024.1.0, which could lead to a confusing install failure on older versions).
v0.0.70
  • Fix: Switching to a timer bank now announces “Timer” correctly. The bank change announcement was skipped for timer banks because the bank entity value timer contains no dot – which was the guard used to detect a real entity. Timer banks are now handled separately and announce “Timer” explicitly.
v0.0.69
  • Fix: Value announcements (knob turn) now fire correctly. hass.async_call_later is not a valid method on the hass object – the debounce call threw an exception on every knob turn, silently preventing announcements. Replaced with async_call_later(hass, delay, callback) from homeassistant.helpers.event.
v0.0.68
  • Change: Announcements are now handled natively by the integration. The Pivot – Announce blueprint has been removed. To enable announcements, go to Settings → Devices & Services → Pivot → your device → Configure, pick a TTS service and speaker, and tick Enable spoken announcements. The integration announces bank names on bank change and triple press, and speaks entity values after the knob settles (gated per-bank by the Announce Value switches). The same TTS and speaker settings are shared with the Timer blueprint.
v0.0.66
  • Change: Manual setup mode removed. Blueprints are always installed. The configure dialog now shows only TTS and speaker settings, with a note that advanced users can build custom automations using Pivot’s events.
v0.0.65
  • Fix: Value announcements no longer fire when an entity is changed externally (dashboard, motion, assist, etc.) after a button press or bank sync. _sync_value_from_entity was calling number.set_value without a context, so the resulting state change had parent_id=None and was treated as a physical knob turn, firing pivot_knob_turn and triggering the announce blueprint.
v0.0.64
  • Fix: Pivot – Timer blueprint no longer triggers start/pause on button presses from non-timer banks. The single press condition now checks that the pressed bank matches the timer bank number.
v0.0.63
  • Debug: Added detailed debug logging to the button press listener – logs which entity is being watched, skipped reconnect transitions, and the resolved press type, control mode, and bank entity on every press.
v0.0.62
  • Fix: Corrected the fallback device_id lookup for older config entries. The previous fallback incorrectly matched the ESPHome device name against device registry identifiers (which are MAC addresses). Now mirrors the same host/name lookup the config flow uses.
v0.0.61
  • Fix: Button event entity lookup now uses device_class: button instead of a string match on the entity ID, making it reliable regardless of how the ESPHome device is named in HA. Falls back to any event-domain entity on the device if device class is absent.
  • Fix: Added fallback device_id lookup for config entries set up before device_id was stored – resolves via the ESPHome device name. Failures are now logged at WARNING level instead of being silently dropped.
v0.0.60
  • Fix: Button toggle no longer fires spuriously when the ESPHome device reconnects to Home Assistant. Previously, the button_press_event entity restoring its last state on reconnect could cause an unintended entity toggle.
v0.0.59
  • Change: Button toggle is now handled natively by the integration – the Pivot – Bank Toggle script blueprint is no longer needed. Requires a firmware reflash (v0.0.15+). Existing users: delete the {suffix}_bank_toggle script from Home Assistant after reflashing.
v0.0.58
  • Change: Pivot – Timer blueprint no longer requires a Bank Number input. The blueprint automatically detects which bank is reserved as a timer by reading the bank entity text entities at runtime. If no timer bank is reserved when the automation is created, the blueprint is inert and activates automatically once one is assigned – no changes to the blueprint needed.
v0.0.57
  • New: TTS service and media player are now configured once in the integration settings and shared automatically across all blueprints. Two new diagnostic text entities (text.{device_suffix}_tts_entity, text.{device_suffix}_media_player_entity) are written from the config entry on every setup and reload.
  • Change: Pivot – Timer blueprint no longer has a TTS Entity input – TTS is read automatically from the integration settings.
  • Change: “Speak bank and mode changes” toggle removed from the configure dialog. The System Announcements switch (switch.{device_suffix}_announcements) now uses normal restore behaviour – defaults on at first creation, then user-controlled from the device page.
v0.0.54
  • Fix: Blueprint files are now bundled inside custom_components/pivot/blueprints/ so HACS ships them correctly. Previously they lived at the repo root (blueprints/) which HACS does not install – _install_blueprints was silently copying nothing.
  • Change: Legacy per-device blueprint files (e.g. pivot_ha_voice_orange_announcements.yaml) and backup files (automations.yaml.pivot_backup, scripts.yaml.pivot_backup) left by a previous Automatic mode installation are now removed automatically on startup.
v0.0.53
  • Fix: Fixed an IndentationError introduced in v0.0.52–a missing return inside the context.parent_id guard in the timer bank branch left an empty if block, preventing the integration from loading.
v0.0.52
  • Change: Automatic (managed) mode removed. The integration no longer writes to scripts.yaml, automations.yaml, or /config/pivot/. Any device previously configured in Automatic mode is migrated to Blueprint mode automatically on next restart, and the files Pivot wrote are cleaned up.
  • New: pivot_bank_changed event added. Fired whenever the active bank changes, with suffix, bank, and bank_entity fields.
  • Fix: Value announcements no longer fire when an entity is changed externally (motion, dashboard, automation). The pivot_knob_turn event now only fires when the change originates from a physical knob turn – detected via context.parent_id.
v0.0.51
  • Fix: Bank entity text fields no longer revert to the configured default on every Home Assistant restart. Previously, async_setup_entry would overwrite whatever value the entity had restored from state storage with the value stored in the config entry – so any direct edits made outside the configuration flow would be lost on restart. The startup write loop has been removed; entities now restore correctly via Home Assistant’s built-in state persistence, and the configure flow continues to write values immediately when the user reconfigures.
v0.0.50
  • Fix: Fixes a 500 error in the Home Assistant automation editor when opening automations created from the pivot_announce_bank.yaml or pivot_timer.yaml blueprints after the mute_entity input was added. The entity selector with default: "" was invalid – changed to a text selector so an empty value is accepted. Also tightens the mute condition to handle null as well as empty string (not mute_entity or ...).
v0.0.49
  • New: Per-bank Announce Value switches (switch.{suffix}_bank_N_announce_value, one per bank). When enabled, the value of the bank’s assigned entity is announced via TTS after the knob settles (~600 ms debounce). Supports climate (speaks temperature), cover (speaks position), light, media_player, and fan (speak knob value as percent), and number (speaks entity state with unit). Off by default.
  • New: Global Mute Announcements switch (switch.{suffix}_mute_announcements). When on, all spoken announcements are suppressed – no other behaviour changes. Off by default.
v0.0.48
  • New (Script blueprint): Adds the Pivot Timer Toggle script blueprint. Install once – the script is shared across all Pivot devices, with device_suffix and bank passed as runtime variables by each dashboard card.
v0.0.47
  • Fix (Timer blueprint): Duration announcement now plays reliably when the knob is turned slowly. The debounce condition was comparing states(duration_entity) against trigger.event.data.duration – if the HA entity state hadn’t updated within the 150 ms debounce window, the comparison silently failed and no announcement played. Duration is now read directly from the original trigger event data, which is always available immediately.
v0.0.46
  • Fix (Timer blueprint): Bank entity check is now case-insensitive. Timer, TIMER, etc. are all accepted alongside the recommended lowercase timer.
v0.0.45
  • Change (Timer blueprint): Reverted the /5s gauge sync added in v0.0.44. With multiple devices each running an automation every 5 seconds, the idle overhead outweighs the benefit. The single /30s trigger is restored.
v0.0.44
  • Change (Timer blueprint): Added a /5s gauge sync trigger for smoother gauge updates while running. Reverted in v0.0.45.
v0.0.43
  • Change (Timer blueprint): Long press cancel is now restricted to the timer bank. Previously, a long press on any bank would cancel the timer – this conflicted with long press being reserved for custom actions on other banks. The cancel now only fires when number.{suffix}_active_bank matches the configured timer bank number.
v0.0.42
  • New (Timer blueprint): Adds a Silent Mode boolean input (off by default). When enabled, the blueprint sets the timer_silent_mode switch on the device before triggering the alarm – suppressing the alarm sound while leaving the LED ring pulse and “stop” wake word intact. Requires firmware v0.0.14 or later; gracefully ignored on older firmware.
v0.0.41
  • New (Timer blueprint): A dedicated cancel button can now be added to the dashboard. The blueprint accepts pivot_button_press with press_type: long_press as a secondary cancel trigger alongside the physical long press – enabling a dashboard script to cancel in the same way the physical button does, including the “Timer cancelled” TTS announcement. See the Timer page for setup.
v0.0.40
  • Fix (Timer blueprint): Long press cancel now works reliably. Adds a Button Event Entity input (pre-filtered to event entities on the selected Pivot device) and uses a direct state trigger on it instead of relying on pivot_button_press.
v0.0.39
  • Change (Timer blueprint): Replaced separate Media Player and Timer Ringing Switch entity inputs with a single Pivot Device picker. The media player, timer ringing switch, and button event entity are now derived automatically from the selected device using device_entities().
v0.0.38
  • Fix (Timer blueprint): Long press cancel now reliably triggers the automation. The previous blueprint used a single unfiltered pivot_button_press trigger and relied on conditions to match the right device and press type – causing long press traces to be silently displaced from the 5-entry history by gauge sync and other events before they could be inspected.
v0.0.37
  • Fix (Timer blueprint): Dashboard alarm dismissal now works correctly. The previous approach constructed switch.{suffix}_timer_ringing to identify the alarm switch, but the ESPHome device name and the Pivot suffix are independent and don’t have to match. A new optional Timer Ringing Switch input lets you pick the correct entity directly.
v0.0.36
  • New (Timer blueprint): A dashboard button can now start, pause, resume, and dismiss the timer alarm by firing a pivot_button_press event. See the Timer page for setup instructions. Requires firmware v0.0.13.
v0.0.34
  • Change: Pivot-owned YAML files are now written to a /config/pivot/ subfolder instead of the /config/ root.
  • Fix: Automation filenames had a double pivot_ prefix (pivot_pivot_{suffix}_announcements.yaml). Files are now named pivot_{suffix}_announcements.yaml as intended.
  • Fix: The duplicate include-line check was comparing exact strings – a format change between versions could bypass it and append a second entry. The check now uses a filename-based marker.
  • Fix: The write order for scripts.yaml/automations.yaml was not atomic. Each write now creates the new file first, then rewrites the parent YAML in one pass, then deletes any legacy files.
  • Change: The include-line write is now self-healing. On every load, Pivot strips all existing entries for its keys and writes the correct single line.
v0.0.33
  • Fix (Timer blueprint): Long press cancel now works from any bank on the device.
  • Fix (Timer blueprint): Long press is now correctly restricted to running and paused states.
  • New (Timer blueprint): Paused timers auto-cancel after 15 minutes.
v0.0.32
  • Fix (Timer blueprint): Timer alarm now dismisses reliably on the first press. The alarm is now handed off entirely to device firmware (v0.0.11+): the blueprint sets timer_state to alerting, the firmware starts the built-in alarm, and dismiss is handled natively in firmware.
  • Change (Timer blueprint): Switched back to mode: queued. Queue depth increased to 10.
  • Change (Timer blueprint): Long press during alerting state is now ignored.
v0.0.31
  • Fix (Timer blueprint): Finish alert dismiss is now more reliable. The dismiss branch no longer requires the button press to match the configured bank number – any press on the device dismisses the alarm.
v0.0.30
  • Fix (Timer blueprint): Finish alert now dismisses immediately on any press. The blueprint now uses mode: parallel so a button press runs the dismiss branch immediately, regardless of what the alert loop is doing.
  • Fix (Timer blueprint): The “1 minute timer – press to start” announcement no longer plays after dismissing the finish alert.
  • Fix (Timer blueprint): A press during the optional TTS finish announcement now also dismisses immediately.
  • Fix (Timer blueprint): TTS Entity input is now an entity picker (dropdown) instead of a plain text field.
  • New: Added alerting as a valid timer_state select option.
v0.0.29
  • Fix: Passive banks (scene, script, switch, input_boolean) now show no gauge – when switching to a passive bank the LED gauge immediately goes to 0.
v0.0.26
  • Fix (Timer blueprint): Pressing to dismiss the finish alert no longer immediately re-starts the timer.
  • Change: Timer duration maximum reduced from 120 to 60 minutes.
v0.0.25
  • Fix (Timer blueprint): Timer finish alert now reliably dismisses on first button press.
  • Fix (Timer blueprint): Long press now reliably cancels the timer.
  • Change (Timer blueprint): Finish alert flash timing increased to 500 ms on / 300 ms off.
  • New (Timer blueprint): TTS announcements on start, pause, and resume.
  • Fix: Clamp timer duration to a minimum of 1 minute when set via the knob.
v0.0.24
  • New: Timer banks now respond to the knob when the timer is idle. Turning the knob sets the timer duration and the gauge shows the selected duration as a proportion of the maximum. When the knob stops moving, the selected time is announced via TTS. Requires the Timer blueprint to also be updated to v0.0.24.
v0.0.23
  • New: Added Dim LEDs When Idle switch. Requires firmware v0.0.9.
v0.0.22
  • New: input_number and number entities are now supported.
v0.0.21
  • Fix: bank_N_configured_color entities introduced in v0.0.20 were incorrectly marked as disabled by default. Changed to entity_category: diagnostic.
v0.0.20
  • New: Added bank_N_configured_color text entities (one per bank, hidden). Required by firmware v0.0.7.
v0.0.19
  • Fix: Announcements automation reverted to mode: single.
v0.0.18
  • Fix: Timer finish alert now reliably dismisses on first button press.
v0.0.17
  • Fix: LED gauge now shows correctly on timer banks.
v0.0.16

After updating: two manual steps are required:

  1. If you use the timer, go to Settings → Devices & Services → Pivot → your device → Configure and set the bank entity for your timer bank to timer (lowercase).
  2. Open your Pivot Timer automation and re-save it so it picks up the updated blueprint logic.
  • Fix: Switches now correctly restore their state after a Home Assistant restart.
  • Fix: Timer blueprint now requires the bank entity to be set to timer.
  • Change: Timer finish flash speed increased to 150 ms per flash.
  • Fix: Dismiss press is now checked at the start of each alert loop iteration.
  • Change: Announcements automation now uses mode: restart.
  • Fix: Bank toggle script no longer attempts to toggle timer as a real entity.
v0.0.15
  • New: Timer finish now repeats – gauge flashes 3 times and the finish sound plays in a loop (up to 10 times) until dismissed.
  • Change: Finish sound is now hardcoded to the VPE built-in timer_finished.flac.
  • New: Optional TTS message now plays once before the alert loop begins.
v0.0.14
  • Fix: Single press no longer causes idle → running → paused on reflashed firmware.
v0.0.13
  • Fix: switch and input_boolean entities now correctly mark their bank as passive.
v0.0.12
  • Fix: Changed bank-toggle script and timer blueprint to mode: single.
v0.0.11
  • Fix: Pressing once after a cancel/reset no longer immediately puts the timer into a paused state.
v0.0.10
  • Fix: Gauge now holds the correct remaining percentage when the timer is paused.
v0.0.9
  • Fix: Timer blueprint now triggers correctly on single press.
v0.0.8
  • Fix: Timer entities now appear correctly under the device.
  • Change: Timer entity set is now number.{suffix}_timer_duration, select.{suffix}_timer_state, and text.{suffix}_timer_end.
  • Change: Pivot Timer blueprint rewritten to be fully self-contained.
v0.0.7
  • New: Timer helper feature – three new per-device entities provisioned per device, disabled by default.
  • New: Pivot Timer blueprint.
  • New: Timer docs page.
v0.0.6
  • Fix: Resolved oscillation loop when adjusting brightness via the knob.
v0.0.5
  • Fix: Resolved a feedback loop in live entity sync where lights reporting intermediate brightness values during a transition could cause the LED gauge to oscillate.
v0.0.4
  • Fix: Turning off Mirror light colour now restores the colour set in the bank’s colour picker.
  • New: Bank value now stays in sync when the assigned entity is changed externally.
v0.0.3
  • Added Mirror light colour per-bank switch.
  • Removed secondary control value entity.
v0.0.2
  • Setup mode screen: descriptions and note added.
  • Bank assignment screen: removed colour names from bank labels.
  • Triple press announcement now says entity name only.
  • Bank change announcements now suppressed when bank is changed externally.
  • Added icon files to repo root for HACS.
v0.0.1
  • Initial release.

Firmware

v0.0.28
  • Fix: The LED ring now uses explicit timings for the WS2812B-2020 parts it actually has, instead of ESPHome’s generic WS2812 preset. That preset leaves no latch gap between frames, where these parts need roughly 280 microseconds, so a frame could be misread as a continuation of the one before it – showing as flicker or briefly wrong colours. Pivot redraws the ring far more often than the stock firmware does, so it had more chances to hit this. The values match upstream home-assistant-voice-pe #640, verified on the same hardware. Configuration only – no behaviour changes.
v0.0.27
  • New: Passive banks with an on/off state show it on the LED ring: a full ring in the bank colour when the entity is on or open, nothing when it is off or closed. Applies to switches, input_booleans and open/close-only covers such as garage doors. Scene and script banks still show nothing. Follows the existing Show Control Value and Dim When Idle settings. Requires integration v0.0.90 to take effect – with older integration versions nothing changes, so the two can be updated in either order.
v0.0.26
  • Fix: A knob adjustment could be sent to the wrong bank. Outbound writes are briefly delayed so a fast spin does not flood Home Assistant, but the destination was decided after that delay rather than when you turned the knob. Switching bank during the delay (hold and turn) meant the original adjustment was silently dropped and the newly selected bank could receive a command you never made. The destination is now fixed at the moment the knob is turned. Introduced in v0.0.25 – updating is recommended.
v0.0.25
  • Security: Over-the-air updates now require a password. Previously the OTA endpoint had none, so anyone able to reach the device on your network could replace its firmware – API encryption did not protect OTA at the time. Each device now needs a unique ota_password of at least 12 characters. See the firmware repository’s SECURITY.md for generation, the safe upgrade path for existing devices, and the rotation procedure. This is a breaking change: add ota_password to each device’s YAML before updating. Since ESPHome 2026.9, a device’s api_encryption_key also authenticates OTA uploads – see the Firmware page.
  • Fix: Turning the dial on a scene or script bank could leave the device unresponsive to its centre button – including starting the voice assistant – until the dial was used elsewhere or the device restarted. The passive-bank path skipped the cleanup that clears the “dial in use” flag.
  • Fix: The first knob turn immediately after switching mode or bank was often ignored. The device applied the change locally but only told Home Assistant 1.2 seconds later, and the integration rejects knob events that do not match Home Assistant’s view. The change is now reported immediately.
  • Fix: Rapid dial rotation sent one Home Assistant service call per detent. Outbound writes are debounced while local LED feedback stays immediate.
  • New: pivot_sync_settings_v2 API action, adding the active bank, per-bank values and both sets of bank colours to the settings push. The original pivot_sync_settings is unchanged so older integration versions keep working.
  • Change: on_boot is now a list of automations rather than a single one, so automations added in your own device YAML run independently of Pivot’s. Previously they were appended to the end of Pivot’s boot sequence, behind a ten-minute delay.
  • Change: Upstream sound assets are pinned to a fixed upstream commit instead of tracking a moving branch, so a given device configuration builds the same firmware every time.
v0.0.24
  • New: pivot_sync_settings API action. The Pivot integration (v0.0.84+) calls this once Home Assistant has finished starting, pushing Control Mode, Show Control Value, Dim LEDs When Idle and the per-bank mirror/passive flags directly into the firmware. This guarantees correct settings after a Home Assistant restart regardless of connection and restore ordering.
  • Fix: The post-connect settings re-sync now also covers Dim LEDs When Idle and the per-bank Mirror Light flags – previously these could remain stale after a restart until toggled in Home Assistant.
  • Fix: All post-connect re-sync reads are now guarded with has_state() so values Home Assistant has not yet delivered can no longer overwrite restored settings with defaults.
v0.0.23
  • Fix: Migrated HTTP media sources from platform: http_request to platform: audio_http. The http_request external component pin and top-level config key have been removed – this platform is now built into ESPHome 2026.5 under its new name. Builds on 2026.5 would fail without this change.
  • Fix: Updated hey_mycroft wake word sensitivity probability cutoffs to match the v2 model tuning (253 / 242 / 237 for Slightly / Moderately / Very sensitive). The previous values were carried over from hey_jarvis and were not tuned for hey_mycroft@v2.
v0.0.22
  • Fix: Removed the kahrendt external component entry (sendspin, const, media_source). These components are now built into ESPHome 2026.5 and the pinned external ref was conflicting with the built-in versions. Requires ESPHome 2026.5.0 or later.
v0.0.21
  • New: In control mode, turning the knob while the voice assistant is speaking adjusts the device volume instead of the active bank value. The LED ring switches to the voice mode volume display for the duration. Triggered only by VA TTS replies – integration announcements (bank values, bank changes) are unaffected.
v0.0.20
  • Fix: Updated component pins for ESPHome 2026.4.0 compatibility. audio, media_player, mdns, file, and speaker_source components are now merged into ESPHome core and no longer pinned externally. sendspin, media_source, and const are now sourced from the updated PR #14933. http_request pin updated to the current PR #12429 commit. Audio pipeline migrated to the new audio_file platform and updated speaker_source pipeline API. No functional changes.
v0.0.19
  • Breaking change: Bank entity ID subscriptions updated from 0-based (bank_0_*) to 1-based (bank_1_* through bank_4_*) to match integration v0.0.75. Must be updated together with the integration – the two are not compatible across this change.
v0.0.15
  • Change: Single press in control mode no longer calls script.{suffix}_bank_toggle directly. Toggle is now handled by the integration natively on the button_press_event trigger. Requires integration v0.0.59+.
  • Fix: button_press_event now only fires after media checks – if the press was used to stop an announcement or pause media, HA is no longer notified (preventing a spurious entity toggle).
v0.0.14
  • New: Adds a Timer Silent Mode switch. When on, the alarm sound is suppressed at the end of a Pivot timer – the LED ring still pulses and the “stop” wake word still activates, only the sound is silenced. Off by default. Requires a reflash.
v0.0.13
  • New: The timer_ringing switch is now exposed to Home Assistant, allowing a dashboard button or automation to dismiss the timer alarm by calling switch.turn_off. Requires a reflash.
v0.0.12
  • New: A button press in control mode now cancels an active voice assistant session without firing a pivot_button_press event.
v0.0.11
  • New: Timer alarm is now handled entirely in firmware. When the blueprint sets timer_state to alerting, the firmware plays the alarm from local flash storage, pulses the LED ring, and enables the “stop” wake word. When dismissed, the firmware calls back to HA to reset the state. Requires a firmware reflash.
v0.0.10
  • Fix: Passive banks (scene, script, switch, input_boolean) no longer show the full LED ring when Show Control Value is enabled. Passive banks now show no gauge.
v0.0.9
  • New: “Dim LEDs When Idle” feature. When enabled, the control mode gauge dims to 50% brightness after 2 seconds of no interaction. Requires integration v0.0.23.
v0.0.8
  • Fix: Switches such as Show Control Value and Control Mode now apply correctly after a restart without needing to be toggled.
v0.0.7
  • Fix: Bank Indicator now always shows the colour set in the bank’s colour picker, regardless of mirror state. Requires integration update to v0.0.20.
  • Change: Removed the ha_initialized startup guard and update_configured_colour_N workaround scripts.
v0.0.6
  • Fix: Double-pressing to toggle control mode now plays the sound first, then speaks the announcement.
  • Change: Triple-pressing in normal/voice mode no longer plays the triple-press sound effect.
v0.0.5
  • New: Bank Indicator quadrant now shows the bank’s configured colour when switching banks.
  • Fix: bank_mirror_r_0 global was missing from the firmware.
  • Fix: Configured-colour backup was being overwritten with the light’s colour due to a race condition.
v0.0.4
  • Fix: single_press added to button_press_event entity – the firmware now fires this event on every valid single press. Requires a firmware reflash.
v0.0.3
  • Removed secondary scroll (hold+turn in Normal mode) – restored to stock behaviour.
  • Removed unused mirror firmware globals.
v0.0.1
  • Initial release.