What's Changed
Integration
- Fix hub, system-variable, install-mode, virtual-remote and virtual-remote event-group entities disappearing on upgrade (frontend#63): after the move to serial-anchored hub
unique_ids, the one-time re-anchor migration only matched registries anchored on the currententry_id[-10:]. A registry inherited from any other anchor (a priorentry_idafter a delete + re-add, or a stale serial) fell through, no longer matched the live keys, and was then permanently deleted by the startup orphan cleanup. The migration now realigns whatever value fills the central-id slot onto the live anchor (covering plain hub keys and the virtual-remote event groups), runs before entities are recreated, and skips on aunique_idcollision instead of aborting. As defence-in-depth the orphan cleanup no longer deletes an entry whose data point still exists under a different central-id anchor (it leaves the realign migration to re-anchor it), and no longer deletes the integration-nativecreate_backupbutton (which has no aiohomematic data point and is recreated on every setup) - Fix permanent mass deletion of entity-registry entries after a transient auth error (aiohomematic#3215): the startup orphan cleanup now refuses to run when it would remove more than half of the integration's registry entries — this guards against the central reporting
RUNNING(clients connected) while the device descriptions failed to load, which previously wiped hundreds of entities and re-detected devices as new - Set
EventDeviceClass.DOORBELLfor HmIP-DBB event entities so they work with the new Home Assistantdoorbellautomation trigger; all other event entities continue to useEventDeviceClass.BUTTON - Routed the event entity device class through the
EntityDescriptionRegistry(newHmEventEntityDescription,event()factory,EVENT_RULES, default forDataPointCategory.EVENT_GROUP) instead of hardcoding it on the entity class - The openccu-loom backend (loom client + integration adapter) is bundled as groundwork for a future alternative to the direct-CCU (aiohomematic) backend, but is not user-selectable in 2.8.0: the backend master switch (
LOOM_BACKEND_SELECTABLEinconst.py) is off, so a fresh setup goes straight to the direct-CCU step and the loom path behaves as if it were absent. No user-facing behaviour change.
Dependencies
New bundled dependency: openccu-loom-client==2026.6.24 (pins openccu-loom-types==0.1.29)
- Bundled for the not-yet-enabled openccu-loom backend (see Integration); it has no runtime effect while the backend master switch is off. Pulls
openccu-loom-types==0.1.29transitively.
Bump aiohomematic to 2026.6.7
- Roll back optimistic values immediately on a failed collector send (#3238): a write the CCU rejected (e.g. an XML-RPC
RESPONSE_NAKafter all retries were exhausted) previously left the optimistic value active for the full 30 soptimistic_update_timeouton the collector path, so the entity kept displaying a value that never reached the device until the timeout rollback fired. The collector send path now mirrors the direct-send path and rolls back the affected data points' optimistic values immediately on a send error - Fully fix sensors reporting a spurious
0after a CCU restart (#3228): the initial2026.6.3fix only covered the ReGa bulk-load path, but the placeholder also arrived through the per-parametergetValuefallback. Three follow-ups complete it — (a) the paired*_STATUSparameter is now loaded on init so a freshly loaded default whose status isUNKNOWNno longer overwrites an already known value (#3233), (b) the bulk-load ReGa script was reworked to v2.5 because the earliervDPValue == ""skip also dropped legitimate numeric zeros (an empty string coerces to0in ReGa) — it now only coerces genuine string variables and gatesVirtualDeviceson a validLastTimestamp(), and (c) thegetValuefallback is skipped entirely forVirtualDevices, whose aggregatedACTUAL_TEMPERATUREhas no physical device behind it and could therefore only ever return the CCU default0. The gated ReGa bulk fetch is now the single source of truth, and such a data point stays unavailable until a real reading arrives via event. Physical interfaces and real0readings are unaffected - Fix HmIP-RGBW / HmIP-DRG-DALI cannot be switched on (briefly flashes, then turns off again) (#3210)
- Make interrupted device creation observable —
CancelledErrormid-build now logs a clear warning instead of silently abandoning the run with zero entities (#3213) - Revert the contract/event-type extraction (#3214): public event types stay in
aiohomematic.central.events, no separateaiohomematic-contractruntime dependency
aiohomematic-config remains at 2026.5.0
- No API or behavior changes for the integration since 2.7.2
homematicip-local-frontend
- Bundled
homematic-config.jsrebuilt; the prior 2.7.2 build already covered HA 2026.6 compatibility ("HA 2026.6 Compatibility —ha-radioRemoval (#60)")