Release v1.0.47
This is the biggest release so far: bug fixes found in a full audit, a performance overhaul for larger devices, and many user-experience improvements. It is the stable version of 1.0.47-beta.1, with no functional changes since the beta.
Requires Home Assistant 2024.4 or newer (was 2024.1).
Fixes
Saving the options silently changed every object's entity type and COV setting
Saving the options stored an override for every object, based on a default that ignored whether the object is commandable. As a result:
- non-commandable Binary Values became switches, and the device rejected every write;
- the device-wide Enable COV switch stopped having any effect.
Now only settings you actually changed are stored.
Already affected? A message appears under Settings → Repairs listing the objects concerned. Confirm it to reset them. Types you chose deliberately are left alone.
Entities stayed "available" while the device was offline
During an outage, entities kept showing their last value as if nothing was wrong. They now become unavailable. The same happens for an object whose status flags report FAULT, because the device itself then says the value is unreliable.
Write priority 17 removed
BACnet priorities run from 1 to 16, so a device rejects every write at priority 17.
Climate "Off" was never shown
After switching a climate entity off (relinquish), the device reports its Relinquish Default, so the entity kept showing Heat. It now shows Off, also after a restart.
A device offline at startup leaked resources
Each setup retry left the shared network socket and any COV subscriptions behind.
Integration would not load on Home Assistant 2026.8+
The services used a Home Assistant helper that was removed in 2026.8.
Device IP address in logs
The device's IP address is now masked in all log messages, like everywhere else in the integration.
Performance
Much lighter on the network and on Home Assistant, especially for devices with many objects:
- Polling in batches. ReadPropertyMultiple polls are sent in batches (25 objects per request) instead of one request for all objects. If a device rejects a request as too large, the batch size shrinks automatically. RPM is no longer switched off permanently for the device.
- Faster when RPM isn't available. Individual reads run 4 at a time instead of one by one. An offline device is recognised within seconds, instead of each read waiting out its own timeout.
- Faster startup. COV subscriptions are set up in parallel. A device that doesn't support COV is detected after the first few objects.
- Fewer writes to the device. The COV increment is only written when its value differs. Many controllers store it in non-volatile memory, so this saves wear.
- Less work per COV notification. A notification now updates only its own entity, not every entity of the device.
- Metadata checks no longer block polling. The hourly metadata check runs in the background and uses batched reads, instead of 5 separate reads per object. Discovery during setup uses the same batched reads and is much faster.
- Fewer reloads. Metadata changes found close together cause one reload instead of one per object.
- Faster writes. After a write, only that object is re-read, not the whole device.
- Full precision, smaller history. Sensors keep the device's full precision; Home Assistant shows 2 decimals by default, and you can change that per entity. Static attributes are no longer stored in the recorder with every state change.
New
- Relinquish and one-off writes. Two new services:
bacnet.relinquish releases Home Assistant's command on an object (writes Null), so lower priorities or the Relinquish Default take over;
bacnet.write_value writes a value once at a priority of your choice.
- Readable object customisation. Under Configure, tick the objects you want to change by name, then set their entity type and COV setting. You no longer get a long list of
domain_2:5 fields.
- Climate with a real room temperature. A climate entity can take its current temperature from another object, such as a room sensor.
- Values from the device itself:
- number entities use the object's
minPresValue, maxPresValue and resolution as limits and step;
- multi-state objects can be shown as a select with their
stateText labels (Off / Heat / Cool instead of 1 / 2 / 3);
- multi-state entities get a
bacnet_state_text attribute;
- many more engineering units are recognised: 35 instead of 14, including K, lx, m³/h, MWh, bar, psi, VA, L/min and ppm.
- Reconfigure. Change the IP address, port, BBMD settings or device address without removing the integration. Entities, history and options are kept.
- Troubleshooting tools:
- a diagnostics download (network addresses are hidden);
- diagnostic sensors: last successful poll, COV subscriptions, consecutive failed polls;
- a Repairs message when a device stays unreachable, with what to check. It clears by itself once the device responds.
- Clear errors. A write the device rejects now shows an error message instead of silently doing nothing.
- Tidier device page. The Write Priority select and the metadata refresh button are listed under Configuration.
- Dutch translation of the whole interface.
- Minimum polling interval. The polling interval is now at least 10 seconds. Polling always runs, even with COV enabled, so very short intervals mostly add load.
Worth knowing when upgrading
- Analog sensors now report more decimals in their state. History looks slightly different; statistics continue normally.
- The first metadata check after upgrading may reload the integration once, to pick up the new metadata (state texts, limits). Use Refresh object metadata to do it right away.
- If you saved the options in an earlier version, check Settings → Repairs.
Testing
- 327 unit tests.
- A new smoke-test suite loads the integration in a real Home Assistant, at the minimum supported version and the latest release, on every change. It caught the HA 2026.8 issue above before it reached anyone.
Found a problem? Please open an issue with your device type and the diagnostics download: https://github.com/CervezaStallone/Home-Assistant-BACnet-integration/issues
Full Changelog: v1.0.46...v1.0.47