Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use connections from device config to setup hass devices #29

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions custom_components/button_plus/button.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}")
Expand All @@ -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:
Expand All @@ -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

Expand Down
8 changes: 7 additions & 1 deletion custom_components/button_plus/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -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({
Expand Down
30 changes: 11 additions & 19 deletions custom_components/button_plus/light.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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

Expand Down
37 changes: 19 additions & 18 deletions custom_components/button_plus/switch.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}")
Expand All @@ -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:
Expand All @@ -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

Expand Down
38 changes: 18 additions & 20 deletions custom_components/button_plus/text.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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:
Expand All @@ -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

Expand Down
Loading