This is a major release. It carries more than a year of fixes and new features that I had been maintaining in a fork, now merged back here in one go, with a test suite that grew from a handful of tests to 152. Please read the Before you update section — the minimum Home Assistant version moves.
First, a thank you to @dougiteixeira, who created this integration and kept it going for years, and who trusted me with it when he no longer had the time. Everything below builds on his work. Thank you also to everyone who opened issues and pull requests while the project was quiet — several of those are part of this release, and they are credited below.
Before you update
- Home Assistant 2026.8.0 or newer is required. The device registry API this release uses (
via_device_id) exists from 2026.8.0, and every Home Assistant from that version runs on Python 3.14. Older installations will not load the integration. - The integration shows up as Proxmox VE Custom in the integrations list, so it is easier to tell apart from the built-in one.
- Nothing needs to be reconfigured. Existing entities keep their IDs and history.
Fixed
- Connection pool warnings (
Connection pool is full, discarding connection) on instances with many tracked resources. Concurrency is now capped instead of opening extra connections and throwing them away. Closes #76 and #670, and supersedes #665 — thank you @ThiloAm for pinning down the cause. - VM memory usage above 100%. The guest's own figure is used where its balloon driver reports statistics; where it does not, the host-side figure is capped at 100% instead of being reported as-is. Closes #663.
- VM disk usage reported as 0% when Proxmox cannot measure it. The sensor now reads unknown in that case, and reads the guest agent's filesystem figures where they exist. Closes #527, includes #638 — thank you @talKitron.
- Disks with an unknown or duplicated WWN collapsed into one device. Closes #619 and #667, includes #669 — thank you @devachnid.
Last bootrecorded a new state on every poll because the computed timestamp drifted by a second each time. Closes #664.- Setup failed permanently when Proxmox was offline during Home Assistant startup. It now retries. Closes #668.
- Deprecated
via_devicereplaced withvia_device_id, which is what forces the new minimum version. Closes #672 and #559. - Arm/Disarm HA used the wrong API path and omitted a required parameter.
- Diagnostics could fail to download on permission errors, and leaked the unredacted host and the cluster HA admin credentials. Both are redacted now.
- Translation placeholders that did not match
en.json, which makes Home Assistant drop the string silently. Includes #666 — thank you @Mincka — and a test now guards against it. - Hardware sensors via PVE-mods flapped to unknown between polls. PVE-mods collects on demand and removes its output after ten seconds idle, so a poll arriving cold reads nothing; the last readings are now held for up to ten minutes.
- Polling stops being scheduled once Home Assistant announces shutdown, which shortens the delay from #613 without fully removing it.
Added
- Cluster HA administration, behind a separate and optional set of credentials: Arm/Disarm HA buttons and a per-guest HA managed sensor.
- Cluster HA status: armed state, quorum, CRM master and whether it has gone stale, and resource counts.
- Locked binary sensor and Unlock button for VMs and containers. Includes #661 — thank you @Mincka.
- Hardware sensors — temperatures, fans, voltages and power — via PVE-mods, including its v2 (
node_info) layout. Includes #657 — thank you @dmfhyjk. - Guest file content sensor, reading a file from a VM through the guest agent. Optional.
- Certificate expiry per node, reporting whichever certificate actually serves the API. Disabled by default.
- Guests without backup, counting what no backup job covers, with the guests as an attribute.
- Subscription state per node. The key, server ID and signature are never exposed. Disabled by default.
- Replication health per node: a problem sensor and the oldest successful sync, so a job that stopped days ago cannot hide behind a newer one. Disabled by default.
- Ceph health, created only where a Ceph cluster answers. Disabled by default.
Disabled-by-default entities can be enabled from the entity settings like any other.
Dependencies
proxmoxer 2.3.0, ruff 0.16.6, pip ≥ 26.1.2, and the release actions on their current versions — which supersedes #632, #660, #659, #649, #648 and #643.
Some of this I cannot test myself
My cluster runs no Ceph, holds no subscription and has no failing replication job, so those paths have only ever run against the Proxmox API definitions and invented fixtures. If one of them shows the wrong thing on your cluster, please open an issue — I cannot produce those responses myself, so your report is the only way they get fixed.
Full Changelog: 4.0.2...5.0.0