Home Assistant Unofficial Reference 2024.12.1
switch.py
Go to the documentation of this file.
1 """Support for Sony projectors via SDCP network control."""
2 
3 from __future__ import annotations
4 
5 import logging
6 from typing import Any
7 
8 import pysdcp
9 import voluptuous as vol
10 
12  PLATFORM_SCHEMA as SWITCH_PLATFORM_SCHEMA,
13  SwitchEntity,
14 )
15 from homeassistant.const import CONF_HOST, CONF_NAME, STATE_OFF, STATE_ON
16 from homeassistant.core import HomeAssistant
18 from homeassistant.helpers.entity_platform import AddEntitiesCallback
19 from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
20 
21 _LOGGER = logging.getLogger(__name__)
22 
23 DEFAULT_NAME = "Sony Projector"
24 
25 PLATFORM_SCHEMA = SWITCH_PLATFORM_SCHEMA.extend(
26  {
27  vol.Required(CONF_HOST): cv.string,
28  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
29  }
30 )
31 
32 
34  hass: HomeAssistant,
35  config: ConfigType,
36  add_entities: AddEntitiesCallback,
37  discovery_info: DiscoveryInfoType | None = None,
38 ) -> None:
39  """Connect to Sony projector using network."""
40 
41  host = config[CONF_HOST]
42  name = config[CONF_NAME]
43  sdcp_connection = pysdcp.Projector(host)
44 
45  # Sanity check the connection
46  try:
47  sdcp_connection.get_power()
48  except ConnectionError:
49  _LOGGER.error("Failed to connect to projector '%s'", host)
50  return
51  _LOGGER.debug("Validated projector '%s' OK", host)
52  add_entities([SonyProjector(sdcp_connection, name)], True)
53 
54 
56  """Represents a Sony Projector as a switch."""
57 
58  def __init__(self, sdcp_connection, name):
59  """Init of the Sony projector."""
60  self._sdcp_sdcp = sdcp_connection
61  self._name_name = name
62  self._state_state = None
63  self._available_available = False
64  self._attributes_attributes = {}
65 
66  @property
67  def available(self):
68  """Return if projector is available."""
69  return self._available_available
70 
71  @property
72  def name(self):
73  """Return name of the projector."""
74  return self._name_name
75 
76  @property
77  def is_on(self):
78  """Return if the projector is turned on."""
79  return self._state_state
80 
81  @property
83  """Return state attributes."""
84  return self._attributes_attributes
85 
86  def update(self) -> None:
87  """Get the latest state from the projector."""
88  try:
89  self._state_state = self._sdcp_sdcp.get_power()
90  self._available_available = True
91  except ConnectionRefusedError:
92  _LOGGER.error("Projector connection refused")
93  self._available_available = False
94 
95  def turn_on(self, **kwargs: Any) -> None:
96  """Turn the projector on."""
97  _LOGGER.debug("Powering on projector '%s'", self.namenamename)
98  if self._sdcp_sdcp.set_power(True):
99  _LOGGER.debug("Powered on successfully")
100  self._state_state = STATE_ON
101  else:
102  _LOGGER.error("Power on command was not successful")
103 
104  def turn_off(self, **kwargs: Any) -> None:
105  """Turn the projector off."""
106  _LOGGER.debug("Powering off projector '%s'", self.namenamename)
107  if self._sdcp_sdcp.set_power(False):
108  _LOGGER.debug("Powered off successfully")
109  self._state_state = STATE_OFF
110  else:
111  _LOGGER.error("Power off command was not successful")
str|UndefinedType|None name(self)
Definition: entity.py:738
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:38