Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The epson integration."""
2 
3 import logging
4 
5 from epson_projector import Projector
6 from epson_projector.const import (
7  PWR_OFF_STATE,
8  STATE_UNAVAILABLE as EPSON_STATE_UNAVAILABLE,
9 )
10 
11 from homeassistant.config_entries import ConfigEntry
12 from homeassistant.const import CONF_HOST, Platform
13 from homeassistant.core import HomeAssistant
14 from homeassistant.helpers.aiohttp_client import async_get_clientsession
15 
16 from .const import CONF_CONNECTION_TYPE, DOMAIN, HTTP
17 from .exceptions import CannotConnect, PoweredOff
18 
19 PLATFORMS = [Platform.MEDIA_PLAYER]
20 
21 _LOGGER = logging.getLogger(__name__)
22 
23 
25  hass: HomeAssistant,
26  host: str,
27  conn_type: str,
28  check_power: bool = True,
29  check_powered_on: bool = True,
30 ):
31  """Validate the given projector host allows us to connect."""
32  epson_proj = Projector(
33  host=host,
34  websession=async_get_clientsession(hass, verify_ssl=False),
35  type=conn_type,
36  )
37  if check_power:
38  _power = await epson_proj.get_power()
39  if not _power or _power == EPSON_STATE_UNAVAILABLE:
40  _LOGGER.debug("Cannot connect to projector")
41  raise CannotConnect
42  if _power == PWR_OFF_STATE and check_powered_on:
43  _LOGGER.debug("Projector is off")
44  raise PoweredOff
45  return epson_proj
46 
47 
48 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
49  """Set up epson from a config entry."""
50  projector = await validate_projector(
51  hass=hass,
52  host=entry.data[CONF_HOST],
53  conn_type=entry.data[CONF_CONNECTION_TYPE],
54  check_power=False,
55  check_powered_on=False,
56  )
57  hass.data.setdefault(DOMAIN, {})
58  hass.data[DOMAIN][entry.entry_id] = projector
59  await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
60 
61  return True
62 
63 
64 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
65  """Unload a config entry."""
66  unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
67  if unload_ok:
68  projector = hass.data[DOMAIN].pop(entry.entry_id)
69  projector.close()
70  return unload_ok
71 
72 
73 async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
74  """Migrate old entry."""
75  _LOGGER.debug(
76  "Migrating configuration from version %s.%s",
77  config_entry.version,
78  config_entry.minor_version,
79  )
80 
81  if config_entry.version > 1 or config_entry.minor_version > 1:
82  # This means the user has downgraded from a future version
83  return False
84 
85  if config_entry.version == 1 and config_entry.minor_version == 1:
86  new_data = {**config_entry.data}
87  new_data[CONF_CONNECTION_TYPE] = HTTP
88 
89  hass.config_entries.async_update_entry(
90  config_entry, data=new_data, version=1, minor_version=2
91  )
92 
93  _LOGGER.debug(
94  "Migration to configuration version %s successful", config_entry.version
95  )
96 
97  return True
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:48
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:64
bool async_migrate_entry(HomeAssistant hass, ConfigEntry config_entry)
Definition: __init__.py:73
def validate_projector(HomeAssistant hass, str host, str conn_type, bool check_power=True, bool check_powered_on=True)
Definition: __init__.py:30
aiohttp.ClientSession async_get_clientsession(HomeAssistant hass, bool verify_ssl=True, socket.AddressFamily family=socket.AF_UNSPEC, ssl_util.SSLCipherList ssl_cipher=ssl_util.SSLCipherList.PYTHON_DEFAULT)