diff --git a/homeassistant/components/binary_sensor/rainmachine.py b/homeassistant/components/binary_sensor/rainmachine.py index 88b2dd22d52..4a671fc9512 100644 --- a/homeassistant/components/binary_sensor/rainmachine.py +++ b/homeassistant/components/binary_sensor/rainmachine.py @@ -78,13 +78,8 @@ class RainMachineBinarySensor(RainMachineEntity, BinarySensorDevice): """Update the state.""" self.async_schedule_update_ha_state(True) - self._async_unsub_dispatcher_connect = async_dispatcher_connect( - self.hass, SENSOR_UPDATE_TOPIC, update) - - async def async_will_remove_from_hass(self): - """Disconnect dispatcher listener when removed.""" - if self._async_unsub_dispatcher_connect: - self._async_unsub_dispatcher_connect() + self._dispatcher_handlers.append(async_dispatcher_connect( + self.hass, SENSOR_UPDATE_TOPIC, update)) async def async_update(self): """Update the state.""" diff --git a/homeassistant/components/rainmachine/__init__.py b/homeassistant/components/rainmachine/__init__.py index 7017f80a50f..928c2ab2027 100644 --- a/homeassistant/components/rainmachine/__init__.py +++ b/homeassistant/components/rainmachine/__init__.py @@ -267,7 +267,7 @@ class RainMachineEntity(Entity): def __init__(self, rainmachine): """Initialize.""" self._attrs = {ATTR_ATTRIBUTION: DEFAULT_ATTRIBUTION} - self._async_unsub_dispatcher_connect = None + self._dispatcher_handlers = [] self._name = None self.rainmachine = rainmachine @@ -295,3 +295,8 @@ class RainMachineEntity(Entity): def name(self) -> str: """Return the name of the entity.""" return self._name + + async def async_will_remove_from_hass(self): + """Disconnect dispatcher listener when removed.""" + for handler in self._dispatcher_handlers: + handler() diff --git a/homeassistant/components/sensor/rainmachine.py b/homeassistant/components/sensor/rainmachine.py index 59efd4c47f6..5131b25510a 100644 --- a/homeassistant/components/sensor/rainmachine.py +++ b/homeassistant/components/sensor/rainmachine.py @@ -81,13 +81,8 @@ class RainMachineSensor(RainMachineEntity): """Update the state.""" self.async_schedule_update_ha_state(True) - self._async_unsub_dispatcher_connect = async_dispatcher_connect( - self.hass, SENSOR_UPDATE_TOPIC, update) - - async def async_will_remove_from_hass(self): - """Disconnect dispatcher listener when removed.""" - if self._async_unsub_dispatcher_connect: - self._async_unsub_dispatcher_connect() + self._dispatcher_handlers.append(async_dispatcher_connect( + self.hass, SENSOR_UPDATE_TOPIC, update)) async def async_update(self): """Update the sensor's state.""" diff --git a/homeassistant/components/switch/rainmachine.py b/homeassistant/components/switch/rainmachine.py index 5d03b2691eb..b48cc0a1e14 100644 --- a/homeassistant/components/switch/rainmachine.py +++ b/homeassistant/components/switch/rainmachine.py @@ -186,13 +186,8 @@ class RainMachineProgram(RainMachineSwitch): async def async_added_to_hass(self): """Register callbacks.""" - self._async_unsub_dispatcher_connect = async_dispatcher_connect( - self.hass, PROGRAM_UPDATE_TOPIC, self._program_updated) - - async def async_will_remove_from_hass(self): - """Disconnect dispatcher listener when removed.""" - if self._async_unsub_dispatcher_connect: - self._async_unsub_dispatcher_connect() + self._dispatcher_handlers.append(async_dispatcher_connect( + self.hass, PROGRAM_UPDATE_TOPIC, self._program_updated)) async def async_turn_off(self, **kwargs) -> None: """Turn the program off.""" @@ -256,10 +251,10 @@ class RainMachineZone(RainMachineSwitch): async def async_added_to_hass(self): """Register callbacks.""" - async_dispatcher_connect( - self.hass, PROGRAM_UPDATE_TOPIC, self._program_updated) - async_dispatcher_connect( - self.hass, ZONE_UPDATE_TOPIC, self._program_updated) + self._dispatcher_handlers.append(async_dispatcher_connect( + self.hass, PROGRAM_UPDATE_TOPIC, self._program_updated)) + self._dispatcher_handlers.append(async_dispatcher_connect( + self.hass, ZONE_UPDATE_TOPIC, self._program_updated)) async def async_turn_off(self, **kwargs) -> None: """Turn the zone off."""