diff --git a/homeassistant/components/bluetooth/update_coordinator.py b/homeassistant/components/bluetooth/update_coordinator.py index dd9e7ecfe5d..71729a1dba8 100644 --- a/homeassistant/components/bluetooth/update_coordinator.py +++ b/homeassistant/components/bluetooth/update_coordinator.py @@ -41,8 +41,7 @@ class BasePassiveBluetoothCoordinator(ABC): self.logger = logger self.address = address self.connectable = connectable - self._cancel_track_unavailable: CALLBACK_TYPE | None = None - self._cancel_bluetooth_advertisements: CALLBACK_TYPE | None = None + self._on_stop: list[CALLBACK_TYPE] = [] self.mode = mode self._last_unavailable_time = 0.0 self._last_name = address @@ -97,27 +96,31 @@ class BasePassiveBluetoothCoordinator(ABC): @callback def _async_start(self) -> None: """Start the callbacks.""" - self._cancel_bluetooth_advertisements = async_register_callback( - self.hass, - self._async_handle_bluetooth_event, - BluetoothCallbackMatcher( - address=self.address, connectable=self.connectable - ), - self.mode, + self._on_stop.append( + async_register_callback( + self.hass, + self._async_handle_bluetooth_event, + BluetoothCallbackMatcher( + address=self.address, connectable=self.connectable + ), + self.mode, + ) ) - self._cancel_track_unavailable = async_track_unavailable( - self.hass, self._async_handle_unavailable, self.address, self.connectable + self._on_stop.append( + async_track_unavailable( + self.hass, + self._async_handle_unavailable, + self.address, + self.connectable, + ) ) @callback def _async_stop(self) -> None: """Stop the callbacks.""" - if self._cancel_bluetooth_advertisements is not None: - self._cancel_bluetooth_advertisements() - self._cancel_bluetooth_advertisements = None - if self._cancel_track_unavailable is not None: - self._cancel_track_unavailable() - self._cancel_track_unavailable = None + for unsub in self._on_stop: + unsub() + self._on_stop.clear() @callback def _async_handle_unavailable(