Home Assistant Unofficial Reference 2024.12.1
__init__.py
Go to the documentation of this file.
1 """Support to control ecoal/esterownik.pl coal/wood boiler controller."""
2 
3 import logging
4 
5 from ecoaliface.simple import ECoalController
6 import voluptuous as vol
7 
8 from homeassistant.const import (
9  CONF_HOST,
10  CONF_MONITORED_CONDITIONS,
11  CONF_PASSWORD,
12  CONF_SENSORS,
13  CONF_SWITCHES,
14  CONF_USERNAME,
15  Platform,
16 )
17 from homeassistant.core import HomeAssistant
19 from homeassistant.helpers.discovery import load_platform
20 from homeassistant.helpers.typing import ConfigType
21 
22 _LOGGER = logging.getLogger(__name__)
23 
24 DOMAIN = "ecoal_boiler"
25 DATA_ECOAL_BOILER = f"data_{DOMAIN}"
26 
27 DEFAULT_USERNAME = "admin"
28 DEFAULT_PASSWORD = "admin"
29 
30 
31 # Available pump ids with assigned HA names
32 # Available as switches
33 AVAILABLE_PUMPS = {
34  "central_heating_pump": "Central heating pump",
35  "central_heating_pump2": "Central heating pump2",
36  "domestic_hot_water_pump": "Domestic hot water pump",
37 }
38 
39 # Available temp sensor ids with assigned HA names
40 # Available as sensors
41 AVAILABLE_SENSORS = {
42  "outdoor_temp": "Outdoor temperature",
43  "indoor_temp": "Indoor temperature",
44  "indoor2_temp": "Indoor temperature 2",
45  "domestic_hot_water_temp": "Domestic hot water temperature",
46  "target_domestic_hot_water_temp": "Target hot water temperature",
47  "feedwater_in_temp": "Feedwater input temperature",
48  "feedwater_out_temp": "Feedwater output temperature",
49  "target_feedwater_temp": "Target feedwater temperature",
50  "fuel_feeder_temp": "Fuel feeder temperature",
51  "exhaust_temp": "Exhaust temperature",
52 }
53 
54 SWITCH_SCHEMA = vol.Schema(
55  {
56  vol.Optional(CONF_MONITORED_CONDITIONS, default=list(AVAILABLE_PUMPS)): vol.All(
57  cv.ensure_list, [vol.In(AVAILABLE_PUMPS)]
58  )
59  }
60 )
61 
62 SENSOR_SCHEMA = vol.Schema(
63  {
64  vol.Optional(
65  CONF_MONITORED_CONDITIONS, default=list(AVAILABLE_SENSORS)
66  ): vol.All(cv.ensure_list, [vol.In(AVAILABLE_SENSORS)])
67  }
68 )
69 
70 CONFIG_SCHEMA = vol.Schema(
71  {
72  DOMAIN: vol.Schema(
73  {
74  vol.Required(CONF_HOST): cv.string,
75  vol.Optional(CONF_PASSWORD, default=DEFAULT_PASSWORD): cv.string,
76  vol.Optional(CONF_SENSORS, default={}): SENSOR_SCHEMA,
77  vol.Optional(CONF_SWITCHES, default={}): SWITCH_SCHEMA,
78  vol.Optional(CONF_USERNAME, default=DEFAULT_USERNAME): cv.string,
79  }
80  )
81  },
82  extra=vol.ALLOW_EXTRA,
83 )
84 
85 
86 def setup(hass: HomeAssistant, hass_config: ConfigType) -> bool:
87  """Set up global ECoalController instance same for sensors and switches."""
88 
89  conf = hass_config[DOMAIN]
90  host = conf[CONF_HOST]
91  username = conf[CONF_USERNAME]
92  passwd = conf[CONF_PASSWORD]
93  # Creating ECoalController instance makes HTTP request to controller.
94  ecoal_contr = ECoalController(host, username, passwd)
95  if ecoal_contr.version is None:
96  # Wrong credentials nor network config
97  _LOGGER.error(
98  "Unable to read controller status from %s@%s (wrong host/credentials)",
99  username,
100  host,
101  )
102  return False
103  _LOGGER.debug("Detected controller version: %r @%s", ecoal_contr.version, host)
104  hass.data[DATA_ECOAL_BOILER] = ecoal_contr
105  # Setup switches
106  switches = conf[CONF_SWITCHES][CONF_MONITORED_CONDITIONS]
107  load_platform(hass, Platform.SWITCH, DOMAIN, switches, hass_config)
108  # Setup temp sensors
109  sensors = conf[CONF_SENSORS][CONF_MONITORED_CONDITIONS]
110  load_platform(hass, Platform.SENSOR, DOMAIN, sensors, hass_config)
111  return True
bool setup(HomeAssistant hass, ConfigType hass_config)
Definition: __init__.py:86
None load_platform(core.HomeAssistant hass, Platform|str component, str platform, DiscoveryInfoType|None discovered, ConfigType hass_config)
Definition: discovery.py:137