mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00: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:
parent
b9d3bb4cfd
commit
9a997e2df6
@ -2,6 +2,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
@ -108,12 +109,20 @@ class I2CHatBinarySensor(BinarySensorEntity):
|
|||||||
self._device_class = device_class
|
self._device_class = device_class
|
||||||
self._state = self.I2C_HATS_MANAGER.read_di(self._address, self._channel)
|
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():
|
def online_callback():
|
||||||
"""Call fired when board is online."""
|
"""Call fired when board is online."""
|
||||||
self.schedule_update_ha_state()
|
self.schedule_update_ha_state()
|
||||||
|
|
||||||
self.I2C_HATS_MANAGER.register_online_callback(
|
await self.hass.async_add_executor_job(
|
||||||
self._address, self._channel, online_callback
|
self.I2C_HATS_MANAGER.register_online_callback,
|
||||||
|
self._address,
|
||||||
|
self._channel,
|
||||||
|
online_callback,
|
||||||
)
|
)
|
||||||
|
|
||||||
def edge_callback(state):
|
def edge_callback(state):
|
||||||
@ -121,8 +130,11 @@ class I2CHatBinarySensor(BinarySensorEntity):
|
|||||||
self._state = state
|
self._state = state
|
||||||
self.schedule_update_ha_state()
|
self.schedule_update_ha_state()
|
||||||
|
|
||||||
self.I2C_HATS_MANAGER.register_di_callback(
|
await self.hass.async_add_executor_job(
|
||||||
self._address, self._channel, edge_callback
|
self.I2C_HATS_MANAGER.register_di_callback,
|
||||||
|
self._address,
|
||||||
|
self._channel,
|
||||||
|
edge_callback,
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
@ -101,6 +102,7 @@ class I2CHatSwitch(ToggleEntity):
|
|||||||
self._channel = channel
|
self._channel = channel
|
||||||
self._name = name or DEVICE_DEFAULT_NAME
|
self._name = name or DEVICE_DEFAULT_NAME
|
||||||
self._invert_logic = invert_logic
|
self._invert_logic = invert_logic
|
||||||
|
self._state = initial_state
|
||||||
if initial_state is not None:
|
if initial_state is not None:
|
||||||
if self._invert_logic:
|
if self._invert_logic:
|
||||||
state = not initial_state
|
state = not initial_state
|
||||||
@ -108,14 +110,27 @@ class I2CHatSwitch(ToggleEntity):
|
|||||||
state = initial_state
|
state = initial_state
|
||||||
self.I2C_HATS_MANAGER.write_dq(self._address, self._channel, state)
|
self.I2C_HATS_MANAGER.write_dq(self._address, self._channel, state)
|
||||||
|
|
||||||
def online_callback():
|
async def async_added_to_hass(self) -> None:
|
||||||
"""Call fired when board is online."""
|
"""Register callbacks."""
|
||||||
self.schedule_update_ha_state()
|
if TYPE_CHECKING:
|
||||||
|
assert self.I2C_HATS_MANAGER
|
||||||
|
|
||||||
self.I2C_HATS_MANAGER.register_online_callback(
|
await self.hass.async_add_executor_job(
|
||||||
self._address, self._channel, online_callback
|
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):
|
def _log_message(self, message):
|
||||||
"""Create log message."""
|
"""Create log message."""
|
||||||
string = f"{self._name} "
|
string = f"{self._name} "
|
||||||
@ -136,12 +151,7 @@ class I2CHatSwitch(ToggleEntity):
|
|||||||
@property
|
@property
|
||||||
def is_on(self):
|
def is_on(self):
|
||||||
"""Return true if device is on."""
|
"""Return true if device is on."""
|
||||||
try:
|
return self._state != self._invert_logic
|
||||||
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
|
|
||||||
|
|
||||||
def turn_on(self, **kwargs):
|
def turn_on(self, **kwargs):
|
||||||
"""Turn the device on."""
|
"""Turn the device on."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user