Skip to content

Releases: clintongormley/ambience

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 01 Jul 16:22

The first stable release of Ambience — a condition-based scene engine for
Home Assistant. You describe the scenes for a room ("Movie time", "Room empty")
along with the conditions under which each should apply, and Ambience watches
your home and applies the best-matching scene automatically. This section is a
snapshot of what Ambience offers at 1.0; the per-version entries below record
how it got here.

Highlights

  • Conditions, not triggers. Instead of wiring up "when someone enters the
    room…" automations, you describe the conditions that define each scene.
    Ambience re-evaluates the current context whenever anything relevant changes
    and applies the single best-matching scene — so a room lands in the right
    state even when nothing just "happened".
  • A rich condition palette. Build scenes from occupancy, people (who is home
    and where, with duration gates), time of day, sun position, light level
    (lux), weather, and day of week, plus arbitrary entity state — the last with
    full AND/OR grouping, parentheses, and negation. Power users can drop to a
    script or template condition, and an "unavailable" condition guards on an
    entity being unknown or missing.
  • Actions, not just target states. You choose which actions apply a scene,
    so you control how devices get there — including smooth fades via the
    companion Fado Light Fader
    integration. Expose only the actions and fields you care about; light,
    switch, and safe cover actions are seeded out of the box.
  • Scopes, categories, and a single winner. Scenes belong to a scope (House,
    Floor, or Area) and a category (e.g. lights vs. blinds). Exactly one scene
    wins per scope-and-category group, ranked by priority and specificity, so
    two rules can never clash over the same device.
  • Auto-derived triggers. Ambience reads your conditions and installs the
    Home Assistant triggers needed to keep scenes current — you never wire
    triggers by hand.
  • Per-scope switches that cascade. Every scope gets its own pause/resume
    switch; the House and Floor switches cascade down to the areas beneath them,
    and each can pause for a set number of minutes and then auto-resume. Add
    them to a dashboard or expose them to a voice assistant ("turn off
    Ambience").
  • A visual editor built to be read. Scenes render in a compact,
    human-friendly format that's easy to compare side by side. The panel adds
    undo/redo (shared across browser tabs), optional scene descriptions, live
    indicators showing which scene currently matches, and inline help links —
    and works on mobile.
  • Debuggable and testable. A tracer explains why the winning scene won and
    why the others didn't; a simulator lets you change the time, weather, or any
    condition to test your rules; and the editor flags unreachable scenes and
    ordering problems before they bite. Config health surfaces missing or
    disabled entities as Repairs issues, and scene activity is written to the
    Home Assistant logbook per scope.
  • Privacy-conscious diagnostics. A one-click diagnostics download captures
    what's needed to debug a scene while scrubbing presence data, location, and
    secrets such as alarm and lock codes — safe to paste into a GitHub issue.
  • Installable via HACS, and translatable — English and Spanish today, with
    an in-panel nudge to contribute your own language.

Fixed

  • Entity names in scene condition summaries — and in the simulator and
    auto-triggers lists — now fall back to the entity's registered name (from
    the entity or its device) when it has no live state, matching what the
    entity picker shows. Previously they leaked the raw entity id (for example
    remote.cine instead of Cine) whenever the entity was unavailable or
    not yet loaded.

Full Changelog: v1.0.0-rc.1...v1.0.0

v1.0.0-rc.1

v1.0.0-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Jun 18:59
3f25d80

Added

  • After you update Ambience, the panel now notices when your browser is still
    running the previous version from its cache and shows a banner with a
    Reload button to pick up the new one — avoiding the confusing errors a
    stale panel can cause after an upgrade.

Fixed

  • The diagnostics dump downloaded from a category's ⋮ menu now names the file
    after the category's display name (e.g. ambience-area-kitchen-lights.json)
    instead of its internal id. Previously a renamed category — such as the
    built-in General renamed to Lights — kept its original id and so
    downloaded as …-general.json.

Full Changelog: v0.31.0...v1.0.0-rc.1

v0.31.0

Choose a tag to compare

@github-actions github-actions released this 29 Jun 10:54
c130897

Added

  • A banner now nudges you to request a translation when your Home Assistant
    language isn't one Ambience ships yet. It opens a prefilled GitHub issue, and
    dismissing it is remembered per language (region variants such as pt-BR are
    treated separately), so you're never nagged twice for the same language.
  • Documentation help links throughout the panel: each settings tab, condition,
    and the "Apply on every match" toggle now shows a small (?) help icon —
    where it has explanatory text the popover ends with a "Read more" link to the
    matching online documentation page, and where it doesn't the (?) opens that
    page directly in a new tab.
  • A new AI tab in Settings (beta, off by default — turn it on in the
    integration's options: Settings → Devices & services → Ambience → Configure)
    lets you build and fix scenes by
    describing what you want to an AI. Download AI bundle exports a snapshot of your areas,
    entities, exposed actions and current config (presence/location data redacted)
    to hand to an AI; upload the config file it returns back into the same tab to
    preview and import it (new or updated scenes, with any new category created for
    you). Imports go through the normal save path, so they're undoable. A matching
    knowledge pack — a Claude skill, a Claude Code plugin, and a portable guide —
    teaches any AI the Ambience schema and how to read a diagnostic, and stays in
    sync with the integration automatically on each release.

Changed

  • Consolidated the WebSocket scope handling internally (one save dispatcher, a
    shared scope-selector schema, and a single "scope not found" error contract
    across the get / save / enable commands). The only user-visible effect: opening
    an area or floor that no longer exists now shows the same "Unknown area/floor"
    message as trying to save it did.
  • Download diagnostics has moved out of the Traces viewer into each
    category's menu, alongside Run / View traces / Simulate / Auto-triggers.
    It still downloads the same diagnostics bundle scoped to that one (scope,
    category).
  • Removed the "Set up an action to get started" banner. New installs now seed
    default actions, so the prompt no longer applied.
  • Scene-update activity is now logged to the Home Assistant logbook against each
    scope's switch, e.g. Lounge Ambience 'Lights/Daytime Cloudy', so you can
    filter the logbook by area (for area-scoped switches) to see only the activity
    relevant to that space. The devices the scene changes are attributed to it —
    each shows triggered by 'Lights/Daytime Cloudy' (Lounge Ambience). The
    sensor.ambience_scene_updates sensor has been removed — anything referencing
    it (dashboards, automations, logbook filters) must be updated.
  • Per-scope pause switches are now always created for every enabled scope. The
    Scope-level pause switch toggle in the Advanced settings has been removed.
    Installs that previously had the toggle off will see new switch entities and
    devices appear after upgrading. The pause-and-auto-resume behaviour of those
    switches is unchanged.

Fixed

  • The optional "set up Workday & Weather" hint and the "install Fado Light
    Fader" notice now reappear after you delete and recreate the Ambience
    integration. Previously, dismissing either one hid it for good in that browser
    — even on a brand-new install — because the dismissal wasn't tied to the
    install. Each dismissal is now remembered per install, so a fresh setup starts
    with a clean slate.
  • When a scene is skipped because its scope's pause switch is off, the trace
    timeline now says "Skipped — the scope's pause switch is off." It previously
    referred to a non-existent "category switch".
  • A negated group in a state condition (NOT (… AND …)) no longer loses its
    negation when you change the group's AND/OR operator — that previously dropped
    the NOT silently and inverted the condition's meaning.
  • A category add/edit that the server rejects now rolls back in the Settings
    panel instead of continuing to show the rejected change as if it had saved.
  • Scene shadowing / ordering hints for occupancy and people duration
    gates are now correct for the "held for less than" mode, and no longer relate
    two predicates that use different duration modes — either could surface a
    spurious "this scene can never win" warning or mis-order the scene list.
  • Clearing every sensor from an occupancy or lux condition now removes
    the condition, instead of leaving behind a no-op "any sensor" row.
  • The lux range min/max inputs now reject fractional values inline ("Bounds
    must be whole numbers.") instead of letting them through to a generic save
    error from the backend.
  • A people condition whose who is a present-but-empty list (who: []) is
    now rejected on save and on import / AI authoring, matching the editor —
    previously it slipped through and silently ran as "all persons". Omit who
    entirely to mean all tracked persons.

Removed

  • sensor.ambience_scene_updates — replaced by per-scope logbook entries on
    each scope's pause switch (see above).
  • The Scope-level pause switch setting — scope switches are now always on.

Security

  • The diagnostics download and the AI bundle now scrub more before they
    leave Home Assistant — both are meant to be safe to paste into a GitHub issue
    or an AI chat. Newly redacted: alarm/lock codes and other secrets in scene
    action parameters; sensitive exposed-action defaults (push tokens, message
    bodies, recipients); the rendered detail of a state condition that targets a
    person or device-tracker; the zone label of a multi-person "for duration"
    gate; and a person/device-tracker entity id referenced directly by a scene's
    conditions
    in the exported config (e.g. a state rule that tests where
    someone is, or an unavailable rule on a device-tracker) — previously the bare
    entity id slipped through the config dump even though its trace detail was
    already scrubbed.
  • The trace debug log now records only the names of a scene action's
    parameters, never their values, so secrets such as alarm/lock codes or push
    tokens can't leak into a log that gets pasted into a bug report. (Debug logging
    is off by default; the full values remain available via the admin-only trace
    view.)

Full Changelog: v0.30.0...v0.31.0

v0.30.0

Choose a tag to compare

@github-actions github-actions released this 26 Jun 18:35
c93cadc

Changed

  • Scene actions are once again targeted by picking specific entities, scoped to
    the scene's area or floor. The entity/device/area/floor/label target picker
    added in 0.29.0 has been removed — Home Assistant's native target picker could
    not be limited to the scene's scope, which made it confusing to know what an
    action would actually affect. Any action saved with the newer target format is
    converted back to a plain entity list automatically the next time the
    integration loads.
  • The Unavailable condition now has the highest precedence of all conditions —
    above Script and Template. When two scenes are otherwise equally specific, the
    one that guards on an entity being unavailable, unknown, or missing now sorts
    first and wins, because whether an entity is observable at all is the most
    fundamental fact a scene can match on.

Fixed

  • Ambience's built-in turn-on/turn-off and safe-cover services no longer log a
    Home Assistant deprecation warning ("The deprecated argument hass was passed
    to async_extract_entity_ids"). This also keeps those services working on Home
    Assistant 2026.10, which removes the deprecated call.

Full Changelog: v0.29.0...v0.30.0

v0.29.0

Choose a tag to compare

@github-actions github-actions released this 26 Jun 11:43
06ec450

Added

  • Scene actions can now target by entity, device, area, floor, or label (like
    Home Assistant automations). The target resolves live at apply time and is
    constrained to the scene's scope, with a live count in the editor showing how
    many entities the target will act on. A directly-named entity is forwarded
    unchanged — it is the author's deliberate choice and is never scope-clipped.
    The device/area/floor/label picker needs Home Assistant 2026.1 or newer; on
    older versions the action editor falls back to entity-only targeting.
  • The safe cover actions — Open cover, Close cover, Set cover position, and Set
    cover tilt — are now seeded as default actions on new installs, so covers work
    in scenes out of the box.
  • The Actions settings page now shows a dismissible recommendation to install
    the Fado Light Fader integration (smooth light fading with automatic
    brightness restoration) when it isn't already installed.
  • The Lux condition now has an "is / is not" choice, so a scene can match when
    your light sensors are not in a chosen range — for example, blocking a scene
    until the room is no longer bright.

Changed

  • The action editor no longer prevents two actions in the same scene from
    targeting the same entity (Home Assistant's native target picker cannot hide
    individual entities); contradictory actions apply in order, last-write-wins.
    The config-health overlap warning still flags entities controlled by more than
    one scope/category group. A new target_empty Repairs warning flags an action
    whose target resolves to no entities in its scope.
  • In the Lux and Occupancy conditions, the "Any of / All of" selector now sits
    above the sensor list (and only appears when more than one sensor is chosen),
    and their summaries read more naturally — e.g. "Any of (Lounge, Hall) is
    bright", "All of (Lounge, Hall) are detected", "Lounge is unavailable".
  • The Advanced settings tab now has a clearer visual hierarchy. Section titles
    stand out from their fields, the two setting groups are more obviously
    separated, and the voice-assistant toggles are presented as a nested
    sub-section of the scope-level pause switch (their switches still line up with
    the fields above).

Removed

  • The admin-only ambience.apply_scene action — for calling Ambience from your
    own automations and scripts — has been removed. Automatic scene application
    (as conditions change) and the panel's Run / apply controls are unaffected;
    only the standalone service is gone.

Fixed

  • When overriding a built-in time-of-day period (e.g. "Dawn") or lux range, the
    name field now defaults to the range's current name instead of starting blank
    with only the "e.g. Wind down" placeholder. You can still rename it or clear
    it.

Full Changelog: v0.28.0...v0.29.0

v0.28.0

Choose a tag to compare

@github-actions github-actions released this 25 Jun 13:24
aab908e

Added

  • In the Entity State condition, each AND/OR group now has a "(…)" button that
    wraps all of that group's clauses in parentheses, so you can combine them with
    another clause under a different operator — for example turning "a AND b" into
    "(a AND b) OR c".

Changed

  • Condition summaries now prefix each entity with its area (e.g. "Kitchen ·
    Water pump Flow"), so clauses that reference similarly-named entities in
    different areas are no longer ambiguous. The area is omitted when the entity's
    name already contains it (e.g. an entity called "Zone Shower" in the "Shower"
    area stays "Zone Shower").
  • In the Entity State condition, the buttons that add another comparison within
    the same condition now read "Add clause" instead of "Add condition", to avoid
    confusion with the main "Add condition" button that adds a new condition.
  • A blocking scene whose condition is an OR now reads as "Block while … OR
    until …" instead of a hard-to-parse double negative. For example, a block that
    read "Block while NOT (Zone Shower is Clear for ≥5s) OR Water pump Flow > 5"
    now reads "Block while Water pump Flow > 5 OR until Zone Shower is Clear for
    ≥5s".

Fixed

  • In the Entity State condition, "Add clause" now works on a negated (NOT)
    group. Previously, clicking it while NOT was enabled did nothing until you
    turned NOT off.
  • Config health now flags an entity referenced by a scene when that entity is
    disabled (e.g. its device was disabled) rather than deleted. A disabled entity
    stays in the entity registry but has no state, so it can never satisfy a
    condition; it is now reported as missing in both the scene problem flag and
    the Repairs issue, instead of being silently treated as present.

Full Changelog: v0.27.0...v0.28.0

v0.27.0

Choose a tag to compare

@github-actions github-actions released this 24 Jun 10:44
75ca4df

Changed

  • In the Simulate panel, an entity attribute that has a known set of values
    (such as a remote's current activity) is now editable via a dropdown of those
    values — matching the scene editor — instead of a free-text field.

Fixed

  • The state value dropdown (in the scene editor and the simulator) now offers
    both On and Off for remote, automation, script, siren, humidifier, update and
    calendar entities, instead of only the entity's current state.
  • On phones the Simulate panel no longer squashes the entity name into a narrow
    column or scrolls sideways — each row's controls now wrap onto their own line.
  • Deleting the Ambience integration now also removes its stored data (scenes,
    scopes, switch and condition settings). Previously this data was kept on disk,
    so removing and re-adding the integration silently restored all your old
    settings instead of starting fresh. A reload or Home Assistant restart still
    preserves your data as before — only an explicit delete clears it.
  • When configuring an action's fields, each field's checkbox now lines up with
    the field name at the top of the row instead of floating in the vertical
    centre of multi-line descriptions.

Full Changelog: v0.26.0...v0.27.0

v0.26.0

Choose a tag to compare

@github-actions github-actions released this 23 Jun 11:02
d79c99f

Added

  • Scenes can now have an optional description. Add one from the scene editor via
    the "+ Add description" link below Scope. On the panel it appears as a "?"
    tooltip next to the scene name, and inline beneath the scene when you expand
    it.
  • Undo / redo for scene changes: the panel now keeps the last 30 scene edits in
    memory. Use the Undo and Redo buttons at the top of the panel — or Ctrl/⌘+Z and
    Ctrl/⌘+Shift+Z — to step back and forward through add, edit, delete, reorder,
    unpin and enable/disable changes. A caption beside the buttons always names
    the next change. The history is shared across browser tabs (which refresh
    automatically when you change scenes elsewhere) and clears when Home Assistant
    restarts.

Full Changelog: v0.25.0...v0.26.0

v0.25.0

Choose a tag to compare

@github-actions github-actions released this 22 Jun 17:22
d116898

Added

  • Live scene indicator: each scene in the panel now shows a small dot for its
    live state — a green dot on the scene that currently matches, and a hollow dot
    on a scene whose actions are still applied but no longer match. It updates
    automatically; tap a dot for an explanation.

Fixed

  • Long scene conditions and scope names now wrap inside the card on narrow and
    mobile screens, instead of overflowing and pushing the toggle and menu off the
    right edge.

Full Changelog: v0.24.0...v0.25.0

v0.24.0

Choose a tag to compare

@github-actions github-actions released this 21 Jun 20:31
af9c24f

Fixed

  • Scene updates sensor is now filterable in the Home Assistant logbook.

Full Changelog: v0.23.0...v0.24.0