Home Assistant Unofficial Reference 2024.12.1
schemas.py
Go to the documentation of this file.
1 """Schemas used by insteon component."""
2 
3 from __future__ import annotations
4 
5 from pyinsteon.constants import HC_LOOKUP
6 import voluptuous as vol
7 
8 from homeassistant.const import (
9  CONF_ADDRESS,
10  CONF_DEVICE,
11  CONF_ENTITY_ID,
12  CONF_HOST,
13  CONF_PASSWORD,
14  CONF_PLATFORM,
15  CONF_PORT,
16  CONF_USERNAME,
17  ENTITY_MATCH_ALL,
18 )
20 
21 from .const import (
22  CONF_CAT,
23  CONF_DIM_STEPS,
24  CONF_HOUSECODE,
25  CONF_HUB_VERSION,
26  CONF_SUBCAT,
27  CONF_UNITCODE,
28  HOUSECODES,
29  PORT_HUB_V1,
30  PORT_HUB_V2,
31  SRV_ALL_LINK_GROUP,
32  SRV_ALL_LINK_MODE,
33  SRV_CONTROLLER,
34  SRV_HOUSECODE,
35  SRV_LOAD_DB_RELOAD,
36  SRV_RESPONDER,
37  X10_PLATFORMS,
38 )
39 
40 ADD_ALL_LINK_SCHEMA = vol.Schema(
41  {
42  vol.Required(SRV_ALL_LINK_GROUP): vol.Range(min=0, max=255),
43  vol.Required(SRV_ALL_LINK_MODE): vol.In([SRV_CONTROLLER, SRV_RESPONDER]),
44  }
45 )
46 
47 
48 DEL_ALL_LINK_SCHEMA = vol.Schema(
49  {vol.Required(SRV_ALL_LINK_GROUP): vol.Range(min=0, max=255)}
50 )
51 
52 
53 LOAD_ALDB_SCHEMA = vol.Schema(
54  {
55  vol.Required(CONF_ENTITY_ID): vol.Any(cv.entity_id, ENTITY_MATCH_ALL),
56  vol.Optional(SRV_LOAD_DB_RELOAD, default=False): cv.boolean,
57  }
58 )
59 
60 
61 PRINT_ALDB_SCHEMA = vol.Schema({vol.Required(CONF_ENTITY_ID): cv.entity_id})
62 
63 
64 X10_HOUSECODE_SCHEMA = vol.Schema({vol.Required(SRV_HOUSECODE): vol.In(HOUSECODES)})
65 
66 
67 TRIGGER_SCENE_SCHEMA = vol.Schema(
68  {vol.Required(SRV_ALL_LINK_GROUP): vol.Range(min=0, max=255)}
69 )
70 
71 
72 ADD_DEFAULT_LINKS_SCHEMA = vol.Schema({vol.Required(CONF_ENTITY_ID): cv.entity_id})
73 
74 
76  address=vol.UNDEFINED,
77  cat=vol.UNDEFINED,
78  subcat=vol.UNDEFINED,
79  firmware=vol.UNDEFINED,
80 ):
81  """Build the device override schema for config flow."""
82  return vol.Schema(
83  {
84  vol.Required(CONF_ADDRESS, default=address): str,
85  vol.Optional(CONF_CAT, default=cat): str,
86  vol.Optional(CONF_SUBCAT, default=subcat): str,
87  }
88  )
89 
90 
92  housecode=vol.UNDEFINED,
93  unitcode=vol.UNDEFINED,
94  platform=vol.UNDEFINED,
95  dim_steps=22,
96 ):
97  """Build the X10 schema for config flow."""
98  if platform == "light":
99  dim_steps_schema = vol.Required(CONF_DIM_STEPS, default=dim_steps)
100  else:
101  dim_steps_schema = vol.Optional(CONF_DIM_STEPS, default=dim_steps)
102  return vol.Schema(
103  {
104  vol.Required(CONF_HOUSECODE, default=housecode): vol.In(HC_LOOKUP.keys()),
105  vol.Required(CONF_UNITCODE, default=unitcode): vol.In(range(1, 17)),
106  vol.Required(CONF_PLATFORM, default=platform): vol.In(X10_PLATFORMS),
107  dim_steps_schema: vol.Range(min=0, max=255),
108  }
109  )
110 
111 
112 def _find_likely_port(ports):
113  """Return the most likely USB port for a PLM."""
114  test_strings = ["FTDI", "0403:6001", "10BF:"]
115  for port, name in ports.items():
116  for test_string in test_strings:
117  if test_string in name:
118  return port
119  return vol.UNDEFINED
120 
121 
122 def build_plm_schema(ports: dict[str, str], device=vol.UNDEFINED):
123  """Build the PLM schema for config flow."""
124  if not device or device == vol.UNDEFINED:
125  device = _find_likely_port(ports)
126  return vol.Schema({vol.Required(CONF_DEVICE, default=device): vol.In(ports)})
127 
128 
129 def build_plm_manual_schema(device=vol.UNDEFINED):
130  """Build the manual PLM schema for config flow."""
131  return vol.Schema({vol.Required(CONF_DEVICE, default=device): str})
132 
133 
135  hub_version,
136  host=vol.UNDEFINED,
137  port=vol.UNDEFINED,
138  username=vol.UNDEFINED,
139  password=vol.UNDEFINED,
140 ):
141  """Build the Hub schema for config flow."""
142  if port == vol.UNDEFINED:
143  port = PORT_HUB_V2 if hub_version == 2 else PORT_HUB_V1
144  schema = {
145  vol.Required(CONF_HOST, default=host): str,
146  vol.Required(CONF_PORT, default=port): int,
147  vol.Required(CONF_HUB_VERSION, default=hub_version): int,
148  }
149  if hub_version == 2:
150  schema[vol.Required(CONF_USERNAME, default=username)] = str
151  schema[vol.Required(CONF_PASSWORD, default=password)] = str
152  return vol.Schema(schema)
def build_hub_schema(hub_version, host=vol.UNDEFINED, port=vol.UNDEFINED, username=vol.UNDEFINED, password=vol.UNDEFINED)
Definition: schemas.py:140
def build_plm_manual_schema(device=vol.UNDEFINED)
Definition: schemas.py:129
def build_device_override_schema(address=vol.UNDEFINED, cat=vol.UNDEFINED, subcat=vol.UNDEFINED, firmware=vol.UNDEFINED)
Definition: schemas.py:80
def build_plm_schema(dict[str, str] ports, device=vol.UNDEFINED)
Definition: schemas.py:122
def build_x10_schema(housecode=vol.UNDEFINED, unitcode=vol.UNDEFINED, platform=vol.UNDEFINED, dim_steps=22)
Definition: schemas.py:96