""" Outlet/Relay Accessory Implementation for HomeKit Implements simple relay/outlet (on/off switch): - On (read/write) - OutletInUse (always true) """ from pyhap.accessory import Accessory from pyhap.const import CATEGORY_OUTLET class OutletAccessory(Accessory): """Relay/Outlet for simple on/off control.""" category = CATEGORY_OUTLET def __init__(self, driver, device, api_client, display_name=None, *args, **kwargs): """ Initialize the outlet accessory. Args: driver: HAP driver instance device: Device object from DeviceRegistry api_client: ApiClient for sending commands display_name: Optional display name (defaults to device.friendly_name) """ name = display_name or device.friendly_name or device.name super().__init__(driver, name, *args, **kwargs) self.device = device self.api_client = api_client # Add Outlet service self.outlet_service = self.add_preload_service('Outlet') # Get On characteristic and set callback self.on_char = self.outlet_service.get_characteristic('On') self.on_char.setter_callback = self.set_on # OutletInUse is always true (relay is always functional) self.in_use_char = self.outlet_service.get_characteristic('OutletInUse') self.in_use_char.set_value(True) def set_on(self, value): """Called when HomeKit wants to turn outlet on/off.""" power_state = "on" if value else "off" payload = { "type": "relay", "payload": {"power": power_state} } self.api_client.post_device_set(self.device.device_id, payload["type"], payload["payload"]) def update_state(self, state_payload): """Update state from API event.""" if "power" in state_payload: is_on = state_payload["power"] == "on" self.on_char.set_value(is_on)