Home Assistant Unofficial Reference 2024.12.1
schemas.py
Go to the documentation of this file.
1 """Schema definitions for LCN configuration and websockets api."""
2 
3 import voluptuous as vol
4 
5 from homeassistant.components.climate import DEFAULT_MAX_TEMP, DEFAULT_MIN_TEMP
6 from homeassistant.const import (
7  CONF_SCENE,
8  CONF_SOURCE,
9  CONF_UNIT_OF_MEASUREMENT,
10  UnitOfTemperature,
11 )
13 from homeassistant.helpers.typing import VolDictType
14 
15 from .const import (
16  BINSENSOR_PORTS,
17  CONF_DIMMABLE,
18  CONF_LOCKABLE,
19  CONF_MAX_TEMP,
20  CONF_MIN_TEMP,
21  CONF_MOTOR,
22  CONF_OUTPUT,
23  CONF_OUTPUTS,
24  CONF_REGISTER,
25  CONF_REVERSE_TIME,
26  CONF_SETPOINT,
27  CONF_TRANSITION,
28  KEYS,
29  LED_PORTS,
30  LOGICOP_PORTS,
31  MOTOR_PORTS,
32  MOTOR_REVERSE_TIME,
33  OUTPUT_PORTS,
34  RELAY_PORTS,
35  S0_INPUTS,
36  SETPOINTS,
37  THRESHOLDS,
38  VAR_UNITS,
39  VARIABLES,
40 )
41 
42 ADDRESS_SCHEMA = vol.Coerce(tuple)
43 
44 #
45 # Domain data
46 #
47 
48 DOMAIN_DATA_BINARY_SENSOR: VolDictType = {
49  vol.Required(CONF_SOURCE): vol.All(
50  vol.Upper, vol.In(SETPOINTS + KEYS + BINSENSOR_PORTS)
51  ),
52 }
53 
54 
55 DOMAIN_DATA_CLIMATE: VolDictType = {
56  vol.Required(CONF_SOURCE): vol.All(vol.Upper, vol.In(VARIABLES)),
57  vol.Required(CONF_SETPOINT): vol.All(vol.Upper, vol.In(VARIABLES + SETPOINTS)),
58  vol.Optional(CONF_MAX_TEMP, default=DEFAULT_MAX_TEMP): vol.Coerce(float),
59  vol.Optional(CONF_MIN_TEMP, default=DEFAULT_MIN_TEMP): vol.Coerce(float),
60  vol.Optional(CONF_LOCKABLE, default=False): vol.Coerce(bool),
61  vol.Optional(CONF_UNIT_OF_MEASUREMENT, default=UnitOfTemperature.CELSIUS): vol.In(
62  UnitOfTemperature.CELSIUS, UnitOfTemperature.FAHRENHEIT
63  ),
64 }
65 
66 
67 DOMAIN_DATA_COVER: VolDictType = {
68  vol.Required(CONF_MOTOR): vol.All(vol.Upper, vol.In(MOTOR_PORTS)),
69  vol.Optional(CONF_REVERSE_TIME, default="rt1200"): vol.All(
70  vol.Upper, vol.In(MOTOR_REVERSE_TIME)
71  ),
72 }
73 
74 
75 DOMAIN_DATA_LIGHT: VolDictType = {
76  vol.Required(CONF_OUTPUT): vol.All(vol.Upper, vol.In(OUTPUT_PORTS + RELAY_PORTS)),
77  vol.Optional(CONF_DIMMABLE, default=False): vol.Coerce(bool),
78  vol.Optional(CONF_TRANSITION, default=0): vol.All(
79  vol.Coerce(float), vol.Range(min=0.0, max=486.0)
80  ),
81 }
82 
83 
84 DOMAIN_DATA_SCENE: VolDictType = {
85  vol.Required(CONF_REGISTER): vol.All(vol.Coerce(int), vol.Range(0, 9)),
86  vol.Required(CONF_SCENE): vol.All(vol.Coerce(int), vol.Range(0, 9)),
87  vol.Optional(CONF_OUTPUTS, default=[]): vol.All(
88  cv.ensure_list, [vol.All(vol.Upper, vol.In(OUTPUT_PORTS + RELAY_PORTS))]
89  ),
90  vol.Optional(CONF_TRANSITION, default=0): vol.Any(
91  vol.All(vol.Coerce(int), vol.Range(min=0.0, max=486.0))
92  ),
93 }
94 
95 DOMAIN_DATA_SENSOR: VolDictType = {
96  vol.Required(CONF_SOURCE): vol.All(
97  vol.Upper,
98  vol.In(
99  VARIABLES + SETPOINTS + THRESHOLDS + S0_INPUTS + LED_PORTS + LOGICOP_PORTS
100  ),
101  ),
102  vol.Optional(CONF_UNIT_OF_MEASUREMENT, default="native"): vol.All(
103  vol.Upper, vol.In(VAR_UNITS)
104  ),
105 }
106 
107 
108 DOMAIN_DATA_SWITCH: VolDictType = {
109  vol.Required(CONF_OUTPUT): vol.All(
110  vol.Upper,
111  vol.In(OUTPUT_PORTS + RELAY_PORTS + SETPOINTS + KEYS),
112  ),
113 }