v0.31.0
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_updatessensor 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
occupancyandpeopleduration
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
whois 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". Omitwho
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 astatecondition 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. astaterule that tests where
someone is, or anunavailablerule 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