configuration.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. ]
  37. ),
  38. "required": False,
  39. "default": CONF_TYPE_AUTO,
  40. "option": True,
  41. },
  42. {
  43. "key": CONF_CLIMATE,
  44. "type": bool,
  45. "required": False,
  46. "default": True,
  47. "option": True,
  48. },
  49. {
  50. "key": CONF_DISPLAY_LIGHT,
  51. "type": bool,
  52. "required": False,
  53. "default": False,
  54. "option": True,
  55. },
  56. {
  57. "key": CONF_CHILD_LOCK,
  58. "type": bool,
  59. "required": False,
  60. "default": False,
  61. "option": True,
  62. },
  63. {
  64. "key": CONF_SWITCH,
  65. "type": bool,
  66. "required": False,
  67. "default": False,
  68. "option": True,
  69. ]
  70. def individual_config_schema(defaults={}, options_only=False):
  71. output = {}
  72. for prop in INDIVIDUAL_CONFIG_SCHEMA_TEMPLATE:
  73. if options_only and not prop.get("option"):
  74. continue
  75. options = {}
  76. default = defaults.get(prop["key"], prop.get("default"))
  77. if default is not None:
  78. options["default"] = default
  79. key = (
  80. vol.Required(prop["key"], **options)
  81. if prop["required"]
  82. else vol.Optional(prop["key"], **options)
  83. )
  84. output[key] = prop["type"]
  85. return output