1 """Handle auto setup of IHC products from the ihc project file."""
6 from defusedxml
import ElementTree
7 import voluptuous
as vol
29 _LOGGER = logging.getLogger(__name__)
32 AUTO_SETUP_SCHEMA = vol.Schema(
34 vol.Optional(CONF_BINARY_SENSOR, default=[]): vol.All(
39 vol.Required(CONF_NODE): cv.string,
40 vol.Required(CONF_XPATH): cv.string,
41 vol.Optional(CONF_INVERTING, default=
False): cv.boolean,
42 vol.Optional(CONF_TYPE): cv.string,
47 vol.Optional(CONF_LIGHT, default=[]): vol.All(
52 vol.Required(CONF_NODE): cv.string,
53 vol.Required(CONF_XPATH): cv.string,
54 vol.Optional(CONF_DIMMABLE, default=
False): cv.boolean,
59 vol.Optional(CONF_SENSOR, default=[]): vol.All(
64 vol.Required(CONF_NODE): cv.string,
65 vol.Required(CONF_XPATH): cv.string,
67 CONF_UNIT_OF_MEASUREMENT, default=UnitOfTemperature.CELSIUS
73 vol.Optional(CONF_SWITCH, default=[]): vol.All(
78 vol.Required(CONF_NODE): cv.string,
79 vol.Required(CONF_XPATH): cv.string,
89 """Auto setup of IHC products from the IHC project file."""
90 if not (project_xml := ihc_controller.get_project()):
91 _LOGGER.error(
"Unable to read project from IHC controller")
93 project = ElementTree.fromstring(project_xml)
96 yaml_path = hass.config.path(AUTO_SETUP_YAML)
97 if not os.path.isfile(yaml_path):
98 yaml_path = os.path.join(os.path.dirname(__file__), AUTO_SETUP_YAML)
102 except vol.Invalid
as exception:
103 _LOGGER.error(
"Invalid IHC auto setup data: %s", exception)
106 groups = project.findall(
".//group")
107 for platform
in IHC_PLATFORMS:
108 platform_setup = auto_setup_conf[platform]
111 discovery.load_platform(hass, platform, DOMAIN, discovery_info, config)
117 """Get discovery info for specified IHC platform."""
120 groupname = group.attrib[
"name"]
121 for product_cfg
in platform_setup:
122 products = group.findall(product_cfg[CONF_XPATH])
123 for product
in products:
124 product_id =
int(product.attrib[
"id"].strip(
"_"), 0)
125 nodes = product.findall(product_cfg[CONF_NODE])
127 if "setting" in node.attrib
and node.attrib[
"setting"] ==
"yes":
129 ihc_id =
int(node.attrib[
"id"].strip(
"_"), 0)
130 name = f
"{groupname}_{ihc_id}"
132 model = product.get(
"product_identifier",
"").lstrip(
"_")
135 "ctrl_id": controller_id,
138 "name": product.get(
"name")
or "",
139 "note": product.get(
"note")
or "",
140 "position": product.get(
"position")
or "",
144 "product_cfg": product_cfg,
146 discovery_data[name] = device
147 return discovery_data
def get_discovery_info(platform_setup, groups, controller_id)
def autosetup_ihc_products(HomeAssistant hass, config, ihc_controller, controller_id)
dict[Any, Any] load_yaml_config_file(str config_path, Secrets|None secrets=None)