immersive-home/vendors/home_assistant_integration/hub.py
2024-03-16 01:19:20 +01:00

49 lines
1.3 KiB
Python

from __future__ import annotations
import asyncio
from homeassistant.core import HomeAssistant
class Hub:
manufacturer = "Immersive Home"
def __init__(self, hass: HomeAssistant) -> None:
self._hass = hass
self.devices = {}
def add_device(self, device: Device) -> None:
self.devices[device.id] = device
def get_device(self, device_id: str) -> Device:
return self.devices.get(device_id)
class Device:
def __init__(self, device_id: str, name: str, version: str, platform: str) -> None:
self.id = device_id
self.name = name
self.version = version
self.platform = platform
self.room = None
self._callbacks = set()
def set_room(self, room: str) -> None:
self.room = room
asyncio.create_task(self.publish_updates())
def add_callback(self, callback: callable[[], None]) -> None:
"""Register callback, called when Roller changes state."""
self._callbacks.add(callback)
def remove_callback(self, callback: callable[[], None]) -> None:
"""Remove previously registered callback."""
self._callbacks.discard(callback)
async def publish_updates(self) -> None:
"""Schedule call all registered callbacks."""
for callback in self._callbacks:
callback()