diff --git a/custom_components/button_plus/button.py b/custom_components/button_plus/button.py index 2afeee3..828806e 100644 --- a/custom_components/button_plus/button.py +++ b/custom_components/button_plus/button.py @@ -25,7 +25,13 @@ async def async_setup_entry( hub: ButtonPlusHub = hass.data[DOMAIN][config_entry.entry_id] - buttons = hub.config.mqtt_buttons + active_connectors = active_connectors = [ + connector.connector_id + for connector in hub.config.info.connectors + if connector.connector_type in [1, 2] + ] + + buttons = filter(lambda b: b.button_id // 2 in active_connectors, hub.config.mqtt_buttons) for button in buttons: _LOGGER.debug(f"Creating button with parameters: {button.button_id} {button.label} {hub.hub_id}") @@ -47,6 +53,7 @@ def __init__(self, btn_id: int, hub: ButtonPlusHub): self._attr_name = f'button-{btn_id}' self._name = f'Button {btn_id}' self._device_class = ButtonDeviceClass.IDENTIFY + self._connector = hub.config.info.connectors[btn_id // 2] @property def name(self) -> str: @@ -65,24 +72,17 @@ def device_info(self): "manufacturer": MANUFACTURER, } - match self._btn_id: - case 0 | 1: - return {"identifiers": {(DOMAIN, self._hub_id)}} - case 2 | 3: - device_info["name"] = f"BAR Module 1" - device_info["connections"] = {("bar_module", 1)} - device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_1')} - case 4 | 5: - device_info["name"] = f"BAR Module 2" - device_info["connections"] = {("bar_module", 2)} - device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_2')} - case 6 | 7: - device_info["name"] = f"BAR Module 3" - device_info["connections"] = {("bar_module", 3)} + match self._connector.connector_type: + case 1: + device_info["name"] = f"BAR Module {self._connector.connector_id}" + device_info["connections"] = {("bar_module", self._connector.connector_id)} device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_3')} + device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_{self._connector.connector_id}')} + case 2: + device_info["name"] = f"Display Module" + device_info["connections"] = {("display_module", 1)} + device_info["model"] = "Display Module" + device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_display_module')} return device_info diff --git a/custom_components/button_plus/config_flow.py b/custom_components/button_plus/config_flow.py index e8499cd..3ad66a4 100644 --- a/custom_components/button_plus/config_flow.py +++ b/custom_components/button_plus/config_flow.py @@ -243,7 +243,13 @@ def add_broker_to_config(self, device_config: DeviceConfiguration) -> DeviceConf def add_topics_to_buttons(self, device_config) -> DeviceConfiguration: device_id = device_config.info.device_id - for button in device_config.mqtt_buttons: + active_connectors = [ + connector.connector_id + for connector in device_config.info.connectors + if connector.connector_type in [1, 2] + ] + + for button in filter(lambda b: b.button_id // 2 in active_connectors, device_config.mqtt_buttons): # Create topics for button main label button.topics.append({ diff --git a/custom_components/button_plus/light.py b/custom_components/button_plus/light.py index def5acf..850975b 100644 --- a/custom_components/button_plus/light.py +++ b/custom_components/button_plus/light.py @@ -45,6 +45,7 @@ def __init__(self, btn_id: int, hub: ButtonPlusHub, light_type: str): self.entity_id = f"light.{light_type}_{self._hub_id}_{btn_id}" self._attr_name = f'light-{light_type}-{btn_id}' self._state = False + self._connector = hub.config.info.connectors[btn_id // 2] @property def is_on(self) -> bool | None: @@ -76,26 +77,17 @@ def device_info(self): "manufacturer": MANUFACTURER, } - match self._btn_id: - case 0 | 1: - return {"identifiers": {(DOMAIN, self._hub_id)}} - - case 2 | 3: - device_info["name"] = f"BAR Module 1" - device_info["connections"] = {("bar_module", 1)} - device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_1')} - - case 4 | 5: - device_info["name"] = f"BAR Module 2" - device_info["connections"] = {("bar_module", 2)} - device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_2')} - case 6 | 7: - device_info["name"] = f"BAR Module 3" - device_info["connections"] = {("bar_module", 3)} + match self._connector.connector_type: + case 1: + device_info["name"] = f"BAR Module {self._connector.connector_id}" + device_info["connections"] = {("bar_module", self._connector.connector_id)} device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_3')} + device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_{self._connector.connector_id}')} + case 2: + device_info["name"] = f"Display Module" + device_info["connections"] = {("display_module", 1)} + device_info["model"] = "Display Module" + device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_display_module')} return device_info diff --git a/custom_components/button_plus/switch.py b/custom_components/button_plus/switch.py index 67eea2c..eef75b3 100644 --- a/custom_components/button_plus/switch.py +++ b/custom_components/button_plus/switch.py @@ -24,7 +24,14 @@ async def async_setup_entry( """Add switches for passed config_entry in HA.""" hub: ButtonPlusHub = hass.data[DOMAIN][config_entry.entry_id] - buttons = hub.config.mqtt_buttons + + active_connectors = [ + connector.connector_id + for connector in hub.config.info.connectors + if connector.connector_type in [1, 2] + ] + + buttons = filter(lambda b: b.button_id // 2 in active_connectors,hub.config.mqtt_buttons) for button in buttons: # _LOGGER.debug(f"Creating switch with parameters: {button.button_id} {button.label} {hub.hub_id}") @@ -44,6 +51,7 @@ def __init__(self, btn_id: int, hub: ButtonPlusHub): self._attr_name = f'switch-{btn_id}' self._name = f'Button {btn_id}' self._device_class = SwitchDeviceClass.SWITCH + self._connector = hub.config.info.connectors[btn_id // 2] @property def name(self) -> str: @@ -58,24 +66,17 @@ def device_info(self): "manufacturer": MANUFACTURER, } - match self._btn_id: - case 0 | 1: - return {"identifiers": {(DOMAIN, self._hub_id)}} - case 2 | 3: - device_info["name"] = f"BAR Module 1" - device_info["connections"] = {("bar_module", 1)} - device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_1')} - case 4 | 5: - device_info["name"] = f"BAR Module 2" - device_info["connections"] = {("bar_module", 2)} - device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_2')} - case 6 | 7: - device_info["name"] = f"BAR Module 3" - device_info["connections"] = {("bar_module", 3)} + match self._connector.connector_type: + case 1: + device_info["name"] = f"BAR Module {self._connector.connector_id}" + device_info["connections"] = {("bar_module", self._connector.connector_id)} device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_3')} + device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_{self._connector.connector_id}')} + case 2: + device_info["name"] = f"Display Module" + device_info["connections"] = {("display_module", 1)} + device_info["model"] = "Display Module" + device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_display_module')} return device_info diff --git a/custom_components/button_plus/text.py b/custom_components/button_plus/text.py index b8ca320..5f29272 100644 --- a/custom_components/button_plus/text.py +++ b/custom_components/button_plus/text.py @@ -27,7 +27,13 @@ async def async_setup_entry( hub: ButtonPlusHub = hass.data[DOMAIN][config_entry.entry_id] - buttons = hub.config.mqtt_buttons + active_connectors = [ + connector.connector_id + for connector in hub.config.info.connectors + if connector.connector_type in [1, 2] + ] + + buttons = filter(lambda b: b.button_id // 2 in active_connectors, hub.config.mqtt_buttons) for button in buttons: _LOGGER.debug( @@ -55,6 +61,7 @@ def __init__(self, btn_id: int, hub: ButtonPlusHub, btn_label: str, text_type: s self.entity_id = f"text.{text_type}_{self._hub_id}_{btn_id}" self._attr_name = f'text-{text_type}-{btn_id}' self._attr_native_value = btn_label + self._connector = hub.config.info.connectors[btn_id // 2] @property def should_poll(self) -> bool: @@ -74,26 +81,17 @@ def device_info(self): "manufacturer": MANUFACTURER, } - match self._btn_id: - case 0 | 1: - return {"identifiers": {(DOMAIN, self._hub_id)}} - - case 2 | 3: - device_info["name"] = f"BAR Module 1" - device_info["connections"] = {("bar_module", 1)} - device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_1')} - - case 4 | 5: - device_info["name"] = f"BAR Module 2" - device_info["connections"] = {("bar_module", 2)} - device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_2')} - case 6 | 7: - device_info["name"] = f"BAR Module 3" - device_info["connections"] = {("bar_module", 3)} + match self._connector.connector_type: + case 1: + device_info["name"] = f"BAR Module {self._connector.connector_id}" + device_info["connections"] = {("bar_module", self._connector.connector_id)} device_info["model"] = "BAR Module" - device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_3')} + device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_bar_module_{self._connector.connector_id}')} + case 2: + device_info["name"] = f"Display Module" + device_info["connections"] = {("display_module", 1)} + device_info["model"] = "Display Module" + device_info["identifiers"] = {(DOMAIN, f'{self._btn_id}_display_module')} return device_info