1 """KNX entity store schema."""
3 from enum
import StrEnum, unique
5 import voluptuous
as vol
23 SUPPORTED_PLATFORMS_UI,
26 from ..validation
import sync_state_validator
33 CONF_GA_BLUE_BRIGHTNESS,
38 CONF_GA_GREEN_BRIGHTNESS,
42 CONF_GA_RED_BRIGHTNESS,
47 CONF_GA_WHITE_BRIGHTNESS,
51 from .knx_selector
import GASelector
53 BASE_ENTITY_SCHEMA = vol.All(
55 vol.Optional(CONF_NAME, default=
None): vol.Maybe(str),
56 vol.Optional(CONF_DEVICE_INFO, default=
None): vol.Maybe(str),
57 vol.Optional(CONF_ENTITY_CATEGORY, default=
None): vol.Any(
58 ENTITY_CATEGORIES_SCHEMA, vol.SetTo(
None)
64 vol.Required(CONF_NAME): vol.All(str, vol.IsTrue()),
66 extra=vol.ALLOW_EXTRA,
70 vol.Required(CONF_DEVICE_INFO): str,
72 extra=vol.ALLOW_EXTRA,
74 msg=
"One of `Device` or `Name` is required",
80 """Validate group address schema or remove key if no address is set."""
85 vol.Optional(key): ga_selector,
86 vol.Remove(key): vol.Schema(
88 vol.Optional(CONF_GA_WRITE):
None,
89 vol.Optional(CONF_GA_STATE):
None,
90 vol.Optional(CONF_GA_PASSIVE): vol.IsFalse(),
92 extra=vol.ALLOW_EXTRA,
97 SWITCH_SCHEMA = vol.Schema(
99 vol.Required(CONF_ENTITY): BASE_ENTITY_SCHEMA,
100 vol.Required(DOMAIN): {
101 vol.Optional(CONF_INVERT, default=
False): bool,
102 vol.Required(CONF_GA_SWITCH):
GASelector(write_required=
True),
103 vol.Optional(CONF_RESPOND_TO_READ, default=
False): bool,
104 vol.Optional(CONF_SYNC_STATE, default=
True): sync_state_validator,
112 """Enum for light color mode."""
121 """Enum for light color mode."""
124 INDIVIDUAL =
"individual"
128 _LIGHT_COLOR_MODE_SCHEMA =
"_light_color_mode_schema"
130 _COMMON_LIGHT_SCHEMA = vol.Schema(
132 vol.Optional(CONF_SYNC_STATE, default=
True): sync_state_validator,
134 CONF_GA_COLOR_TEMP,
GASelector(write_required=
True, dpt=ColorTempModes)
136 vol.Optional(CONF_COLOR_TEMP_MIN, default=2700): vol.All(
137 vol.Coerce(int), vol.Range(min=1)
139 vol.Optional(CONF_COLOR_TEMP_MAX, default=6000): vol.All(
140 vol.Coerce(int), vol.Range(min=1)
143 extra=vol.REMOVE_EXTRA,
146 _DEFAULT_LIGHT_SCHEMA = _COMMON_LIGHT_SCHEMA.extend(
148 vol.Required(_LIGHT_COLOR_MODE_SCHEMA): LightColorModeSchema.DEFAULT.value,
149 vol.Required(CONF_GA_SWITCH):
GASelector(write_required=
True),
153 GASelector(write_required=
True, dpt=LightColorMode),
158 _INDIVIDUAL_LIGHT_SCHEMA = _COMMON_LIGHT_SCHEMA.extend(
160 vol.Required(_LIGHT_COLOR_MODE_SCHEMA): LightColorModeSchema.INDIVIDUAL.value,
163 vol.Required(CONF_GA_RED_BRIGHTNESS):
GASelector(write_required=
True),
165 vol.Required(CONF_GA_GREEN_BRIGHTNESS):
GASelector(write_required=
True),
167 vol.Required(CONF_GA_BLUE_BRIGHTNESS):
GASelector(write_required=
True),
174 _HSV_LIGHT_SCHEMA = _COMMON_LIGHT_SCHEMA.extend(
176 vol.Required(_LIGHT_COLOR_MODE_SCHEMA): LightColorModeSchema.HSV.value,
177 vol.Required(CONF_GA_SWITCH):
GASelector(write_required=
True),
178 vol.Required(CONF_GA_BRIGHTNESS):
GASelector(write_required=
True),
179 vol.Required(CONF_GA_HUE):
GASelector(write_required=
True),
180 vol.Required(CONF_GA_SATURATION):
GASelector(write_required=
True),
185 LIGHT_KNX_SCHEMA = cv.key_value_schemas(
186 _LIGHT_COLOR_MODE_SCHEMA,
187 default_schema=_DEFAULT_LIGHT_SCHEMA,
189 LightColorModeSchema.DEFAULT: _DEFAULT_LIGHT_SCHEMA,
190 LightColorModeSchema.INDIVIDUAL: _INDIVIDUAL_LIGHT_SCHEMA,
191 LightColorModeSchema.HSV: _HSV_LIGHT_SCHEMA,
195 LIGHT_SCHEMA = vol.Schema(
197 vol.Required(CONF_ENTITY): BASE_ENTITY_SCHEMA,
198 vol.Required(DOMAIN): LIGHT_KNX_SCHEMA,
202 ENTITY_STORE_DATA_SCHEMA: VolSchemaType = vol.All(
205 vol.Required(CONF_PLATFORM): vol.All(
206 vol.Coerce(Platform),
207 vol.In(SUPPORTED_PLATFORMS_UI),
209 vol.Required(CONF_DATA): dict,
211 extra=vol.ALLOW_EXTRA,
213 cv.key_value_schemas(
216 Platform.SWITCH: vol.Schema(
217 {vol.Required(CONF_DATA): SWITCH_SCHEMA}, extra=vol.ALLOW_EXTRA
219 Platform.LIGHT: vol.Schema(
220 {vol.Required(
"data"): LIGHT_SCHEMA}, extra=vol.ALLOW_EXTRA
226 CREATE_ENTITY_BASE_SCHEMA: VolDictType = {
227 vol.Required(CONF_PLATFORM): str,
228 vol.Required(CONF_DATA): dict,
231 UPDATE_ENTITY_BASE_SCHEMA = {
232 vol.Required(CONF_ENTITY_ID): str,
233 **CREATE_ENTITY_BASE_SCHEMA,
VolDictType optional_ga_schema(str key, GASelector ga_selector)