Releases: Steven-D-Morgan/hass-entity-assistant
Release list
1.7.1 - Minor Fixes
Fixes
- Commits the missing
tests/snapshots/test_snapshots.ambrfile so the six
1.7 syrupy snapshot tests actually pass in CI.pytest-homeassistant-custom-component
overrides syrupy's default snapshot directory tosnapshots/(no
underscores) — a quirk that landed the 1.7.0 snapshots in the wrong
directory, silently failing every CI run.
CI
- Dependabot bumps:
actions/checkout4 → 7,actions/setup-python5 → 7,
softprops/action-gh-release2 → 3.
No integration behavior changes.
Full changelog: https://github.com/Steven-D-Morgan/hass-entity-assistant/blob/main/CHANGELOG.md
1.7.0 - Trust Gate
1.7.0 — Trust gate
This milestone establishes the safety floor before any new registry mutations land in future versions. It retrofits remove_orphaned with dry-run + admin gating, hardens the HTTP download endpoint, and lands a full test suite + CI so the export contract can't silently drift.
⚠️ Breaking change — remove_orphaned now defaults to a preview
If you call entity_assistant.remove_orphaned today with no parameters, it removes orphaned entries immediately. From 1.7.0, a bare call returns a preview instead — you must explicitly pass confirm: true to apply, and the caller must be an admin.
Update any automation or script that calls this service:
# Before (1.6.x) — removed immediately
service: entity_assistant.remove_orphaned
# After (1.7.0+) — must confirm to remove
service: entity_assistant.remove_orphaned
data:
confirm: truev1.6.2 - Export failure handling & observability
Reliability
Every export trigger — the two buttons, entity_assistant.export_csv, entity_assistant.get_download_url, and the HTTP endpoint — now wraps the export in explicit error handling. A disk-full, permission, or path error surfaces as an actionable log message instead of a raw traceback, and the last_export sensor no longer silently ignores the failure.
New
entity_assistant_export_failedevent — fired on any failing export, carryingpath,error,error_type,export_type, andtriggered_by. Use it to alert on disk-full or permission problems without scraping the log.last_exportsensor now records failures — four new attributes appear on the sensor after a failure:last_error(message),last_error_at(ISO timestamp),last_error_type(exception class), andlast_error_triggered_by(service/button/http). The sensor state stays pinned to the last successful export timestamp, so a bad run doesn't erase your record of the last good one.- HTTP endpoint returns a clean
500with the exception class name on failure instead of Home Assistant's default error page, and fires the same failure event so the sensor stays consistent across trigger paths.
Compatibility
- No new options, no new UI strings — nothing to reconfigure.
- Existing
entity_assistant_export_completedpayload is unchanged. - Failure attributes are restored across restarts via
RestoreEntity.
Full changelog
See VERSIONING.md.
1.6.1 - Security hardening
1.6.1 - Security hardening
CSV formula-injection fix
Cell values starting with =, +, -, @, tab, or newline are now automatically prefixed with a tab character so spreadsheet applications (Excel, LibreOffice, Google Sheets) treat them as text instead of executable formulas. This is always on — no opt-in needed.
Registry names, device models, and area aliases are user-controlled free text written into the CSV. Without sanitization, a value like =CMD("calc") would execute as a live formula when opened in a spreadsheet.
UTF-8 BOM option
A new utf8_bom option (default off) on the export_csv and get_download_url services and the HTTP endpoint. When enabled, the CSV starts with a UTF-8 byte order mark (EF BB BF) so Excel on Windows renders non-ASCII characters (accented names, CJK, emoji) correctly instead of garbling them.
action: entity_assistant.export_csv
data:
utf8_bom: true1.6.0
1.6.0 — Registry cleanup
Entity Assistant can now identify and remove orphaned registry entries — not just report on them.
New buttons on the Entity Assistant device
- Export orphaned entities — writes only stale rows (orphaned, unavailable, restored, not changed) to
entity_export_stale.csv, so you can review what's flagged before taking action. - Remove orphaned entries — deletes orphaned entities (config entry removed), orphaned devices (all config entries removed), and empty areas (no devices or entities) from the Home Assistant registries. Area emptiness is recalculated after entity/device removal, so cascading cleanup works in a single press.
New service
entity_assistant.remove_orphaned— the same removal logic, callable from automations and scripts. Returnsentities_removed,devices_removed,areas_removed, and the corresponding ID lists. No parameters.
New event
entity_assistant_orphaned_removed— fired after each removal with counts and ID lists, for automation triggers.
Caution
Removing registry entries is destructive and cannot be fully undone — a Home Assistant backup is the only complete undo. The removal targets only entries whose backing integration has been removed (orphaned) or that are provably empty; live entities are never candidates.
1.5.1 - Translations Updated
A translation and documentation patch. No functional changes.
Translations
The two stale detection service fields shipped English-only in 1.5.0. All 12
supported languages now have localized labels and descriptions for
stale_only and stale_days, on both export_csv and get_download_url:
German, French, Spanish, Italian, Dutch, Portuguese (Brazil), Polish, Russian,
Norwegian Bokmål, Swedish, Czech, and Simplified Chinese.
Documentation
The README's list of HTTP endpoint query flags was missing stale_only and
stale_days, both of which the endpoint has accepted since 1.5.0.
Full changelog: 1.5.0...1.5.1
1.5.0 - Stale detection
Stale detection
Entities, devices, and areas now carry a stale flag plus a categorized
stale_reason column, so you can see why a row was flagged:
- Entities —
unavailable,orphaned(config entry or integration gone),
restored(not provided since restart),not_changed_<N>d - Devices —
orphaned,no_entities,all_unavailable - Areas —
empty(no devices or entities)
New columns
- Entities:
available,last_changed,last_changed_days,stale,stale_reason - Devices:
available_entity_count,stale,stale_reason - Areas:
stale,stale_reason
New service options
export_csv and get_download_url both accept:
stale_only(defaultfalse) — return only flagged rowsstale_days(default30) — age threshold fornot_changed_<N>d
Packaging
HACS now installs this integration from the entity_assistant.zip asset
attached to each release rather than fetching files individually. No action
needed on your end — HACS handles it. Versions 1.4.2 and earlier continue to
install the old way.
Known gap
The 12 non-English translations fall back to English for the two new service
fields until they're backfilled.
Full changelog: 1.4.2...1.5.0
1.4.2 — Fix setup crash on load
Fixed
- Integration failed to set up with
ModuleNotFoundError: No module named 'homeassistant.helpers.device_info'.DeviceInfowas imported from the wrong module; it's now imported fromhomeassistant.helpers.device_registryin the button and sensor platforms.
Impact
This affected 1.3.0–1.4.1 (every version that shipped the button/sensor platforms) — the entry would fail to load with the error above.
Upgrade
Update to 1.4.2 in HACS and restart Home Assistant. No configuration changes needed.
Thanks to everyone who reported it with logs. 🙏
Stable - Production Ready
Add UI translations for 12 common languages Localize the config flow and both services (export_csv, get_download_url), including all field names and descriptions. - New translations/: de, fr, es, it, nl, pt-BR, pl, ru, nb, sv, cs, zh-Hans - Each mirrors en.json's key structure exactly (hassfest translations check) - Bump to 1.4.1; log in VERSIONING.md