Use KNX group address format from project (#124084)

This commit is contained in:
Matthias Alphart 2024-08-28 12:34:28 +02:00 committed by GitHub
parent 41e66edd14
commit 8504a16e83
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 14 additions and 1 deletions

View File

@ -297,6 +297,7 @@ class KNXModule:
self.config_store = KNXConfigStore(hass=hass, config_entry=entry) self.config_store = KNXConfigStore(hass=hass, config_entry=entry)
self.xknx = XKNX( self.xknx = XKNX(
address_format=self.project.get_address_format(),
connection_config=self.connection_config(), connection_config=self.connection_config(),
rate_limit=self.entry.data[CONF_KNX_RATE_LIMIT], rate_limit=self.entry.data[CONF_KNX_RATE_LIMIT],
state_updater=self.entry.data[CONF_KNX_STATE_UPDATER], state_updater=self.entry.data[CONF_KNX_STATE_UPDATER],

View File

@ -8,12 +8,13 @@ from typing import Final
from xknx import XKNX from xknx import XKNX
from xknx.dpt import DPTBase from xknx.dpt import DPTBase
from xknx.telegram.address import DeviceAddressableType from xknx.telegram.address import DeviceAddressableType, GroupAddress, GroupAddressType
from xknxproject import XKNXProj from xknxproject import XKNXProj
from xknxproject.models import ( from xknxproject.models import (
Device, Device,
DPTType, DPTType,
GroupAddress as GroupAddressModel, GroupAddress as GroupAddressModel,
GroupAddressStyle as XknxProjectGroupAddressStyle,
KNXProject as KNXProjectModel, KNXProject as KNXProjectModel,
ProjectInfo, ProjectInfo,
) )
@ -90,6 +91,7 @@ class KNXProject:
if project := data or await self._store.async_load(): if project := data or await self._store.async_load():
self.devices = project["devices"] self.devices = project["devices"]
self.info = project["info"] self.info = project["info"]
GroupAddress.address_format = self.get_address_format()
xknx.group_address_dpt.clear() xknx.group_address_dpt.clear()
xknx_ga_dict: dict[DeviceAddressableType, DPTType] = {} xknx_ga_dict: dict[DeviceAddressableType, DPTType] = {}
@ -133,3 +135,13 @@ class KNXProject:
async def get_knxproject(self) -> KNXProjectModel | None: async def get_knxproject(self) -> KNXProjectModel | None:
"""Load the project file from local storage.""" """Load the project file from local storage."""
return await self._store.async_load() return await self._store.async_load()
def get_address_format(self) -> GroupAddressType:
"""Return the address format for group addresses used in the project."""
if self.info:
match self.info["group_address_style"]:
case XknxProjectGroupAddressStyle.TWOLEVEL.value:
return GroupAddressType.SHORT
case XknxProjectGroupAddressStyle.FREE.value:
return GroupAddressType.FREE
return GroupAddressType.LONG