configuration.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import voluptuous as vol
  2. from homeassistant.const import CONF_NAME, CONF_HOST
  3. from .const import (
  4. CONF_DEVICE_ID,
  5. CONF_LOCAL_KEY,
  6. CONF_TYPE,
  7. CONF_TYPE_GPPH_HEATER,
  8. CONF_TYPE_DEHUMIDIFIER,
  9. CONF_TYPE_FAN,
  10. CONF_TYPE_GECO_HEATER,
  11. CONF_TYPE_GPCV_HEATER,
  12. CONF_TYPE_KOGAN_HEATER,
  13. CONF_TYPE_KOGAN_SWITCH,
  14. CONF_CLIMATE,
  15. CONF_DISPLAY_LIGHT,
  16. CONF_CHILD_LOCK,
  17. CONF_SWITCH,
  18. CONF_TYPE_AUTO,
  19. )
  20. INDIVIDUAL_CONFIG_SCHEMA_TEMPLATE = [
  21. {"key": CONF_NAME, "type": str, "required": True, "option": False},
  22. {"key": CONF_HOST, "type": str, "required": True, "option": True},
  23. {"key": CONF_DEVICE_ID, "type": str, "required": True, "option": False},
  24. {"key": CONF_LOCAL_KEY, "type": str, "required": True, "option": True},
  25. {
  26. "key": CONF_TYPE,
  27. "type": vol.In(
  28. [
  29. CONF_TYPE_AUTO,
  30. CONF_TYPE_GPPH_HEATER,
  31. CONF_TYPE_DEHUMIDIFIER,
  32. CONF_TYPE_FAN,
  33. CONF_TYPE_GECO_HEATER,
  34. CONF_TYPE_GPCV_HEATER,
  35. CONF_TYPE_KOGAN_HEATER,
  36. CONF_TYPE_KOGAN_SWITCH,
  37. ]
  38. ),
  39. "required": False,
  40. "default": CONF_TYPE_AUTO,
  41. "option": True,
  42. },
  43. {
  44. "key": CONF_CLIMATE,
  45. "type": bool,
  46. "required": False,
  47. "default": True,
  48. "option": True,
  49. },
  50. {
  51. "key": CONF_DISPLAY_LIGHT,
  52. "type": bool,
  53. "required": False,
  54. "default": False,
  55. "option": True,
  56. },
  57. {
  58. "key": CONF_CHILD_LOCK,
  59. "type": bool,
  60. "required": False,
  61. "default": False,
  62. "option": True,
  63. },
  64. {
  65. "key": CONF_SWITCH,
  66. "type": bool,
  67. "required": False,
  68. "default": False,
  69. "option": True,
  70. },
  71. ]
  72. def individual_config_schema(defaults={}, options_only=False):
  73. output = {}
  74. for prop in INDIVIDUAL_CONFIG_SCHEMA_TEMPLATE:
  75. if options_only and not prop.get("option"):
  76. continue
  77. options = {}
  78. default = defaults.get(prop["key"], prop.get("default"))
  79. if default is not None:
  80. options["default"] = default
  81. key = (
  82. vol.Required(prop["key"], **options)
  83. if prop["required"]
  84. else vol.Optional(prop["key"], **options)
  85. )
  86. output[key] = prop["type"]
  87. return output