1
mirror of https://github.com/home-assistant/core synced 2024-08-02 23:40:32 +02:00

Fix raspihats callbacks (#64122)

* Adjust callback registration

* Register callbacks in the executor

* Move read_dq to online_callback

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2022-01-17 09:52:31 +01:00 committed by GitHub
parent b9d3bb4cfd
commit 9a997e2df6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 15 deletions

View File

@ -2,6 +2,7 @@
from __future__ import annotations
import logging
from typing import TYPE_CHECKING
import voluptuous as vol
@ -108,12 +109,20 @@ class I2CHatBinarySensor(BinarySensorEntity):
self._device_class = device_class
self._state = self.I2C_HATS_MANAGER.read_di(self._address, self._channel)
async def async_added_to_hass(self) -> None:
"""Register callbacks."""
if TYPE_CHECKING:
assert self.I2C_HATS_MANAGER
def online_callback():
"""Call fired when board is online."""
self.schedule_update_ha_state()
self.I2C_HATS_MANAGER.register_online_callback(
self._address, self._channel, online_callback
await self.hass.async_add_executor_job(
self.I2C_HATS_MANAGER.register_online_callback,
self._address,
self._channel,
online_callback,
)
def edge_callback(state):
@ -121,8 +130,11 @@ class I2CHatBinarySensor(BinarySensorEntity):
self._state = state
self.schedule_update_ha_state()
self.I2C_HATS_MANAGER.register_di_callback(
self._address, self._channel, edge_callback
await self.hass.async_add_executor_job(
self.I2C_HATS_MANAGER.register_di_callback,
self._address,
self._channel,
edge_callback,
)
@property

View File

@ -2,6 +2,7 @@
from __future__ import annotations
import logging
from typing import TYPE_CHECKING
import voluptuous as vol
@ -101,6 +102,7 @@ class I2CHatSwitch(ToggleEntity):
self._channel = channel
self._name = name or DEVICE_DEFAULT_NAME
self._invert_logic = invert_logic
self._state = initial_state
if initial_state is not None:
if self._invert_logic:
state = not initial_state
@ -108,14 +110,27 @@ class I2CHatSwitch(ToggleEntity):
state = initial_state
self.I2C_HATS_MANAGER.write_dq(self._address, self._channel, state)
def online_callback():
"""Call fired when board is online."""
self.schedule_update_ha_state()
async def async_added_to_hass(self) -> None:
"""Register callbacks."""
if TYPE_CHECKING:
assert self.I2C_HATS_MANAGER
self.I2C_HATS_MANAGER.register_online_callback(
self._address, self._channel, online_callback
await self.hass.async_add_executor_job(
self.I2C_HATS_MANAGER.register_online_callback,
self._address,
self._channel,
self.online_callback,
)
def online_callback(self):
"""Call fired when board is online."""
try:
self._state = self.I2C_HATS_MANAGER.read_dq(self._address, self._channel)
except I2CHatsException as ex:
_LOGGER.error(self._log_message(f"Is ON check failed, {ex!s}"))
self._state = False
self.schedule_update_ha_state()
def _log_message(self, message):
"""Create log message."""
string = f"{self._name} "
@ -136,12 +151,7 @@ class I2CHatSwitch(ToggleEntity):
@property
def is_on(self):
"""Return true if device is on."""
try:
state = self.I2C_HATS_MANAGER.read_dq(self._address, self._channel)
return state != self._invert_logic
except I2CHatsException as ex:
_LOGGER.error(self._log_message(f"Is ON check failed, {ex!s}"))
return False
return self._state != self._invert_logic
def turn_on(self, **kwargs):
"""Turn the device on."""