configuration.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import voluptuous as vol
  2. from homeassistant.const import CONF_HOST, CONF_NAME
  3. from .const import (
  4. CONF_CHILD_LOCK,
  5. CONF_CLIMATE,
  6. CONF_DEVICE_ID,
  7. CONF_DISPLAY_LIGHT,
  8. CONF_FAN,
  9. CONF_HUMIDIFIER,
  10. CONF_LOCAL_KEY,
  11. CONF_SWITCH,
  12. CONF_TYPE,
  13. CONF_TYPE_AUTO,
  14. CONF_TYPE_DEHUMIDIFIER,
  15. CONF_TYPE_EANONS_HUMIDIFIER,
  16. CONF_TYPE_EUROM_600_HEATER,
  17. CONF_TYPE_FAN,
  18. CONF_TYPE_GECO_HEATER,
  19. CONF_TYPE_GPCV_HEATER,
  20. CONF_TYPE_GPPH_HEATER,
  21. CONF_TYPE_GSH_HEATER,
  22. CONF_TYPE_GARDENPAC_HEATPUMP,
  23. CONF_TYPE_INKBIRD_THERMOSTAT,
  24. CONF_TYPE_KOGAN_HEATER,
  25. CONF_TYPE_KOGAN_SWITCH,
  26. CONF_TYPE_PURLINE_M100_HEATER,
  27. CONF_TYPE_REMORA_HEATPUMP,
  28. )
  29. INDIVIDUAL_CONFIG_SCHEMA_TEMPLATE = [
  30. {"key": CONF_NAME, "type": str, "required": True, "option": False},
  31. {"key": CONF_HOST, "type": str, "required": True, "option": True},
  32. {"key": CONF_DEVICE_ID, "type": str, "required": True, "option": False},
  33. {"key": CONF_LOCAL_KEY, "type": str, "required": True, "option": True},
  34. {
  35. "key": CONF_TYPE,
  36. "type": vol.In(
  37. [
  38. CONF_TYPE_AUTO,
  39. CONF_TYPE_DEHUMIDIFIER,
  40. CONF_TYPE_EANONS_HUMIDIFIER,
  41. CONF_TYPE_EUROM_600_HEATER,
  42. CONF_TYPE_FAN,
  43. CONF_TYPE_GECO_HEATER,
  44. CONF_TYPE_GPCV_HEATER,
  45. CONF_TYPE_GPPH_HEATER,
  46. CONF_TYPE_GSH_HEATER,
  47. CONF_TYPE_GARDENPAC_HEATPUMP,
  48. CONF_TYPE_INKBIRD_THERMOSTAT,
  49. CONF_TYPE_KOGAN_HEATER,
  50. CONF_TYPE_KOGAN_SWITCH,
  51. CONF_TYPE_PURLINE_M100_HEATER,
  52. CONF_TYPE_REMORA_HEATPUMP,
  53. ]
  54. ),
  55. "required": False,
  56. "default": CONF_TYPE_AUTO,
  57. "option": True,
  58. },
  59. {
  60. "key": CONF_CLIMATE,
  61. "type": bool,
  62. "required": False,
  63. "default": False,
  64. "option": True,
  65. },
  66. {
  67. "key": CONF_DISPLAY_LIGHT,
  68. "type": bool,
  69. "required": False,
  70. "default": False,
  71. "option": True,
  72. },
  73. {
  74. "key": CONF_CHILD_LOCK,
  75. "type": bool,
  76. "required": False,
  77. "default": False,
  78. "option": True,
  79. },
  80. {
  81. "key": CONF_SWITCH,
  82. "type": bool,
  83. "required": False,
  84. "default": False,
  85. "option": True,
  86. },
  87. {
  88. "key": CONF_HUMIDIFIER,
  89. "type": bool,
  90. "required": False,
  91. "default": False,
  92. "option": True,
  93. },
  94. {
  95. "key": CONF_FAN,
  96. "type": bool,
  97. "required": False,
  98. "default": False,
  99. "option": True,
  100. },
  101. ]
  102. def individual_config_schema(defaults={}, options_only=False):
  103. output = {}
  104. for prop in INDIVIDUAL_CONFIG_SCHEMA_TEMPLATE:
  105. if options_only and not prop.get("option"):
  106. continue
  107. options = {}
  108. default = defaults.get(prop["key"], prop.get("default"))
  109. if default is not None:
  110. options["default"] = default
  111. key = (
  112. vol.Required(prop["key"], **options)
  113. if prop["required"]
  114. else vol.Optional(prop["key"], **options)
  115. )
  116. output[key] = prop["type"]
  117. return output