2.12.0
Added
- Add
DOOR_LOCK_AUTHORIZATION_PROFILEgroup type withDoorLockAuthorizationProfileGroupclass. The cloud exposes this group type for HmIP-FLC and similar door-lock devices to control which clients are authorized to operate the lock; previously the group fell back to the baseGroupand emitted a "no class for group" warning at home load. - Add
pull_latch/async_pull_latchonAccessAuthorizationChannel(and the underlyingpull_latch_asynccommand) to trigger a door opener via the cloud'sdevice/control/pullLatchendpoint. This is the correct endpoint forACCESS_AUTHORIZATION_CHANNELchannels with roleDOOR_OPENER_ACTUATOR(e.g. on HmIP-FLC, HmIP-DLD): the cloud routes the impulse through the access-authorization profile, so callingstartImpulsedirectly on the underlyingDOOR_SWITCH_CHANNELfails withCLIENT_ACCESS_DENIEDfor non-admin clients. Optionalpinparameter is forwarded asauthorizationPinfor profiles that require a PIN. - Extend
ChannelEventTypesenum with the four channel event type strings the HomematicIP cloud emits forSINGLE_KEY_CHANNELbutton presses (HmIP-WRC2, HmIP-WRC6, HmIP-WRC6-230, ...):KEY_PRESS_SHORT: fires once on a short pressKEY_PRESS_LONG_START: fires once at the beginning of a long pressKEY_PRESS_LONG: fires repeatedly (~every 250 ms) while the button is heldKEY_PRESS_LONG_STOP: fires once when the button is released after a long press
- Add support for HmIP-FDC (Full Flush Door Controller / Türöffner-Aktor): impulse-driven door opener with two MULTI_MODE_LOCK_INPUT_CHANNEL inputs and eight ACCESS_AUTHORIZATION_CHANNEL channels for code/keypad access.
Changed
- Enable additional ruff rule sets to catch common bugs and tighten code quality:
ASYNC(async correctness, e.g.time.sleepin async functions,open()blocking calls)A(Python builtin shadowing, e.g.id,type,dictas variable/argument names)C4,ISC,TCH,TID(already clean, added for enforcement going forward)PERF(manual list-append loops → comprehensions)PT(pytest style)RSE(unnecessary parens onraise)
- Fix all violations exposed by the new rules (~22 changes). Notable:
time.sleepin async auth flow replaced withawait asyncio.sleep, internal builtin shadowing renamed (id→gid/device_id,dict→data,type→enum_typeon the internalset_attr_from_dicthelper). One public-API parameter name (anonymizeConfig(format=...)) is preserved with# noqafor backwards compatibility.
Full Changelog: 2.11.0...2.12.0