Skip to content

Commit

Permalink
Set state properly on start (#126)
Browse files Browse the repository at this point in the history
  • Loading branch information
raman325 committed Apr 2, 2024
1 parent 30cd01f commit 85a5163
Showing 1 changed file with 21 additions and 15 deletions.
36 changes: 21 additions & 15 deletions custom_components/lock_code_manager/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ def __init__(
)
self._entity_id_map: dict[str, str] = {}

async def _update_state(self, _: datetime | None = None) -> None:
@callback
def _update_state(self, _: datetime | None = None) -> None:
"""Update binary sensor state by getting dependent states."""
_LOGGER.debug(
"%s (%s): Updating %s",
Expand Down Expand Up @@ -165,32 +166,35 @@ async def _config_entry_update_listener(
"""Update listener."""
if config_entry.options:
return
await self._update_state()
self._update_state()

async def _remove_keys_to_track(self, keys: list[str]) -> None:
@callback
def _remove_keys_to_track(self, keys: list[str]) -> None:
"""Remove keys to track."""
for key in keys:
if key not in PLATFORM_MAP:
continue
self._entity_id_map.pop(key, None)
await self._update_state()
self._update_state()

async def _add_keys_to_track(self, keys: list[str]) -> None:
@callback
def _add_keys_to_track(self, keys: list[str]) -> None:
"""Add keys to track."""
for key in keys:
if not (platform := PLATFORM_MAP.get(key)):
continue
self._entity_id_map[key] = self.ent_reg.async_get_entity_id(
platform, DOMAIN, self._get_uid(key)
)
await self._update_state()
self._update_state()

async def _handle_calendar_state_changes(
@callback
def _handle_calendar_state_changes(
self, entity_id: str, _: State, __: State
) -> None:
"""Handle calendar state changes."""
if entity_id == self._calendar_entity_id:
await self._update_state()
self._update_state()

async def async_added_to_hass(self) -> None:
"""Handle entity added to hass."""
Expand Down Expand Up @@ -223,6 +227,8 @@ async def async_added_to_hass(self) -> None:
self.config_entry.add_update_listener(self._config_entry_update_listener)
)

self._update_state()


class LockCodeManagerCodeSlotInSyncEntity(
BaseLockCodeManagerCodeSlotPerLockEntity,
Expand Down Expand Up @@ -283,15 +289,15 @@ async def async_update(self) -> None:
self.lock.lock.entity_id,
self.slot_num,
)
await self._update_state()
await self._async_update_state()

def _get_entity_state(self, key: str) -> str | None:
"""Get entity state."""
if (state := self.hass.states.get(self._entity_id_map[key])) is None:
return None
return state.state

async def _update_state(
async def _async_update_state(
self,
entity_id: str | None = None,
from_state: State | None = None,
Expand Down Expand Up @@ -371,10 +377,10 @@ async def _update_state(
else:
self._attr_is_on = True

if self._attr_is_on is False:
await self.coordinator.async_refresh()
else:
if self._attr_is_on:
self.async_write_ha_state()
else:
await self.coordinator.async_refresh()

async def async_added_to_hass(self) -> None:
"""Handle entity added to hass."""
Expand All @@ -383,6 +389,6 @@ async def async_added_to_hass(self) -> None:
# await CoordinatorEntity.async_added_to_hass(self)

self.async_on_remove(
async_track_state_change(self.hass, MATCH_ALL, self._update_state)
async_track_state_change(self.hass, MATCH_ALL, self._async_update_state)
)
await self._update_state()
await self._async_update_state()

0 comments on commit 85a5163

Please sign in to comment.