What's Changed
Bug Fixes
- Fix Translation Error on Duplicate CCU Configuration: Fixed "The intl string context variable 'serial' was not provided" error when attempting to add a CCU instance that is already configured. The abort message now correctly displays the serial number.
- Fix Unwanted Integration Reload on Action Select Change: Action select values (e.g., siren tones, light patterns) are now stored in a separate storage file instead of the config entry. Previously, changing an action select value triggered
async_update_entry()which caused a full integration reload via theupdate_listener. This fix eliminates unnecessary restarts when selecting different tones or patterns. Existing values are automatically migrated from config entry to the new storage file. - Fix Options Flow Not Persisting Changes: Configuration changes made in the Options Flow (e.g., enabling SysVar scan) were lost after Home Assistant restart. The issue was caused by a shallow copy of config entry data that shared nested dictionary references with the original. Home Assistant's change detection saw no difference and skipped saving. Now uses
deepcopyto ensure complete independence. - Fix
homematic.device_availabilityEvent Not Fired: The event was defined but never actually fired when device availability changed. This broke all blueprints that relied on this event (persistent notifications, device reactivation). Now fireshomematic.device_availabilitywith full event data (device_id, name, address, interface_id, model, unavailable status) whenDeviceLifecycleEventType.AVAILABILITY_CHANGEDis received. - Fix Device Services Failing for Sub-Devices: Services like
force_device_availabilityfailed with "No device found" for sub-devices (devices withenable_sub_devicesoption). The identifier parser incorrectly included the group suffix (e.g.,-1) in the interface_id, causing client lookup to fail. Now correctly strips the group suffix when parsing sub-device identifiers.
Internal
- Migrate to Capabilities Pattern: Updated all
supports_*properties to the new unified Capabilities pattern from aiohomematic. Static capabilities now usecapabilities.*(e.g.,capabilities.brightness,capabilities.open), while dynamic properties usehas_*(e.g.,has_hs_color,has_effects). This affects light, lock, siren, and MQTT entities. - Config Entry Version 13: Added migration to remove
action_select_valuesfrom config entry data. - Default Entity Descriptions for Update Entities: Added default descriptions with
UpdateDeviceClass.FIRMWAREforUPDATEandHUB_UPDATEdata point categories. - Interface Connectivity Binary Sensors: Added entity description rule with
BinarySensorDeviceClass.CONNECTIVITYfor the new hub-level interface connectivity sensors.
Bump aiohomematic to 2026.1.35
Bug Fixes
- Fix Schedule Validation Error on Device Initialization: Fixed
ValidationException: Time 360 is invaliderror occurring when heating group devices (VirtualDevices interface) are initialized. Theidentify_base_temperature()function incorrectly assumed all endtime values in the schedule cache are formatted strings ("06:00"), but during initial cache loading they can be raw integers (360 minutes) directly from the CCU. The function now handles both integer and string formats by checking the type before conversion. This fixes climate entity creation failures and recurring errors on Home Assistant startup. - Fix Type Safety for ScheduleSlot: Updated
ScheduleSlotTypedDict to correctly declareendtime: str | intinstead ofendtime: str. This reflects the actual behavior where the CCU always returns integers (minutes since midnight) while internal conversion may use string format. - Fix CUxD/CCU-Jack Unnecessary Reconnects via MQTT: Fixed false positive connection loss detection for CUxD and CCU-Jack interfaces when used with Homematic(IP) Local MQTT bridge. These interfaces use JSON-RPC without ping/pong support and receive events via MQTT, causing callback timeout checks to incorrectly trigger reconnects every ~4 minutes. Both
is_callback_alive()andis_connected()now checkping_pongcapability to skip callback timeout validation for MQTT-based interfaces. - Fix Syntax Error in device_ops.py: Fixed IndentationError in
_validate_and_convert_value()method that prevented module import. Restored missing value conversion and MIN/MAX validation code block. - Fix LINK Paramsets Causing False "Incomplete Device Data" Issues: LINK paramsets are now excluded from paramset fetch operations and completeness checks. LINK paramsets are only relevant for device linking (direct associations) and are fetched dynamically when links are configured. Previously, failed LINK fetches (which occur when no links exist) caused devices to be incorrectly flagged as having incomplete data, triggering unnecessary repair issues.
- Fix Empty Paramset Descriptions Not Being Cached: Fixed issue where paramset descriptions that return an empty dict
{}(valid response) were incorrectly treated as missing. HmIP base device addresses and some channel types return empty MASTER or VALUES paramsets which is valid behavior. The fix usesis not Nonecheck instead of truthy check, ensuring empty dicts are properly cached. - Fix Device Availability Not Reset After CCU Restart: All devices remained unavailable after CCU restart because the availability reset only triggered when
old_statewas in(DISCONNECTED, FAILED, RECONNECTING), but the final transition hasold_state=CONNECTING. AddedCONNECTINGto the list of states that trigger availability reset. - Fix Race Condition in Client State Event Processing: Events from the EventBus may be processed out of order (e.g.,
disconnectedevent processed afterconnectedevent). Now checks the current client state before marking devices unavailable, preventing incorrect availability changes when the client has already recovered. - Fix Connectivity Sensors Not Updating During CCU Restart: Interface connectivity binary sensors now subscribe to
ClientStateChangedEventfor immediate reactive updates instead of only updating during scheduled refresh cycles. - Fix CuXD Devices Not Created When Paramset Descriptions Missing: When device_descriptions were already cached but paramset_descriptions were missing (e.g., from a previous interrupted run), devices were skipped. Now properly detects missing paramset_descriptions and ensures both caches stay synchronized.
- Fix Temperature Parameter Formatting in Schedules: Temperature values in simple weekly schedules were sent as integers to the CCU, causing them to be silently ignored. The CCU requires temperature parameters as floats. Explicit float conversions are now applied to all schedule temperature values.
- Fix Cache Persistence Race Condition: Cache is now automatically persisted when data fetch completes, preventing paramsets from being lost if a shutdown occurs before the scheduled save.
- Fix Device Creation with Incomplete Data: Added validation ensuring all required paramsets exist in cache before device creation proceeds. Incomplete data now triggers an
INCOMPLETE_DEVICE_DATAintegration issue event instead of silently creating broken devices. - Fix Performance Regression in Device Creation: Fixed severe performance regression causing N cache saves for N devices. The event is now published once after the entire batch completes, reducing startup time from ~210 seconds to ~17 seconds for 397 devices (13x improvement).
- Fix Parameter Type Conversion for HM-CC-VG-1: Fixed TypeError when calling
put_paramseton HM-CC-VG-1 device. The device returns MIN/MAX values as strings instead of numbers, which now undergo proper numeric conversion before comparison.
Changed
- Schedule Cache Now Uses Pessimistic Update Strategy: Climate schedule cache (
ClimateWeekProfileandDefaultWeekProfile) is no longer updated optimistically when callingset_schedule(),set_profile(), orset_weekday(). The cache is now updated only after receivingCONFIG_PENDING = Falsefrom the CCU viareload_and_cache_schedule(). This ensures the cache always reflects the actual CCU state, eliminating race conditions and inconsistencies. The cache remains essential for performance (avoiding RPC calls on reads) and event optimization (publishing events only when data changes).
New Features
- Faster Connectivity Detection: Improved connection loss detection from ~240s to ~20s with new
ping_timeout(10s) andconnectivity_error_threshold(1). Devices are now marked unavailable immediately when client state changes to DISCONNECTED/FAILED. System health score now correctly shows 0% before connections are established. - Interface Connectivity Binary Sensors: New hub-level binary sensors showing per-interface connectivity status (HmIP-RF, BidCos-RF, etc.). Shows ON when connected and operational, OFF when disconnected or failed. Always available since its purpose is to show the connection state itself.
- Schedule Support for HM-CC-VG-1: Enabled schedule functionality for the HM-CC-VG-1 virtual group device.