Releases: MrTomRocker/homeassistant-necromancer
Releases · MrTomRocker/homeassistant-necromancer
v0.2.0
A major update — recovery now tracks and reports its own result, the guard shows an honest blind state and surfaces config problems in Repairs, plus a handful of edge-case fixes. Read the breaking changes before updating.
⚠️ Breaking changes
- Status attribute
target→recover_driver. Any dashboard or template readingstate_attr('sensor.<guard>_status', 'target')must switch torecover_driver. - Health Check off is no longer a blind "assume success". With the check off, the recovery driver's own result now decides the attempt: a PoE port that doesn't come back online, or a recovery action that sets
recover_failed, is a failed attempt (retry → escalate). Existinghealth_check-off guards behave more strictly.
✨ New
blindstatus. When a guard can't read its health (source unavailable, template render error) it now showsblindinstead of a staleok— matching the Health entity. No recovery is triggered (unknown is never a fault); it returns took/suspectonce health reads again.- Recovery result tracking. New status attributes:
fail_count,last_fail,last_recover_driver_result(the driver's owngood/failedverdict, distinct from the guard state) andlast_recover_driver_time. A recovery action can set therecover_failedvariable to report a failed repair. - Config-health in Repairs. Misconfigured guards/ports now surface in Settings → Repairs, event-driven and self-clearing: a blind guard (missing/disabled health entity), a health template that reads only missing entities or references a missing one, an invalid recovery action, a PoE port with no id, or a PoE port whose actuator/status entity is missing.
🐛 Fixes
- Manual recover during a snooze now lifts the snooze instead of leaving the guard stranded.
- Manual recover while following a linked partner's repair is ignored (no competing double-cycle).
- A PoE port whose actuator raises now ends
failedinstead of stranded onrecovering.
🧹 Internals
RecoveryDriver.recover()returns a verdict. README, architecture and the regression checklist fully aligned; hassfest + ruff clean.
v0.1.9
v0.1.8
Changes
- Release v0.1.8 @MrTomRocker (#9)
- CI tests + unknown-state lock + Why-Necromancer motivation @MrTomRocker (#8)
- docs(readme): add self-healing demo GIFs (Auto-PoE + smart plug) @MrTomRocker (#7)
- docs: fix code↔doc drift from audit (snoozed state, notify_guard, counts, anchors) @MrTomRocker (#6)
- docs(readme): bold hero banner + grouped, expanded feature list @MrTomRocker (#5)
v0.1.7
Highlights
action_cyclevariable carry — capture state in the off action and read it in the on action (e.g. restore a device's prior state after a power-cycle), no helper entity needed.necromancer.notify_guardservice — push a custom message through a guard's own notify action (great for recovery scripts reporting their own progress).- Config-flow polish — recovery actions grouped in their own section; clearer notification + timing wording.
- Docs — restructured README + a 9-recipe cookbook under
docs/cookbook/. - Quality — full docstrings + lint gates, per-module loggers, expanded test suite (160+ tests).
Notable
strings.jsonremoved — custom components shiptranslations/directly.- Recovery-action variable
guard_id→guard_entity_id.
Full changelog: #4 · Minimum Home Assistant: 2025.7
v0.1.6
What's new in v0.1.6
v0.1.6 builds Necromancer out into a full self-healing framework — everything since v0.1.5.
Added
- PoE recovery — a single PoE fabric resolves a device to its port and power-cycles it, with last-known-port fallback and coalesced concurrent cycles (no double-cycling); new
necromancer.repair_poe_portservice and apoe_portrecovery strategy. - YAML import/export of the flat PoE-port list in the options flow.
- Guard groups (linking) — link guards that share a root cause; when one repairs, the others hold and re-verify instead of competing. Follower success is silent by default (opt-in per guard).
- Supervisor / staged guards — a guard whose health template watches other guards' status; with self-reference (feedback-loop) detection.
- Operator services — per guard
reset/snooze/unsnooze, plus bulksnooze_all/unsnooze_all(maintenance mode); newsnoozedlifecycle state (survives restart, auto-resumes). - Recovery event entity —
event.<guard>_recoveryfiresrecovered/escalated/blocked. - Notifications as an action — a user-defined action sequence with
message/name/event/event_textvariables; TTS-friendly, EN + DE. - Optional integration reload of the assigned device after a repair (before verify).
- Blind-guard detection — a template health that reads only missing/disabled entities is flagged.
Changed
- Recovery mode choice moved from the device step into the strategy step of the wizard.
- Auto-recovery switch is now a configuration entity; leaner status-sensor attributes.
- Architecture: domain logic split into a
core/package (HA shell vs. core); typedentry.runtime_data(NecromancerData);LinkCoordinatorand the config-flow schema/selector layer extracted; the PoE fabric is the single PoE authority (thepoe_portdriver is a thin adapter).
Fixed
- Linked-guard teardown & follow-up verify are now race-safe.
- Don't last-known-cycle a PoE port that now serves a different device; ignore placeholder port ids (
-, empty,unknown). - Ignore a manual recover while a cycle is already running.
- Reject action guards with no action at submit; reject negative timings on YAML import.
- Logging cleanup: correct levels, and no full traceback per recovery attempt (less log noise).
- Hardened several guard-linking corner cases.
Quality & docs
- Test net: unit + engine + in-process integration suites and a pytest suite on HA's native harness (entities, services, full config/subentry/options flow) — ~91 % line coverage;
hassfest- andruff/format-clean. - README rewritten as a user guide (mental model, lifecycle, entities, services, recipes, FAQ);
docs/arch/architecture + testing + timing references.
v0.1.5
Fixes
- Health: an explicit
off_value(e.g.unavailable) now triggers recovery instead of being swallowed by the no-false-alarm default.
Changes
- Brand icon now ships in the integration (HA 2026.3 brand proxy) — removed the embedded Home Assistant logo.
-
- Wording: "service" instead of "hub" (matches integration_type).
CI / tooling
- Single Validate workflow (hassfest + HACS + ruff, no ignores), Dependabot, release automation, zip release + downloads badge, issue forms.