Improved Beszel API is a Home Assistant custom integration for Beszel. Pairs well with my status grid card 😉
This project is a much more feature-rich fork of the original Ronjar/beszel-ha. The original integration is great but I really wanted to test all sorts of features and expose more of the useful data already available in the Beszel backend.
However, I am totally open with merging this back into the original project if that turns out to be better long term. I have not submitted any PRs yet, as I want to test and make sure this keeps the top notch quality of the original before even thinking about proposing the massive changes. 31 files changed, 2889 insertions(+), 982 deletions(-)!!
![]() Sensors |
![]() Diagnostics |
In addition to the original sensors, it exposes:
- Additional disk usage / used / total sensors for extra disks reported by Beszel, such as
SDA,SDA Used, andSDA Total - Aggregate disk read / write sensors
- Per-disk read / write sensors for extra disks
- Per-interface bandwidth RX / TX rate
- Per-interface RX/TX byte counters
- Per-core CPU usage sensors
- Swap info when the system reports swap
- S.M.A.R.T. disk health entities and attributes
- S.M.A.R.T. temperature / power-on-hours sensors
- S.M.A.R.T. count sensors for key disk-failure indicators
- Load average sensors
- Named temperature sensors
- Per-interface bandwidth and byte-counter sensors
- Systemd service numbers
- RAM cache
- and more.
It also adds adjustable polling interval, proper state/device classes so that HA unit changes work seamlessly, saner unit defaults, and better icon choices :)
You can simply click here to install:
Or do it manually:
- Open HACS.
- Open the menu in the top right and select
Custom repositories. - Add
https://github.com/inventor7777/improved-beszel-ha. - Select category
Integration. - Download
Improved Beszel APIfrom HACS. - Restart Home Assistant from the Repairs menu if needed.
- Add the integration from the Home Assistant integrations page.
- This is a fork, not the original upstream integration. Credit goes fully to @ronjar for creation and initial development.
- All development after the original fork was done by GPT 5.4 Codex, but under close supervision and testing. Every change it made I tested the change thoroughly, and I use this as my only Beszel integration.
The integration connects to your Beszel Hub install through its PocketBase-backed API and creates Home Assistant entities for your monitored systems running Beszel Agent
It currently exposes:
- System connectivity / status
- CPU usage
- RAM usage percent
- RAM cache usage (disabled by default)
- RAM ZFS ARC usage when available
- RAM total
- RAM used
- Disk usage percent
- Disk total
- Disk used
- Aggregate disk reads / writes
- Aggregate disk I/O
- Disk I/O read / write rate
- Disk I/O total rate
- Swap usage percent
- Swap total
- Swap used
- Additional disk usage / used / total sensors for extra disks reported by Beszel, such as
SDA,SDA Used, andSDA Total - Additional disk I/O sensors for extra disks reported by Beszel, such as
SDA IO Read,SDA IO Write, andSDA IO - Uptime
- Main system temperature
- Additional named temperatures from Beszel when available
- Aggregate bandwidth
- Bandwidth RX / TX rate
- Per-interface bandwidth RX / TX rate
- Per-interface RX/TX byte counters
- Per-core CPU usage
- GPU usage when reported by Beszel
- Battery when reported by Beszel
- Beszel Hub update status
- S.M.A.R.T. disk health entities and attributes
- S.M.A.R.T. temperature / power-on-hours sensors
- S.M.A.R.T. count sensors for reallocated sectors, pending sectors, offline uncorrectable, load cycle count, and start/stop count
- Number of systemd services failed/running
Some noisier or less universally useful entities are disabled by default, such as:
- Load average sensors
- Per-core CPU sensors
- Aggregate disk reads / writes
- Aggregate disk I/O
- Disk I/O sensors
- Named temperature sensors when a system reports more than 4 named temperature zones
- Per-interface bandwidth and byte-counter sensors
- S.M.A.R.T. diagnostic sensors when a system has more disks
- RAM cache used
When adding the integration, use:
URL: The root URL / IP of your Beszel Hub, for examplehttp://192.168.0.0:8090Username: Your Beszel user email/usernamePassword: Your Beszel passwordVerify SSL: Whether to verify the Beszel SSL certificateCheck for updates: Enables the Beszel Hub update entityPolling interval (seconds): How often Beszel data is refreshed, adjustable from 10 to 3600 seconds (default: 120 seconds)
- Right now the integration adds all systems visible to the configured Beszel user.
- If you want to limit which systems show up in Home Assistant, the easiest approach is to create a Beszel user that only has access to the systems you want exposed.
Entities follow your Beszel system names. For example, if your system is named test, CPU usage will show up as something like sensor.test_cpu.
S.M.A.R.T. entities use disk-oriented names such as:
test SDA S.M.A.R.T.test SDA S.M.A.R.T. Temperaturetest NVMe0 S.M.A.R.T. Power On Hourstest SDA S.M.A.R.T. Reallocated Sectorstest SDA S.M.A.R.T. Pending Sectorstest SDA S.M.A.R.T. Start Stop Count
Additional non-primary disks reported by Beszel follow the same disk-first pattern, for example:
test SDAtest SDA Usedtest SDA Totaltest SDA IO Readtest SDA IO Writetest SDA IO
Aggregate disk I/O entities follow the system name, for example:
test IO Readstest IO Writestest IO
Per-interface network entities follow the interface name and direction, for example:
test enp0s31f6 Bandwidth RXtest enp0s31f6 Bandwidth TXtest enp0s31f6 RXtest enp0s31f6 TX
Per-core CPU entities follow the CPU number, for example:
test CPU 1test CPU 2
The main CPU sensor also includes CPU breakdown attributes such as user_percent, system_percent, iowait_percent, steal_percent, idle_percent, other_percent, plus flat per-core attributes like cpu_1_percent and cpu_2_percent.
Several sensor families also expose richer attributes on their main and related sensors:
CPU: system CPU breakdown plus flat per-core values likecpu_1_percentRAM: total, used, cache, ZFS ARC, and swap valuesSwap: total, used, and percent valuesDisk: totals plus read / write / combined I/O ratesBandwidth: aggregate RX/TX plus nested per-interface RX/TX/bandwidth valuesTemperature: flat named temperature zone attributes likeacpitz_candcoretemp_core_0_cS.M.A.R.T.: device metadata plus flattenedsmart_*health and attribute values
This project remains MIT-licensed and preserves attribution to the original project while adding attribution for this fork.

