Skip to content

v0.2.0

Latest

Choose a tag to compare

@MrTomRocker MrTomRocker released this 24 Jun 23:25

Downloads

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 targetrecover_driver. Any dashboard or template reading state_attr('sensor.<guard>_status', 'target') must switch to recover_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). Existing health_check-off guards behave more strictly.

✨ New

  • blind status. When a guard can't read its health (source unavailable, template render error) it now shows blind instead of a stale ok — matching the Health entity. No recovery is triggered (unknown is never a fault); it returns to ok/suspect once health reads again.
  • Recovery result tracking. New status attributes: fail_count, last_fail, last_recover_driver_result (the driver's own good/failed verdict, distinct from the guard state) and last_recover_driver_time. A recovery action can set the recover_failed variable 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 failed instead of stranded on recovering.

🧹 Internals

  • RecoveryDriver.recover() returns a verdict. README, architecture and the regression checklist fully aligned; hassfest + ruff clean.