configuration.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import voluptuous as vol
  2. from homeassistant.const import CONF_HOST, CONF_NAME
  3. from .const import (
  4. CONF_CLIMATE,
  5. CONF_DEVICE_ID,
  6. CONF_FAN,
  7. CONF_HUMIDIFIER,
  8. CONF_LIGHT,
  9. CONF_LOCAL_KEY,
  10. CONF_LOCK,
  11. CONF_SWITCH,
  12. CONF_TYPE,
  13. )
  14. from .helpers.device_config import available_configs, TuyaDeviceConfig
  15. def conf_types():
  16. types = []
  17. for cfg in available_configs():
  18. parsed = TuyaDeviceConfig(cfg)
  19. types.append(parsed.legacy_type)
  20. return types
  21. INDIVIDUAL_CONFIG_SCHEMA_TEMPLATE = [
  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. STAGE2_CONFIG_SCHEMA_TEMPLATE = [
  27. {"key": CONF_NAME, "type": str, "required": True, "option": False},
  28. {
  29. "key": CONF_TYPE,
  30. "type": vol.In(conf_types()),
  31. "required": True,
  32. "option": True,
  33. },
  34. {
  35. "key": CONF_CLIMATE,
  36. "type": bool,
  37. "required": False,
  38. "default": False,
  39. "option": True,
  40. },
  41. {
  42. "key": CONF_LIGHT,
  43. "type": bool,
  44. "required": False,
  45. "default": False,
  46. "option": True,
  47. },
  48. {
  49. "key": CONF_LOCK,
  50. "type": bool,
  51. "required": False,
  52. "default": False,
  53. "option": True,
  54. },
  55. {
  56. "key": CONF_SWITCH,
  57. "type": bool,
  58. "required": False,
  59. "default": False,
  60. "option": True,
  61. },
  62. {
  63. "key": CONF_HUMIDIFIER,
  64. "type": bool,
  65. "required": False,
  66. "default": False,
  67. "option": True,
  68. },
  69. {
  70. "key": CONF_FAN,
  71. "type": bool,
  72. "required": False,
  73. "default": False,
  74. "option": True,
  75. },
  76. ]
  77. def individual_config_schema(defaults={}, options_only=False, stage=1):
  78. output = {}
  79. if options_only:
  80. schema = [*INDIVIDUAL_CONFIG_SCHEMA_TEMPLATE, *STAGE2_CONFIG_SCHEMA_TEMPLATE]
  81. elif stage == 1:
  82. schema = INDIVIDUAL_CONFIG_SCHEMA_TEMPLATE
  83. else:
  84. schema = STAGE2_CONFIG_SCHEMA_TEMPLATE
  85. for prop in schema:
  86. if options_only and not prop.get("option"):
  87. continue
  88. options = {}
  89. default = defaults.get(prop["key"], prop.get("default"))
  90. if default is not None:
  91. options["default"] = default
  92. key = (
  93. vol.Required(prop["key"], **options)
  94. if prop["required"]
  95. else vol.Optional(prop["key"], **options)
  96. )
  97. output[key] = prop["type"]
  98. return output