Update xknx to 2.0.0 (#82709)

This commit is contained in:
Matthias Alphart 2022-11-26 06:49:11 +01:00 committed by GitHub
parent 6f1208b07f
commit daf56e92a0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 52 additions and 45 deletions

View file

@ -362,11 +362,8 @@ class KNXModule:
def init_xknx(self) -> None:
"""Initialize XKNX object."""
self.xknx = XKNX(
own_address=self.entry.data[CONF_KNX_INDIVIDUAL_ADDRESS],
rate_limit=self.entry.data[CONF_KNX_RATE_LIMIT],
multicast_group=self.entry.data[CONF_KNX_MCAST_GRP],
multicast_port=self.entry.data[CONF_KNX_MCAST_PORT],
connection_config=self.connection_config(),
rate_limit=self.entry.data[CONF_KNX_RATE_LIMIT],
state_updater=self.entry.data[CONF_KNX_STATE_UPDATER],
)
@ -384,6 +381,9 @@ class KNXModule:
if _conn_type == CONF_KNX_ROUTING:
return ConnectionConfig(
connection_type=ConnectionType.ROUTING,
individual_address=self.entry.data[CONF_KNX_INDIVIDUAL_ADDRESS],
multicast_group=self.entry.data[CONF_KNX_MCAST_GRP],
multicast_port=self.entry.data[CONF_KNX_MCAST_PORT],
local_ip=self.entry.data.get(CONF_KNX_LOCAL_IP),
auto_reconnect=True,
threaded=True,

View file

@ -6,10 +6,10 @@ from typing import Any, Final
import voluptuous as vol
from xknx import XKNX
from xknx.exceptions.exception import InvalidSignature
from xknx.exceptions.exception import InvalidSecureConfiguration
from xknx.io import DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT
from xknx.io.gateway_scanner import GatewayDescriptor, GatewayScanner
from xknx.secure import load_key_ring
from xknx.secure import load_keyring
from homeassistant.config_entries import ConfigEntry, ConfigFlow, OptionsFlow
from homeassistant.const import CONF_HOST, CONF_PORT
@ -41,6 +41,7 @@ from .const import (
CONF_KNX_TUNNELING_TCP,
CONF_KNX_TUNNELING_TCP_SECURE,
CONST_KNX_STORAGE_KEY,
DEFAULT_ROUTING_IA,
DOMAIN,
KNXConfigEntryData,
)
@ -50,7 +51,7 @@ CONF_KNX_GATEWAY: Final = "gateway"
CONF_MAX_RATE_LIMIT: Final = 60
DEFAULT_ENTRY_DATA = KNXConfigEntryData(
individual_address=XKNX.DEFAULT_ADDRESS,
individual_address=DEFAULT_ROUTING_IA,
local_ip=None,
multicast_group=DEFAULT_MCAST_GRP,
multicast_port=DEFAULT_MCAST_PORT,
@ -347,13 +348,13 @@ class KNXCommonFlow(ABC, FlowHandler):
assert self._tunneling_config
storage_key = CONST_KNX_STORAGE_KEY + user_input[CONF_KNX_KNXKEY_FILENAME]
try:
load_key_ring(
await load_keyring(
path=self.hass.config.path(STORAGE_DIR, storage_key),
password=user_input[CONF_KNX_KNXKEY_PASSWORD],
)
except FileNotFoundError:
errors[CONF_KNX_KNXKEY_FILENAME] = "file_not_found"
except InvalidSignature:
except InvalidSecureConfiguration:
errors[CONF_KNX_KNXKEY_PASSWORD] = "invalid_signature"
if not errors:

View file

@ -41,7 +41,9 @@ CONF_KNX_RATE_LIMIT: Final = "rate_limit"
CONF_KNX_ROUTE_BACK: Final = "route_back"
CONF_KNX_STATE_UPDATER: Final = "state_updater"
CONF_KNX_DEFAULT_STATE_UPDATER: Final = True
CONF_KNX_DEFAULT_RATE_LIMIT: Final = 20
CONF_KNX_DEFAULT_RATE_LIMIT: Final = 0
DEFAULT_ROUTING_IA: Final = "0.0.240"
##
# Secure constants

View file

@ -3,7 +3,7 @@
"name": "KNX",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/knx",
"requirements": ["xknx==1.2.1"],
"requirements": ["xknx==2.0.0"],
"codeowners": ["@Julius2342", "@farmio", "@marvin-w"],
"quality_scale": "platinum",
"iot_class": "local_push",

View file

@ -2580,7 +2580,7 @@ xboxapi==2.0.1
xiaomi-ble==0.12.2
# homeassistant.components.knx
xknx==1.2.1
xknx==2.0.0
# homeassistant.components.bluesound
# homeassistant.components.fritz

View file

@ -1793,7 +1793,7 @@ xbox-webapi==2.0.11
xiaomi-ble==0.12.2
# homeassistant.components.knx
xknx==1.2.1
xknx==2.0.0
# homeassistant.components.bluesound
# homeassistant.components.fritz

View file

@ -23,6 +23,7 @@ from homeassistant.components.knx.const import (
CONF_KNX_MCAST_PORT,
CONF_KNX_RATE_LIMIT,
CONF_KNX_STATE_UPDATER,
DEFAULT_ROUTING_IA,
DOMAIN as KNX_DOMAIN,
)
from homeassistant.core import HomeAssistant
@ -224,7 +225,7 @@ def mock_config_entry() -> MockConfigEntry:
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_INDIVIDUAL_ADDRESS: XKNX.DEFAULT_ADDRESS,
CONF_KNX_INDIVIDUAL_ADDRESS: DEFAULT_ROUTING_IA,
},
)

View file

@ -2,7 +2,7 @@
from unittest.mock import patch
import pytest
from xknx.exceptions.exception import InvalidSignature
from xknx.exceptions.exception import InvalidSecureConfiguration
from xknx.io import DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT
from xknx.io.gateway_scanner import GatewayDescriptor
@ -212,7 +212,7 @@ async def test_routing_setup_advanced(hass: HomeAssistant) -> None:
CONF_KNX_CONNECTION_TYPE: CONF_KNX_TUNNELING,
CONF_HOST: "192.168.0.1",
CONF_PORT: 3675,
CONF_KNX_INDIVIDUAL_ADDRESS: "15.15.250",
CONF_KNX_INDIVIDUAL_ADDRESS: "0.0.240",
CONF_KNX_ROUTE_BACK: False,
CONF_KNX_LOCAL_IP: None,
},
@ -229,7 +229,7 @@ async def test_routing_setup_advanced(hass: HomeAssistant) -> None:
CONF_KNX_CONNECTION_TYPE: CONF_KNX_TUNNELING_TCP,
CONF_HOST: "192.168.0.1",
CONF_PORT: 3675,
CONF_KNX_INDIVIDUAL_ADDRESS: "15.15.250",
CONF_KNX_INDIVIDUAL_ADDRESS: "0.0.240",
CONF_KNX_ROUTE_BACK: False,
CONF_KNX_LOCAL_IP: None,
},
@ -246,7 +246,7 @@ async def test_routing_setup_advanced(hass: HomeAssistant) -> None:
CONF_KNX_CONNECTION_TYPE: CONF_KNX_TUNNELING,
CONF_HOST: "192.168.0.1",
CONF_PORT: 3675,
CONF_KNX_INDIVIDUAL_ADDRESS: "15.15.250",
CONF_KNX_INDIVIDUAL_ADDRESS: "0.0.240",
CONF_KNX_ROUTE_BACK: True,
CONF_KNX_LOCAL_IP: None,
},
@ -374,7 +374,7 @@ async def test_tunneling_setup_for_local_ip(hass: HomeAssistant) -> None:
CONF_KNX_CONNECTION_TYPE: CONF_KNX_TUNNELING,
CONF_HOST: "192.168.0.2",
CONF_PORT: 3675,
CONF_KNX_INDIVIDUAL_ADDRESS: "15.15.250",
CONF_KNX_INDIVIDUAL_ADDRESS: "0.0.240",
CONF_KNX_ROUTE_BACK: False,
CONF_KNX_LOCAL_IP: "192.168.1.112",
}
@ -420,7 +420,7 @@ async def test_tunneling_setup_for_multiple_found_gateways(hass: HomeAssistant)
CONF_KNX_CONNECTION_TYPE: CONF_KNX_TUNNELING,
CONF_HOST: "192.168.0.1",
CONF_PORT: 3675,
CONF_KNX_INDIVIDUAL_ADDRESS: "15.15.250",
CONF_KNX_INDIVIDUAL_ADDRESS: "0.0.240",
CONF_KNX_ROUTE_BACK: False,
CONF_KNX_LOCAL_IP: None,
}
@ -625,7 +625,7 @@ async def test_configure_secure_tunnel_manual(hass: HomeAssistant):
CONF_KNX_SECURE_DEVICE_AUTHENTICATION: "device_auth",
CONF_HOST: "192.168.0.1",
CONF_PORT: 3675,
CONF_KNX_INDIVIDUAL_ADDRESS: "15.15.250",
CONF_KNX_INDIVIDUAL_ADDRESS: "0.0.240",
CONF_KNX_ROUTE_BACK: False,
CONF_KNX_LOCAL_IP: None,
}
@ -649,7 +649,7 @@ async def test_configure_secure_knxkeys(hass: HomeAssistant):
"homeassistant.components.knx.async_setup_entry",
return_value=True,
) as mock_setup_entry, patch(
"homeassistant.components.knx.config_flow.load_key_ring", return_value=True
"homeassistant.components.knx.config_flow.load_keyring", return_value=True
):
secure_knxkeys = await hass.config_entries.flow.async_configure(
result["flow_id"],
@ -667,7 +667,7 @@ async def test_configure_secure_knxkeys(hass: HomeAssistant):
CONF_KNX_KNXKEY_PASSWORD: "password",
CONF_HOST: "192.168.0.1",
CONF_PORT: 3675,
CONF_KNX_INDIVIDUAL_ADDRESS: "15.15.250",
CONF_KNX_INDIVIDUAL_ADDRESS: "0.0.240",
CONF_KNX_ROUTE_BACK: False,
CONF_KNX_LOCAL_IP: None,
}
@ -688,7 +688,7 @@ async def test_configure_secure_knxkeys_file_not_found(hass: HomeAssistant):
assert not result["errors"]
with patch(
"homeassistant.components.knx.config_flow.load_key_ring",
"homeassistant.components.knx.config_flow.load_keyring",
side_effect=FileNotFoundError(),
):
secure_knxkeys = await hass.config_entries.flow.async_configure(
@ -717,8 +717,8 @@ async def test_configure_secure_knxkeys_invalid_signature(hass: HomeAssistant):
assert not result["errors"]
with patch(
"homeassistant.components.knx.config_flow.load_key_ring",
side_effect=InvalidSignature(),
"homeassistant.components.knx.config_flow.load_keyring",
side_effect=InvalidSecureConfiguration(),
):
secure_knxkeys = await hass.config_entries.flow.async_configure(
result["flow_id"],
@ -773,13 +773,13 @@ async def test_options_flow_connection_type(
assert mock_config_entry.data == {
CONF_KNX_CONNECTION_TYPE: CONF_KNX_TUNNELING,
CONF_KNX_INDIVIDUAL_ADDRESS: "15.15.250",
CONF_KNX_INDIVIDUAL_ADDRESS: "0.0.240",
CONF_HOST: "192.168.0.1",
CONF_PORT: 3675,
CONF_KNX_LOCAL_IP: None,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_RATE_LIMIT: 20,
CONF_KNX_RATE_LIMIT: 0,
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_ROUTE_BACK: False,
}
@ -804,7 +804,7 @@ async def test_options_communication_settings(
result["flow_id"],
user_input={
CONF_KNX_STATE_UPDATER: False,
CONF_KNX_RATE_LIMIT: 0,
CONF_KNX_RATE_LIMIT: 40,
},
)
@ -816,5 +816,5 @@ async def test_options_communication_settings(
**DEFAULT_ENTRY_DATA,
CONF_KNX_CONNECTION_TYPE: CONF_KNX_AUTOMATIC,
CONF_KNX_STATE_UPDATER: False,
CONF_KNX_RATE_LIMIT: 0,
CONF_KNX_RATE_LIMIT: 40,
}

View file

@ -2,7 +2,6 @@
from unittest.mock import patch
from aiohttp import ClientSession
from xknx import XKNX
from xknx.io import DEFAULT_MCAST_GRP, DEFAULT_MCAST_PORT
from homeassistant.components.knx.const import (
@ -18,6 +17,7 @@ from homeassistant.components.knx.const import (
CONF_KNX_SECURE_DEVICE_AUTHENTICATION,
CONF_KNX_SECURE_USER_PASSWORD,
CONF_KNX_STATE_UPDATER,
DEFAULT_ROUTING_IA,
DOMAIN as KNX_DOMAIN,
)
from homeassistant.core import HomeAssistant
@ -45,10 +45,10 @@ async def test_diagnostics(
) == {
"config_entry_data": {
"connection_type": "automatic",
"individual_address": "15.15.250",
"individual_address": "0.0.240",
"multicast_group": "224.0.23.12",
"multicast_port": 3671,
"rate_limit": 20,
"rate_limit": 0,
"state_updater": True,
},
"configuration_error": None,
@ -77,10 +77,10 @@ async def test_diagnostic_config_error(
) == {
"config_entry_data": {
"connection_type": "automatic",
"individual_address": "15.15.250",
"individual_address": "0.0.240",
"multicast_group": "224.0.23.12",
"multicast_port": 3671,
"rate_limit": 20,
"rate_limit": 0,
"state_updater": True,
},
"configuration_error": "extra keys not allowed @ data['knx']['wrong_key']",
@ -103,7 +103,7 @@ async def test_diagnostic_redact(
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_INDIVIDUAL_ADDRESS: XKNX.DEFAULT_ADDRESS,
CONF_KNX_INDIVIDUAL_ADDRESS: DEFAULT_ROUTING_IA,
CONF_KNX_KNXKEY_PASSWORD: "password",
CONF_KNX_SECURE_USER_PASSWORD: "user_password",
CONF_KNX_SECURE_DEVICE_AUTHENTICATION: "device_authentication",
@ -120,10 +120,10 @@ async def test_diagnostic_redact(
) == {
"config_entry_data": {
"connection_type": "automatic",
"individual_address": "15.15.250",
"individual_address": "0.0.240",
"multicast_group": "224.0.23.12",
"multicast_port": 3671,
"rate_limit": 20,
"rate_limit": 0,
"state_updater": True,
"knxkeys_password": "**REDACTED**",
"user_password": "**REDACTED**",

View file

@ -1,6 +1,5 @@
"""Test KNX init."""
import pytest
from xknx import XKNX
from xknx.io import (
DEFAULT_MCAST_GRP,
DEFAULT_MCAST_PORT,
@ -9,6 +8,7 @@ from xknx.io import (
SecureConfig,
)
from homeassistant.components.knx.config_flow import DEFAULT_ROUTING_IA
from homeassistant.components.knx.const import (
CONF_KNX_AUTOMATIC,
CONF_KNX_CONNECTION_TYPE,
@ -51,7 +51,7 @@ from tests.common import MockConfigEntry
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_INDIVIDUAL_ADDRESS: XKNX.DEFAULT_ADDRESS,
CONF_KNX_INDIVIDUAL_ADDRESS: DEFAULT_ROUTING_IA,
},
ConnectionConfig(threaded=True),
),
@ -63,10 +63,13 @@ from tests.common import MockConfigEntry
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_INDIVIDUAL_ADDRESS: XKNX.DEFAULT_ADDRESS,
CONF_KNX_INDIVIDUAL_ADDRESS: DEFAULT_ROUTING_IA,
},
ConnectionConfig(
connection_type=ConnectionType.ROUTING,
individual_address=DEFAULT_ROUTING_IA,
multicast_group=DEFAULT_MCAST_GRP,
multicast_port=DEFAULT_MCAST_PORT,
local_ip="192.168.1.1",
threaded=True,
),
@ -82,7 +85,7 @@ from tests.common import MockConfigEntry
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_INDIVIDUAL_ADDRESS: XKNX.DEFAULT_ADDRESS,
CONF_KNX_INDIVIDUAL_ADDRESS: DEFAULT_ROUTING_IA,
},
ConnectionConfig(
connection_type=ConnectionType.TUNNELING,
@ -103,7 +106,7 @@ from tests.common import MockConfigEntry
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_INDIVIDUAL_ADDRESS: XKNX.DEFAULT_ADDRESS,
CONF_KNX_INDIVIDUAL_ADDRESS: DEFAULT_ROUTING_IA,
},
ConnectionConfig(
connection_type=ConnectionType.TUNNELING_TCP,
@ -122,7 +125,7 @@ from tests.common import MockConfigEntry
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_INDIVIDUAL_ADDRESS: XKNX.DEFAULT_ADDRESS,
CONF_KNX_INDIVIDUAL_ADDRESS: DEFAULT_ROUTING_IA,
CONF_KNX_KNXKEY_FILENAME: "knx/testcase.knxkeys",
CONF_KNX_KNXKEY_PASSWORD: "password",
},
@ -146,7 +149,7 @@ from tests.common import MockConfigEntry
CONF_KNX_STATE_UPDATER: CONF_KNX_DEFAULT_STATE_UPDATER,
CONF_KNX_MCAST_PORT: DEFAULT_MCAST_PORT,
CONF_KNX_MCAST_GRP: DEFAULT_MCAST_GRP,
CONF_KNX_INDIVIDUAL_ADDRESS: XKNX.DEFAULT_ADDRESS,
CONF_KNX_INDIVIDUAL_ADDRESS: DEFAULT_ROUTING_IA,
CONF_KNX_SECURE_USER_ID: 2,
CONF_KNX_SECURE_USER_PASSWORD: "password",
CONF_KNX_SECURE_DEVICE_AUTHENTICATION: "device_auth",