Centralize DPT auto-selection

This commit is contained in:
2026-02-13 14:13:31 +01:00
parent d91d3edc5a
commit 83518c88ab
5 changed files with 55 additions and 13 deletions

View File

@@ -12,6 +12,7 @@ from homeassistant.helpers import event as event_helper
from .const import (
CONF_ANGLE_ADDRESS,
CONF_ANGLE_STATE_ADDRESS,
ADDRESS_VALUE_TYPE,
CONF_COMMAND_ADDRESS,
CONF_INVERT_INCOMING,
CONF_INVERT_OUTGOING,
@@ -227,7 +228,7 @@ class BridgeManager:
continue
self._remember_address_options(
port.state_address,
None,
_get_value_type(CONF_STATE_ADDRESS),
port.state_invert_incoming,
port.state_invert_outgoing,
)
@@ -242,7 +243,7 @@ class BridgeManager:
continue
self._remember_address_options(
port.state_address,
None,
_get_value_type(CONF_STATE_ADDRESS),
port.state_invert_incoming,
port.state_invert_outgoing,
)
@@ -258,14 +259,14 @@ class BridgeManager:
if port.position_state_address:
self._remember_address_options(
port.position_state_address,
"percent",
_get_value_type(CONF_POSITION_STATE_ADDRESS),
port.position_state_invert_incoming,
port.position_state_invert_outgoing,
)
if port.angle_state_address:
self._remember_address_options(
port.angle_state_address,
"percent",
_get_value_type(CONF_ANGLE_STATE_ADDRESS),
port.angle_state_invert_incoming,
port.angle_state_invert_outgoing,
)
@@ -289,7 +290,7 @@ class BridgeManager:
for port in cover_ports:
self._register_knx_address(
port.move_long_address,
None,
CONF_MOVE_LONG_ADDRESS,
port.move_long_invert_incoming,
port.move_long_invert_outgoing,
port,
@@ -297,7 +298,7 @@ class BridgeManager:
)
self._register_knx_address(
port.move_short_address,
None,
CONF_MOVE_SHORT_ADDRESS,
port.move_short_invert_incoming,
port.move_short_invert_outgoing,
port,
@@ -305,7 +306,7 @@ class BridgeManager:
)
self._register_knx_address(
port.stop_address,
None,
CONF_STOP_ADDRESS,
port.stop_invert_incoming,
port.stop_invert_outgoing,
port,
@@ -313,7 +314,7 @@ class BridgeManager:
)
self._register_knx_address(
port.position_address,
"percent",
CONF_POSITION_ADDRESS,
port.position_invert_incoming,
port.position_invert_outgoing,
port,
@@ -321,7 +322,7 @@ class BridgeManager:
)
self._register_knx_address(
port.angle_address,
"percent",
CONF_ANGLE_ADDRESS,
port.angle_invert_incoming,
port.angle_invert_outgoing,
port,
@@ -338,7 +339,7 @@ class BridgeManager:
def _register_knx_address(
self,
address: str | None,
value_type: str | None,
address_key: str,
invert_incoming: bool,
invert_outgoing: bool,
port: CoverPort,
@@ -350,6 +351,7 @@ class BridgeManager:
self._address_handlers[address] = lambda event: self._handle_cover_action(
port, action, event
)
value_type = _get_value_type(address_key)
self._remember_address_options(
address, value_type, invert_incoming, invert_outgoing
)
@@ -368,7 +370,10 @@ class BridgeManager:
port, event
)
self._remember_address_options(
address, None, invert_incoming, invert_outgoing
address,
_get_value_type(CONF_COMMAND_ADDRESS),
invert_incoming,
invert_outgoing,
)
self._registered_addresses.append((address, None))
@@ -623,3 +628,7 @@ def _invert_in_key(address_key: str) -> str:
def _invert_out_key(address_key: str) -> str:
return f"{address_key}_{CONF_INVERT_OUTGOING}"
def _get_value_type(address_key: str) -> str | None:
return ADDRESS_VALUE_TYPE.get(address_key)