What's Changed
Bug Fixes
- Fix Translation Error When Skipping Backend Detection: Fixed "The intl string context variable 'detected_interfaces' was not provided" error when using the "Skip automatic backend detection" option in the config flow. The interface step now provides a default placeholder value when detection results are not available.
- Fix Missing device_class for Update Entities: Update entities for device firmware and hub updates now correctly report
device_class: firmware. Previously the device_class was not set despite having an entity description rule defined.
Internal
- Remove Unused UpdateEntityDescription Defaults: Removed
UpdateEntityDescriptionentries forUPDATEandHUB_UPDATEfromdefaults.pysince Update entities don't use the generic entity helper system. Thedevice_classis now set directly on the entity classes. - Migrate Event Platform to ChannelEventGroup: Migrated the event platform from individual
GenericEventsubscriptions to the newChannelEventGroupProtocolpattern. Event groups are now virtual data points bound to channels, providing unified subscription management viasubscribe_to_data_point_updated(). This simplifies subscription handling (single subscription per entity instead of one per event type) and aligns with the standardCallbackDataPointProtocolpattern. - Config Entry Migration v14: Added entity registry migration for event entities to update unique_ids from the old channel-based format (
homematicip_local_{channel_unique_id}) to the new event_group-based format (homematicip_local_event_group_homematic.keypress_{channel_unique_id}). This ensures existing event entities are preserved when upgrading from version 2.1.2.
Bump aiohomematic to 2026.1.41
New Features
- Paramset Description Patching System: Added a generic mechanism to correct faulty
paramset_descriptionsfrom the CCU. The system applies device-specific corrections during data ingestion using declarative patch definitions. Initial patch corrects HM-CC-VG-1 channel 1SET_TEMPERATUREMIN/MAX values (4.5/30.5) instead of the incorrect CCU-provided values. - translation_key for Data Points: All data point types now provide a consistent
translation_keyproperty for translations. This includes hub sensors, metrics sensors, inbox, install mode, device/system updates, and calculated data points. - Startup Resilience for Authentication Errors: Added a 3-stage validation approach for improved startup reliability: TCP pre-flight check validates port availability, client creation & RPC validation verifies backend communication, and retry with exponential backoff handles transient errors before failing. New
TimeoutConfigparameters:startup_max_init_attempts(default: 5),startup_init_retry_delay(default: 3s), andstartup_max_init_retry_delay(default: 30s).
Changed
- ChannelEventGroup as Virtual Data Point: Refactored
ChannelEventGroupfrom a helper class to a virtual data point bound to the Channel. Event groups now extendCallbackDataPointand follow the standard subscription pattern withsubscribe_to_data_point_updated(). See migration guide:docs/migrations/channel_event_group_migration_2026_01.md.
Bug Fixes
- Automatic Reconnection After Startup Failures: Fixed scenarios where the backend was unavailable during Home Assistant startup. The integration previously remained in FAILED state indefinitely. Now the heartbeat timer automatically activates when central transitions to FAILED state during startup, with recovery attempts every 60 seconds (configurable). Port resolution for TCP checks falls back to interface configuration when client doesn't exist.
- Cache Schema v3: Cache schema bumped to v3 with automatic rebuild when the schema version changes.
- Legacy Cache Migration for Climate Schedules: Fixed
ValidationException: Time 360 is invaliderror when starting with cached schedule data. The issue was old cachedendtimevalues stored as numeric strings ("360") instead of integers or time strings. A new helper handles all three formats. - Coordinated Cache Clearing on Version Mismatch: Fixed issue where only one cache was cleared on schema version change. Now both device and paramset description caches are cleared together, preventing incomplete rebuilds.
- Sound Player Soundfile Default Handling: Fixed
turn_on()to use the entity's current value or default whensoundfileis not provided, instead of always defaulting to"INTERNAL_SOUNDFILE". - Backend Detection Timeout Support: Fixed
TypeError: ServerProxy.__init__() got an unexpected keyword argument 'timeout'. Introduced custom transport classes for proper socket timeout handling.