Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for HDMI CEC devices as switches."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 from pycec.const import POWER_OFF, POWER_ON
9 
10 from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN, SwitchEntity
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.entity_platform import AddEntitiesCallback
13 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
14 
15 from .const import ATTR_NEW, DOMAIN
16 from .entity import CecEntity
17 
18 _LOGGER = logging.getLogger(__name__)
19 
20 ENTITY_ID_FORMAT = SWITCH_DOMAIN + ".{}"
21 
22 
24  hass: HomeAssistant,
25  config: ConfigType,
26  add_entities: AddEntitiesCallback,
27  discovery_info: DiscoveryInfoType | None = None,
28 ) -> None:
29  """Find and return HDMI devices as switches."""
30  if discovery_info and ATTR_NEW in discovery_info:
31  _LOGGER.debug("Setting up HDMI devices %s", discovery_info[ATTR_NEW])
32  entities = []
33  for device in discovery_info[ATTR_NEW]:
34  hdmi_device = hass.data[DOMAIN][device]
35  entities.append(CecSwitchEntity(hdmi_device, hdmi_device.logical_address))
36  add_entities(entities, True)
37 
38 
39 class CecSwitchEntity(CecEntity, SwitchEntity):
40  """Representation of a HDMI device as a Switch."""
41 
42  def __init__(self, device, logical) -> None:
43  """Initialize the HDMI device."""
44  CecEntity.__init__(self, device, logical)
45  self.entity_identity_identity_identity_id = f"{SWITCH_DOMAIN}.hdmi_{hex(self._logical_address)[2:]}"
46 
47  def turn_on(self, **kwargs: Any) -> None:
48  """Turn device on."""
49  self._device_device.turn_on()
50  self._attr_is_on_attr_is_on = True
51  self.schedule_update_ha_stateschedule_update_ha_state(force_refresh=False)
52 
53  def turn_off(self, **kwargs: Any) -> None:
54  """Turn device off."""
55  self._device_device.turn_off()
56  self._attr_is_on_attr_is_on = False
57  self.schedule_update_ha_stateschedule_update_ha_state(force_refresh=False)
58 
59  def update(self) -> None:
60  """Update device status."""
61  device = self._device_device
62  if device.power_status in {POWER_OFF, 3}:
63  self._attr_is_on_attr_is_on = False
64  elif device.power_status in {POWER_ON, 4}:
65  self._attr_is_on_attr_is_on = True
66  else:
67  _LOGGER.warning("Unknown state: %d", device.power_status)
None schedule_update_ha_state(self, bool force_refresh=False)
Definition: entity.py:1244
None add_entities(AsusWrtRouter router, AddEntitiesCallback async_add_entities, set[str] tracked)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
Definition: switch.py:28