|
4 | 4 |
|
5 | 5 | import voluptuous as vol |
6 | 6 |
|
| 7 | +from homeassistant.components.climate import HVACMode |
7 | 8 | from homeassistant.const import ( |
8 | 9 | CONF_ENTITY_CATEGORY, |
9 | 10 | CONF_ENTITY_ID, |
|
24 | 25 | CONF_SYNC_STATE, |
25 | 26 | DOMAIN, |
26 | 27 | SUPPORTED_PLATFORMS_UI, |
| 28 | + ClimateConf, |
27 | 29 | ColorTempModes, |
28 | 30 | CoverConf, |
| 31 | + FanZeroMode, |
29 | 32 | ) |
30 | 33 | from .const import ( |
31 | 34 | CONF_COLOR, |
|
34 | 37 | CONF_DATA, |
35 | 38 | CONF_DEVICE_INFO, |
36 | 39 | CONF_ENTITY, |
| 40 | + CONF_GA_ACTIVE, |
37 | 41 | CONF_GA_ANGLE, |
38 | 42 | CONF_GA_BLUE_BRIGHTNESS, |
39 | 43 | CONF_GA_BLUE_SWITCH, |
40 | 44 | CONF_GA_BRIGHTNESS, |
41 | 45 | CONF_GA_COLOR, |
42 | 46 | CONF_GA_COLOR_TEMP, |
| 47 | + CONF_GA_CONTROLLER_MODE, |
| 48 | + CONF_GA_CONTROLLER_STATUS, |
| 49 | + CONF_GA_FAN_SPEED, |
| 50 | + CONF_GA_FAN_SWING, |
| 51 | + CONF_GA_FAN_SWING_HORIZONTAL, |
43 | 52 | CONF_GA_GREEN_BRIGHTNESS, |
44 | 53 | CONF_GA_GREEN_SWITCH, |
| 54 | + CONF_GA_HEAT_COOL, |
45 | 55 | CONF_GA_HUE, |
| 56 | + CONF_GA_HUMIDITY_CURRENT, |
| 57 | + CONF_GA_ON_OFF, |
| 58 | + CONF_GA_OP_MODE_COMFORT, |
| 59 | + CONF_GA_OP_MODE_ECO, |
| 60 | + CONF_GA_OP_MODE_PROTECTION, |
| 61 | + CONF_GA_OP_MODE_STANDBY, |
| 62 | + CONF_GA_OPERATION_MODE, |
46 | 63 | CONF_GA_POSITION_SET, |
47 | 64 | CONF_GA_POSITION_STATE, |
48 | 65 | CONF_GA_RED_BRIGHTNESS, |
49 | 66 | CONF_GA_RED_SWITCH, |
50 | 67 | CONF_GA_SATURATION, |
51 | 68 | CONF_GA_SENSOR, |
| 69 | + CONF_GA_SETPOINT_SHIFT, |
52 | 70 | CONF_GA_STEP, |
53 | 71 | CONF_GA_STOP, |
54 | 72 | CONF_GA_SWITCH, |
| 73 | + CONF_GA_TEMPERATURE_CURRENT, |
| 74 | + CONF_GA_TEMPERATURE_TARGET, |
55 | 75 | CONF_GA_UP_DOWN, |
| 76 | + CONF_GA_VALVE, |
56 | 77 | CONF_GA_WHITE_BRIGHTNESS, |
57 | 78 | CONF_GA_WHITE_SWITCH, |
| 79 | + CONF_IGNORE_AUTO_MODE, |
| 80 | + CONF_TARGET_TEMPERATURE, |
58 | 81 | ) |
59 | 82 | from .knx_selector import ( |
60 | 83 | AllSerializeFirst, |
@@ -313,8 +336,151 @@ class LightColorMode(StrEnum): |
313 | 336 | }, |
314 | 337 | ) |
315 | 338 |
|
| 339 | + |
| 340 | +@unique |
| 341 | +class ConfSetpointShiftMode(StrEnum): |
| 342 | + """Enum for setpoint shift mode.""" |
| 343 | + |
| 344 | + COUNT = "6.010" |
| 345 | + FLOAT = "9.002" |
| 346 | + |
| 347 | + |
| 348 | +@unique |
| 349 | +class ConfClimateFanSpeedMode(StrEnum): |
| 350 | + """Enum for climate fan speed mode.""" |
| 351 | + |
| 352 | + PERCENTAGE = "5.001" |
| 353 | + STEPS = "5.010" |
| 354 | + |
| 355 | + |
| 356 | +CLIMATE_KNX_SCHEMA = vol.Schema( |
| 357 | + { |
| 358 | + vol.Required(CONF_GA_TEMPERATURE_CURRENT): GASelector( |
| 359 | + write=False, state_required=True, valid_dpt="9.001" |
| 360 | + ), |
| 361 | + vol.Optional(CONF_GA_HUMIDITY_CURRENT): GASelector( |
| 362 | + write=False, valid_dpt="9.002" |
| 363 | + ), |
| 364 | + vol.Required(CONF_TARGET_TEMPERATURE): GroupSelect( |
| 365 | + GroupSelectOption( |
| 366 | + translation_key="group_direct_temp", |
| 367 | + schema={ |
| 368 | + vol.Required(CONF_GA_TEMPERATURE_TARGET): GASelector( |
| 369 | + write_required=True, valid_dpt="9.001" |
| 370 | + ), |
| 371 | + vol.Required( |
| 372 | + ClimateConf.MIN_TEMP, default=7 |
| 373 | + ): selector.NumberSelector( |
| 374 | + selector.NumberSelectorConfig( |
| 375 | + min=-20, max=80, step=1, unit_of_measurement="°C" |
| 376 | + ) |
| 377 | + ), |
| 378 | + vol.Required( |
| 379 | + ClimateConf.MAX_TEMP, default=28 |
| 380 | + ): selector.NumberSelector( |
| 381 | + selector.NumberSelectorConfig( |
| 382 | + min=0, max=100, step=1, unit_of_measurement="°C" |
| 383 | + ) |
| 384 | + ), |
| 385 | + vol.Required( |
| 386 | + ClimateConf.TEMPERATURE_STEP, default=0.1 |
| 387 | + ): selector.NumberSelector( |
| 388 | + selector.NumberSelectorConfig( |
| 389 | + min=0.1, max=2, step=0.1, unit_of_measurement="K" |
| 390 | + ), |
| 391 | + ), |
| 392 | + }, |
| 393 | + ), |
| 394 | + GroupSelectOption( |
| 395 | + translation_key="group_setpoint_shift", |
| 396 | + schema={ |
| 397 | + vol.Required(CONF_GA_TEMPERATURE_TARGET): GASelector( |
| 398 | + write=False, state_required=True, valid_dpt="9.001" |
| 399 | + ), |
| 400 | + vol.Required(CONF_GA_SETPOINT_SHIFT): GASelector( |
| 401 | + write_required=True, |
| 402 | + state_required=True, |
| 403 | + dpt=ConfSetpointShiftMode, |
| 404 | + ), |
| 405 | + vol.Required( |
| 406 | + ClimateConf.SETPOINT_SHIFT_MIN, default=-6 |
| 407 | + ): selector.NumberSelector( |
| 408 | + selector.NumberSelectorConfig( |
| 409 | + min=-32, max=0, step=1, unit_of_measurement="K" |
| 410 | + ) |
| 411 | + ), |
| 412 | + vol.Required( |
| 413 | + ClimateConf.SETPOINT_SHIFT_MAX, default=6 |
| 414 | + ): selector.NumberSelector( |
| 415 | + selector.NumberSelectorConfig( |
| 416 | + min=0, max=32, step=1, unit_of_measurement="K" |
| 417 | + ) |
| 418 | + ), |
| 419 | + vol.Required( |
| 420 | + ClimateConf.TEMPERATURE_STEP, default=0.1 |
| 421 | + ): selector.NumberSelector( |
| 422 | + selector.NumberSelectorConfig( |
| 423 | + min=0.1, max=2, step=0.1, unit_of_measurement="K" |
| 424 | + ), |
| 425 | + ), |
| 426 | + }, |
| 427 | + ), |
| 428 | + collapsible=False, |
| 429 | + ), |
| 430 | + "section_activity": KNXSectionFlat(collapsible=True), |
| 431 | + vol.Optional(CONF_GA_ACTIVE): GASelector(write=False, valid_dpt="1"), |
| 432 | + vol.Optional(CONF_GA_VALVE): GASelector(write=False, valid_dpt="5.001"), |
| 433 | + "section_operation_mode": KNXSectionFlat(collapsible=True), |
| 434 | + vol.Optional(CONF_GA_OPERATION_MODE): GASelector(valid_dpt="20.102"), |
| 435 | + vol.Optional(CONF_IGNORE_AUTO_MODE): selector.BooleanSelector(), |
| 436 | + "section_operation_mode_individual": KNXSectionFlat(collapsible=True), |
| 437 | + vol.Optional(CONF_GA_OP_MODE_COMFORT): GASelector(state=False, valid_dpt="1"), |
| 438 | + vol.Optional(CONF_GA_OP_MODE_ECO): GASelector(state=False, valid_dpt="1"), |
| 439 | + vol.Optional(CONF_GA_OP_MODE_STANDBY): GASelector(state=False, valid_dpt="1"), |
| 440 | + vol.Optional(CONF_GA_OP_MODE_PROTECTION): GASelector( |
| 441 | + state=False, valid_dpt="1" |
| 442 | + ), |
| 443 | + "section_heat_cool": KNXSectionFlat(collapsible=True), |
| 444 | + vol.Optional(CONF_GA_HEAT_COOL): GASelector(valid_dpt="1.100"), |
| 445 | + "section_on_off": KNXSectionFlat(collapsible=True), |
| 446 | + vol.Optional(CONF_GA_ON_OFF): GASelector(valid_dpt="1"), |
| 447 | + vol.Optional(ClimateConf.ON_OFF_INVERT): selector.BooleanSelector(), |
| 448 | + "section_controller_mode": KNXSectionFlat(collapsible=True), |
| 449 | + vol.Optional(CONF_GA_CONTROLLER_MODE): GASelector(valid_dpt="20.105"), |
| 450 | + vol.Optional(CONF_GA_CONTROLLER_STATUS): GASelector(write=False), |
| 451 | + vol.Required( |
| 452 | + ClimateConf.DEFAULT_CONTROLLER_MODE, default=HVACMode.HEAT |
| 453 | + ): selector.SelectSelector( |
| 454 | + selector.SelectSelectorConfig( |
| 455 | + options=list(HVACMode), |
| 456 | + translation_key="component.climate.selector.hvac_mode", |
| 457 | + ) |
| 458 | + ), |
| 459 | + "section_fan": KNXSectionFlat(collapsible=True), |
| 460 | + vol.Optional(CONF_GA_FAN_SPEED): GASelector(dpt=ConfClimateFanSpeedMode), |
| 461 | + vol.Required(ClimateConf.FAN_MAX_STEP, default=3): AllSerializeFirst( |
| 462 | + selector.NumberSelector( |
| 463 | + selector.NumberSelectorConfig(min=1, max=100, step=1) |
| 464 | + ), |
| 465 | + vol.Coerce(int), |
| 466 | + ), |
| 467 | + vol.Required( |
| 468 | + ClimateConf.FAN_ZERO_MODE, default=FanZeroMode.OFF |
| 469 | + ): selector.SelectSelector( |
| 470 | + selector.SelectSelectorConfig( |
| 471 | + options=list(FanZeroMode), |
| 472 | + translation_key="component.knx.config_panel.entities.create.climate.knx.fan_zero_mode", |
| 473 | + ) |
| 474 | + ), |
| 475 | + vol.Optional(CONF_GA_FAN_SWING): GASelector(valid_dpt="1"), |
| 476 | + vol.Optional(CONF_GA_FAN_SWING_HORIZONTAL): GASelector(valid_dpt="1"), |
| 477 | + vol.Optional(CONF_SYNC_STATE, default=True): SyncStateSelector(), |
| 478 | + }, |
| 479 | +) |
| 480 | + |
316 | 481 | KNX_SCHEMA_FOR_PLATFORM = { |
317 | 482 | Platform.BINARY_SENSOR: BINARY_SENSOR_KNX_SCHEMA, |
| 483 | + Platform.CLIMATE: CLIMATE_KNX_SCHEMA, |
318 | 484 | Platform.COVER: COVER_KNX_SCHEMA, |
319 | 485 | Platform.LIGHT: LIGHT_KNX_SCHEMA, |
320 | 486 | Platform.SWITCH: SWITCH_KNX_SCHEMA, |
|
0 commit comments