11"""Support for VELUX KLF 200 devices."""
22
3+ from collections .abc import Awaitable , Callable
4+
35from pyvlx import Node
46
5- from homeassistant .core import callback
67from homeassistant .helpers .device_registry import DeviceInfo
78from homeassistant .helpers .entity import Entity
89
@@ -14,6 +15,7 @@ class VeluxEntity(Entity):
1415
1516 _attr_should_poll = False
1617 _attr_has_entity_name = True
18+ update_callback : Callable [["Node" ], Awaitable [None ]] | None = None
1719
1820 def __init__ (self , node : Node , config_entry_id : str ) -> None :
1921 """Initialize the Velux device."""
@@ -24,6 +26,7 @@ def __init__(self, node: Node, config_entry_id: str) -> None:
2426 else f"{ config_entry_id } _{ node .node_id } "
2527 )
2628 self ._attr_unique_id = unique_id
29+ self .unsubscribe = None
2730
2831 self ._attr_device_info = DeviceInfo (
2932 identifiers = {
@@ -37,16 +40,18 @@ def __init__(self, node: Node, config_entry_id: str) -> None:
3740 via_device = (DOMAIN , f"gateway_{ config_entry_id } " ),
3841 )
3942
40- @ callback
41- def async_register_callbacks ( self ):
42- """Register callbacks to update hass after device was changed."""
43+ async def after_update_callback ( self , node ) -> None :
44+ """Call after device was updated."""
45+ self . async_write_ha_state ()
4346
44- async def after_update_callback (device ):
45- """Call after device was updated."""
46- self .async_write_ha_state ()
47+ async def async_added_to_hass (self ) -> None :
48+ """Register callback and store reference for cleanup."""
4749
48- self .node .register_device_updated_cb (after_update_callback )
50+ self .update_callback = self .after_update_callback
51+ self .node .register_device_updated_cb (self .update_callback )
4952
50- async def async_added_to_hass (self ) -> None :
51- """Store register state change callback."""
52- self .async_register_callbacks ()
53+ async def async_will_remove_from_hass (self ) -> None :
54+ """Clean up registered callbacks."""
55+ if self .update_callback :
56+ self .node .unregister_device_updated_cb (self .update_callback )
57+ self .update_callback = None
0 commit comments