Skip to content

Releases: ruaan-deysel/ha-unraid-management-agent

v2026.6.5

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 17 Jun 09:24

Fixed

  • Network rate sensor flapping to 0 (#94, contributed by @mdinic):
    Stabilized rate calculations so transient API updates do not force network
    throughput sensors to briefly report 0 between valid samples.
  • Uptime boot timestamp flapping (#95, contributed by @mdinic):
    Prevented the uptime/boot-time sensor path from repeatedly changing the boot
    timestamp value when the underlying uptime update jittered.

v2026.6.4

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 11 Jun 01:46

Fixed

  • Permanent Entity Loss After Server Reboot (#83): Reworked the dynamic entity
    lifecycle so transient data gaps can never delete entities. Previously, a server
    reboot could wipe hundreds of entities (e.g., 449 → 55) that only came back after
    a manual integration reload.
    • Root cause 1: every per-endpoint fetch failure was silently converted to an empty
      list, so while the server was down the coordinator reported a successful update
      with empty data and stale entity cleanup removed every dynamic entity. The
      5-minute reboot grace period could not help because reboot detection (uptime
      decrease) only fires after the server is back.
    • Root cause 2: the closure-captured seen_* tracking sets in each platform
      blocked re-creation of deleted entities until a reload.
    • The coordinator now raises UpdateFailed when the core endpoints (system, array)
      are unreachable, so entities become unavailable (HA best practice) instead of
      being fed an empty snapshot
    • List data now preserves the None (fetch failed) vs [] (genuinely empty)
      distinction, and cleanup skips any category whose fetch failed that cycle
    • Stale entity removal is deferred until an item has been continuously missing for
      10 minutes (STALE_REMOVAL_GRACE), so a single empty poll can never delete
      entities
    • seen_* tracking sets are pruned against the entity registry, so entities
      removed by cleanup or manually by the user are re-created automatically when
      the item reappears — no reload needed
    • Remote share and unassigned device sensors are now added dynamically while
      running (previously only created at setup), matching the binary sensor and
      switch platforms
  • Slow Recovery After Reboot (#83): A WebSocket (re)connect now triggers an
    immediate coordinator refresh (debounced to once per 10s), so data recovers right
    away instead of waiting for the next poll cycle
  • Requests Could Hang on a Stalled Agent (#83): API requests now always apply the
    client timeout (10s; 120s for the container update check). Previously, with Home
    Assistant's shared aiohttp session, no timeout was applied and a stalled agent
    could hang each request for up to 5 minutes. Timeouts raise a distinct
    UnraidTimeoutError and are logged separately to help diagnose plugin stalls
  • Plugins With Updates Sensor: sensor.<host>_plugins_with_updates now reports a
    count when the API returns a list of plugin names (previously it exposed the raw
    list, or failed when the value was already a count)
  • Next Parity Check Sensor Unknown / Wrong Values (#68 follow-up):
    • Custom schedule mode is now supported: when the agent exposes the cron
      expression, the next run is computed from it (via cronsim, bundled with HA).
      Previously sensor.next_parity_check showed Unknown for custom schedules
    • The agent's manual fallback mode (no schedule configured in dynamix.cfg) is
      now treated as not scheduled, so binary_sensor.parity_check_scheduled no longer
      reports a schedule that doesn't exist
    • Weekly mode now interprets day using the Unraid/cron convention (0=Sunday);
      it was previously read as a Python weekday (0=Monday), shifting the predicted
      check by a day
    • With Unraid Management Agent v2026.06.05+ (which resolved
      unraid-management-agent#124),
      the sensor now prefers the new check_cron field — the exact cron entry Unraid
      runs from parity-check.cron — making the next-check time exact for every
      schedule mode (daily/weekly/monthly/yearly/custom). The month field is also
      consumed, fixing yearly schedules outside January on older field-based
      computation. Older agents keep working via the field-based fallback

Added

  • Sustained Failure Warning: After 3 consecutive failed update cycles a warning
    is logged with guidance to check the Unraid Management Agent plugin status
  • Connection Health Diagnostics: Integration diagnostics now include a
    coordinator_health section (last successful update timestamp, consecutive failed
    updates, WebSocket connection state, reboot grace period state) to help distinguish
    integration issues from agent-side stalls (upstream investigation:
    unraid-management-agent#123)

v2026.6.3

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 07 Jun 22:32

Fixed

  • Entities Removed After Server Reboot (#83): Fixed overly aggressive stale entity cleanup that was removing dynamic entities when Unraid servers rebooted
    • Root cause: During reboots, the UMA API returns data gradually (some endpoints available first, others initializing). The coordinator would mark last_update_success = True as soon as any data arrived, causing cleanup to see empty arrays (containers=[], vms=[], remote_shares=[], etc.) and incorrectly remove all associated entities
    • Fix: Added automatic server reboot detection via uptime tracking and a 5-minute grace period that suppresses cleanup immediately after detection
    • Implementation:
      • Coordinator tracks previous uptime (_previous_uptime_seconds) and detects reboots when uptime decreases
      • New property in_reboot_grace_period returns True for 5 minutes after reboot detection
      • async_cleanup_stale_entities() skips removal during grace period, allowing APIs time to stabilize and return complete data
      • Logs warning message when reboot is detected for diagnostics
    • Impact: Users should no longer see entity counts dropfter Unraid reboots; entities are preserved and naturally repopulated as APIs stabilize

v2026.6.2

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 07 Jun 06:28

Added

  • UMA 2025.12.1 Endpoint Coverage: Added API and coordinator support for newer UMA endpoints with backward-compatible fallbacks

    • New client methods for GET /diagnostics/self-test and GET /docker/port-conflicts
    • get_mover_settings() now prefers GET /mover and falls back to GET /settings/mover
    • get_update_status() now prefers GET /os/update and falls back to GET /updates
  • New Monitoring Sensors

    • sensor.<host>_diagnostics_degraded_subsystems (diagnostics self-test degraded subsystem count)
    • sensor.<host>_docker_port_conflicts (Docker port conflict count)
    • sensor.<host>_zfs_arc_configured_max (configured ARC max bytes)
    • sensor.<host>_<pool>_corrupted_files (ZFS pool corrupted files)
    • Per-container sensors: <container>_restart_count, <container>_network_rx, <container>_network_tx
  • Zeroconf/mDNS Auto-Discovery: The integration now discovers Unraid Management Agent instances automatically on the local network

    • No manual host/port entry required — HA detects the agent via mDNS service type _unraid-mgmt-agent._tcp.local.
    • Requires Unraid Management Agent v2026.06.02 or later (which added zeroconf advertising)
    • When the agent's IP changes, the existing config entry is automatically updated and reloaded (discovery-update-info rule)
    • Quality Scale: discovery and discovery-update-info rules updated from exempt to done
  • Remote Share Usage Sensor: New sensor entity showing usage percentage for each mounted remote share

    • Reports usage_percent from the API; attributes include total_size, used_size, free_size, protocol, server, mount_point
  • Stale Entity Cleanup: Entity registry entries for removed dynamic items are now automatically cleaned on every successful coordinator update

    • Covers all dynamic entity types: Docker containers, VMs, disks, fans, GPUs, network interfaces, user shares, ZFS pools, remote shares, unassigned devices, and user scripts
    • Guarded by coordinator.last_update_success — entities are never removed during a transient server outage or when the coordinator has no data yet
    • Implemented in a new cleanup.py module via a coordinator update listener registered in async_setup_entry
    • Quality Scale: stale-devices rule updated from exempt to done
  • Remote Share Mount/Unmount Switch (#84): New switch entities to mount and unmount remote shares configured in the Unraid Unassigned Devices plugin

    • One switch per remote share; turns ON to mount, turns OFF to unmount
    • Attributes include protocol, server, and mount_point
    • Entities are created dynamically as remote shares appear in coordinator data
    • API endpoints: POST /api/v1/unassigned/remote-shares/mount and /unmount
  • Container Update Checks (#86): Optional feature to periodically check Docker containers for available image updates

    • New option in Settings → Integrations → Unraid Management Agent → Configure: Enable container update checks (disabled by default)
    • When enabled: binary_sensor.container_updates_available is created showing whether any containers have image updates
    • Attributes include updates_available count and total_containers
    • Fetches /docker/updates endpoint on each polling cycle
  • Fan Control Toggle (#85): New option to enable or disable fan control entities

    • New option in Settings → Integrations → Unraid Management Agent → Configure: Enable fan control entities (enabled by default)
    • When disabled: fan speed sensor and fan speed number (slider) entities are not created
    • Useful for systems without controllable fans to reduce clutter
  • UMA 2026.06.03 Control Parity: Added support for newly introduced management operations

    • New API client methods: reset_vm(), remove_container(), set_container_autostart(), and clear_array_disk_stats()
    • New service actions: vm_reset, container_remove, container_set_autostart, and array_clear_disk_stats
    • New VM reset button entity per VM: button.<host>_<vm>_reset
    • New container autostart switch entity per container: switch.<host>_<container>_autostart
    • New array maintenance button: button.<host>_array_clear_disk_stats

Fixed

  • Remote Share Entities Not Created (#83): Remote share binary sensors, switches, and usage sensors were never created despite the agent reporting them
    • Root cause: RemoteShare Pydantic model had name: str | None field but the UMA API returns source (e.g. //server/share) instead of name, causing name to always be None
    • Fix: added source, status, type, smb_server, smb_share, size_bytes, used_bytes, free_bytes, usage_percent, auto_mount, read_only fields to the model and a model_validator(mode='before') that derives name from source, mounted from status, protocol from type, and server from smb_server
    • Entity IDs use the full source path slugified (e.g. switch.cube_remote_share_192_168_20_65_public)
    • Usage sensor enabled by default now that the API exposes size fields
  • Remote Share Binary Sensor Missing After Adding Shares (#83): Remote share mounted/unmounted binary sensors now appear dynamically when shares are added after HA startup
    • Root cause: async_setup_entry only ran once at startup; new remote shares added later were never detected
    • Fix: registered coordinator update listener that creates new UnraidRemoteShareBinarySensor entities as shares appear
    • Same dynamic registration applied to unassigned device sensors
  • Stale Cleanup Compatibility: Prevented new dynamic container and ZFS sensors from being removed as stale immediately after creation
    • Added cleanup key coverage for container restart/network-rate sensors
    • Added cleanup key coverage for ZFS pool corrupted-files and static ARC configured-max sensor

Changed

  • Options Flow (#85, #86): Two new options added to the integration's Configure dialog:

    • Enable fan control entities — controls creation of fan speed sensors and fan speed number entities
    • Enable container update checks — opt-in polling of Docker image update availability
  • API Models Expanded

    • Added new typed fields for container throughput/update telemetry, mover runtime stats, ZFS pool/ARC fields, and diagnostics payload models
    • Added typed DockerPortConflict fields while keeping extra="allow" for forward compatibility
  • WebSocket Event Compatibility: Added support for the source_status_changed event type to keep source-related state synchronized

    • When this event arrives, the integration now schedules a coordinator refresh to update dependent entities

Quality

  • manifest.json: Fixed loggers field to declare the full custom_components.unraid_management_agent namespace (previously only the API sub-logger was listed; the integration's own log messages were not surfaced via HA's logger config UI)

v2026.6.1

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 01 Jun 21:06

Added

  • Unassigned Devices & Remote Shares (#79): Monitoring for devices outside the array and SMB/NFS remote shares
    • binary_sensor.<device>_mounted — connectivity sensor showing mounted/unmounted state per unassigned device
    • binary_sensor.<share>_mounted — connectivity sensor showing mounted/unmounted state per remote share
    • sensor.<device>_size — total capacity in bytes per unassigned device (with filesystem and device path attributes)
    • sensor.<share>_usage — usage percentage per remote share when size data is available (disabled by default; enabled once UMA API exposes size fields for remote shares)
    • Entities are created dynamically when the Unassigned Devices plugin is installed and its collector returns data
    • Both entity types include deduplication guards to prevent registry collisions

Fixed

  • SystemInfo model (#45 follow-up): Added explicit swap_usage_percent, swap_total_bytes, swap_used_bytes, swap_free_bytes, and swappiness fields to the Pydantic model — previously these were silently accepted as extra fields but not typed

v2026.6.0

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 29 May 06:16

Added

  • Swap Memory Sensors (#45): Exposes swap space metrics from the UMA API

    • sensor.swap_usage — swap usage percentage (shown only when swap is configured)
    • sensor.swappiness — kernel swappiness value (diagnostic)
    • Both include attributes for total/used/free bytes and swappiness level
  • Notification Event Entity (#77): New HA event entity for Unraid notifications

    • event.notification fires whenever a new Unraid notification arrives
    • Event types: info, warning, alert
    • Attributes include notification ID, subject, description, importance, and timestamp
    • Enables automations triggered by Unraid server notifications
  • Fan Speed Control (#78): New number entities for PWM fan speed control

    • One entity per controllable fan (e.g., number.cube_fan_fan_1_speed)
    • Slider range 0–100% maps to PWM percentage
    • Available only when fan is controllable; uses the /fans/speed UMA API endpoint
    • Entity is available for all fans with controllable: true from the fans endpoint

Fixed

  • Parity Date Sensors Wrong Values (#68): sensor.last_parity_check now correctly
    shows the most recent check instead of the oldest one. The UMA API returns history
    sorted oldest-first; ParityHistory.most_recent now selects by maximum date.

  • Phantom Disk High Temperature Warnings (#69): Disk temperature warnings are now
    suppressed for all non-active spin states (standby, idle, unknown), not just
    standby. This prevents spurious repair issues during disk spin-down transitions
    when the API briefly shows an active temperature with a transitional spin state.

v2026.4.0

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 12 Apr 05:40
a7053ea
Merge pull request #47 from ruaan-deysel/enhancement/cleanup-and-ci-h…

v2026.3.2

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 30 Mar 02:53

See CHANGELOG.md for details.


📦 Installation

Via HACS (Recommended)

  1. Open HACS in Home Assistant
  2. Go to Integrations
  3. Click the menu → Custom repositories
  4. Add this repository: https://github.com/ruaan-deysel/ha-unraid-management-agent
  5. Category: Integration
  6. Click Add
  7. Search for Unraid Management Agent
  8. Click Download
  9. Restart Home Assistant

Manual Installation

  1. Download unraid_management_agent-2026.3.2.zip
  2. Extract to config/custom_components/
  3. Restart Home Assistant
  4. Add the integration via SettingsDevices & ServicesAdd Integration

SHA256 Checksum:

ab4d3ed6efbe8c7385026b592d04587bf6046a6ff517c19484bc47883a31f96e  unraid_management_agent-2026.3.2.zip

v2026.3.1

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 14 Mar 02:02

See CHANGELOG.md for details.


📦 Installation

Via HACS (Recommended)

  1. Open HACS in Home Assistant
  2. Go to Integrations
  3. Click the menu → Custom repositories
  4. Add this repository: https://github.com/ruaan-deysel/ha-unraid-management-agent
  5. Category: Integration
  6. Click Add
  7. Search for Unraid Management Agent
  8. Click Download
  9. Restart Home Assistant

Manual Installation

  1. Download unraid_management_agent-2026.3.1.zip
  2. Extract to config/custom_components/
  3. Restart Home Assistant
  4. Add the integration via SettingsDevices & ServicesAdd Integration

SHA256 Checksum:

ae69333cba8f130a0ef6074ec53ff8c6d07a17a0961b4c75bc231aacfed6cfe5  unraid_management_agent-2026.3.1.zip

v2026.3.0

Choose a tag to compare

@ruaan-deysel ruaan-deysel released this 08 Mar 04:29
9498562

See CHANGELOG.md for details.


📦 Installation

Via HACS (Recommended)

  1. Open HACS in Home Assistant
  2. Go to Integrations
  3. Click the menu → Custom repositories
  4. Add this repository: https://github.com/ruaan-deysel/ha-unraid-management-agent
  5. Category: Integration
  6. Click Add
  7. Search for Unraid Management Agent
  8. Click Download
  9. Restart Home Assistant

Manual Installation

  1. Download unraid_management_agent-2026.3.0.zip
  2. Extract to config/custom_components/
  3. Restart Home Assistant
  4. Add the integration via SettingsDevices & ServicesAdd Integration

SHA256 Checksum:

b75f5c74c8d23f4e806886d5bd74e859485b9f9faee0c772460c8bee7c374356  unraid_management_agent-2026.3.0.zip