# pylint: disable=no-value-for-parameter
import logging
from aiohap import Accessory, Category, services
from .base import Link
logger = logging.getLogger(__name__)
[docs]class FanAccessory(Accessory):
category = Category.FAN
info = services.AccessoryInformation
fan = services.Fan
[docs]class FanLink(Link):
meadow_service_type = 'fan'
def _create_link(self):
super()._create_link()
self._md_fan = self._md_service
self._hk_fan = FanAccessory(self._md_fan.name)
self._fill_accessory_info(self._hk_fan)
self._hk_fan.fan.set(on=False)
self.bridge.accessory_server.add_accessory(self._hk_fan)
async def _setup(self):
self._hk_fan.fan.on.handle_write(self._handle_accessory_write)
self._md_fan.is_on.subscribe(self._handle_meadow_notification)
async def _reload_state(self):
await self._md_fan.is_on.enable_notifications()
self._hk_fan.fan.on.value = await self._md_fan.is_on.read(timeout=5.0)
async def _handle_meadow_notification(self, value, **kwargs):
self._hk_fan.fan.on.value = value
async def _handle_accessory_write(self, value, **kwargs):
await self._md_fan.is_on.write(bool(value), timeout=5.0)
self._hk_fan.fan.on.value = value