Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """The generic_hygrostat component."""
2 
3 import voluptuous as vol
4 
5 from homeassistant.components.humidifier import HumidifierDeviceClass
6 from homeassistant.config_entries import ConfigEntry
7 from homeassistant.const import CONF_NAME, CONF_UNIQUE_ID, Platform
8 from homeassistant.core import HomeAssistant
9 from homeassistant.helpers import config_validation as cv, discovery
10 from homeassistant.helpers.device import (
11  async_remove_stale_devices_links_keep_entity_device,
12 )
13 from homeassistant.helpers.typing import ConfigType
14 
15 DOMAIN = "generic_hygrostat"
16 
17 CONF_HUMIDIFIER = "humidifier"
18 CONF_SENSOR = "target_sensor"
19 CONF_MIN_HUMIDITY = "min_humidity"
20 CONF_MAX_HUMIDITY = "max_humidity"
21 CONF_TARGET_HUMIDITY = "target_humidity"
22 CONF_DEVICE_CLASS = "device_class"
23 CONF_MIN_DUR = "min_cycle_duration"
24 CONF_DRY_TOLERANCE = "dry_tolerance"
25 CONF_WET_TOLERANCE = "wet_tolerance"
26 CONF_KEEP_ALIVE = "keep_alive"
27 CONF_INITIAL_STATE = "initial_state"
28 CONF_AWAY_HUMIDITY = "away_humidity"
29 CONF_AWAY_FIXED = "away_fixed"
30 CONF_STALE_DURATION = "sensor_stale_duration"
31 
32 
33 DEFAULT_TOLERANCE = 3
34 DEFAULT_NAME = "Generic Hygrostat"
35 
36 HYGROSTAT_SCHEMA = vol.Schema(
37  {
38  vol.Required(CONF_HUMIDIFIER): cv.entity_id,
39  vol.Required(CONF_SENSOR): cv.entity_id,
40  vol.Optional(CONF_DEVICE_CLASS): vol.In(
41  [HumidifierDeviceClass.HUMIDIFIER, HumidifierDeviceClass.DEHUMIDIFIER]
42  ),
43  vol.Optional(CONF_MAX_HUMIDITY): vol.Coerce(float),
44  vol.Optional(CONF_MIN_DUR): vol.All(cv.time_period, cv.positive_timedelta),
45  vol.Optional(CONF_MIN_HUMIDITY): vol.Coerce(float),
46  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
47  vol.Optional(CONF_DRY_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce(float),
48  vol.Optional(CONF_WET_TOLERANCE, default=DEFAULT_TOLERANCE): vol.Coerce(float),
49  vol.Optional(CONF_TARGET_HUMIDITY): vol.Coerce(float),
50  vol.Optional(CONF_KEEP_ALIVE): vol.All(cv.time_period, cv.positive_timedelta),
51  vol.Optional(CONF_INITIAL_STATE): cv.boolean,
52  vol.Optional(CONF_AWAY_HUMIDITY): vol.Coerce(int),
53  vol.Optional(CONF_AWAY_FIXED): cv.boolean,
54  vol.Optional(CONF_STALE_DURATION): vol.All(
55  cv.time_period, cv.positive_timedelta
56  ),
57  vol.Optional(CONF_UNIQUE_ID): cv.string,
58  }
59 )
60 
61 CONFIG_SCHEMA = vol.Schema(
62  {DOMAIN: vol.All(cv.ensure_list, [HYGROSTAT_SCHEMA])},
63  extra=vol.ALLOW_EXTRA,
64 )
65 
66 
67 async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
68  """Set up the Generic Hygrostat component."""
69  if DOMAIN not in config:
70  return True
71 
72  for hygrostat_conf in config[DOMAIN]:
73  hass.async_create_task(
74  discovery.async_load_platform(
75  hass, Platform.HUMIDIFIER, DOMAIN, hygrostat_conf, config
76  )
77  )
78 
79  return True
80 
81 
82 async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
83  """Set up from a config entry."""
84 
86  hass,
87  entry.entry_id,
88  entry.options[CONF_HUMIDIFIER],
89  )
90 
91  await hass.config_entries.async_forward_entry_setups(entry, (Platform.HUMIDIFIER,))
92  entry.async_on_unload(entry.add_update_listener(config_entry_update_listener))
93  return True
94 
95 
96 async def config_entry_update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None:
97  """Update listener, called when the config entry options are changed."""
98  await hass.config_entries.async_reload(entry.entry_id)
99 
100 
101 async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
102  """Unload a config entry."""
103  return await hass.config_entries.async_unload_platforms(
104  entry, (Platform.HUMIDIFIER,)
105  )
bool async_setup_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:82
bool async_unload_entry(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:101
None config_entry_update_listener(HomeAssistant hass, ConfigEntry entry)
Definition: __init__.py:96
bool async_setup(HomeAssistant hass, ConfigType config)
Definition: __init__.py:67
None async_remove_stale_devices_links_keep_entity_device(HomeAssistant hass, str entry_id, str source_entity_id_or_uuid)
Definition: device.py:66