1 """Xbox friends binary sensors."""
3 from __future__
import annotations
5 from functools
import partial
13 from .const
import DOMAIN
14 from .coordinator
import XboxUpdateCoordinator
15 from .entity
import XboxBaseEntity
17 PRESENCE_ATTRIBUTES = [
"online",
"in_party",
"in_game",
"in_multiplayer"]
21 hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback
23 """Set up Xbox Live friends."""
24 coordinator: XboxUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][
28 update_friends = partial(async_update_friends, coordinator, {}, async_add_entities)
30 unsub = coordinator.async_add_listener(update_friends)
31 hass.data[DOMAIN][entry.entry_id][
"binary_sensor_unsub"] = unsub
36 """Representation of a Xbox presence state."""
40 """Return the status of the requested attribute."""
41 if not self.coordinator.last_update_success:
49 coordinator: XboxUpdateCoordinator,
50 current: dict[str, list[XboxBinarySensorEntity]],
54 new_ids = set(coordinator.data.presence)
55 current_ids = set(current)
58 new_entities: list[XboxBinarySensorEntity] = []
59 for xuid
in new_ids - current_ids:
62 for attribute
in PRESENCE_ATTRIBUTES
64 new_entities = new_entities + current[xuid]
69 for xuid
in current_ids - new_ids:
70 coordinator.hass.async_create_task(
77 coordinator: XboxUpdateCoordinator,
78 current: dict[str, list[XboxBinarySensorEntity]],
80 """Remove friend sensors from Home Assistant."""
81 registry = er.async_get(coordinator.hass)
82 entities = current[xuid]
83 for entity
in entities:
84 if entity.entity_id
in registry.entities:
85 registry.async_remove(entity.entity_id)
PresenceData|None data(self)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
None async_update_friends(XboxUpdateCoordinator coordinator, dict[str, list[XboxBinarySensorEntity]] current, async_add_entities)
None async_remove_entities(str xuid, XboxUpdateCoordinator coordinator, dict[str, list[XboxBinarySensorEntity]] current)