Code cleanup for LCN integration (#130385)
This commit is contained in:
parent
3f34ddd74f
commit
f3708549f0
2 changed files with 0 additions and 148 deletions
|
@ -9,7 +9,6 @@ import re
|
|||
from typing import cast
|
||||
|
||||
import pypck
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
|
@ -19,17 +18,12 @@ from homeassistant.const import (
|
|||
CONF_DEVICES,
|
||||
CONF_DOMAIN,
|
||||
CONF_ENTITIES,
|
||||
CONF_HOST,
|
||||
CONF_IP_ADDRESS,
|
||||
CONF_LIGHTS,
|
||||
CONF_NAME,
|
||||
CONF_PASSWORD,
|
||||
CONF_PORT,
|
||||
CONF_RESOURCE,
|
||||
CONF_SENSORS,
|
||||
CONF_SOURCE,
|
||||
CONF_SWITCHES,
|
||||
CONF_USERNAME,
|
||||
)
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||
|
@ -37,19 +31,13 @@ from homeassistant.helpers.typing import ConfigType
|
|||
|
||||
from .const import (
|
||||
BINSENSOR_PORTS,
|
||||
CONF_ACKNOWLEDGE,
|
||||
CONF_CLIMATES,
|
||||
CONF_CONNECTIONS,
|
||||
CONF_DIM_MODE,
|
||||
CONF_DOMAIN_DATA,
|
||||
CONF_HARDWARE_SERIAL,
|
||||
CONF_HARDWARE_TYPE,
|
||||
CONF_OUTPUT,
|
||||
CONF_SCENES,
|
||||
CONF_SK_NUM_TRIES,
|
||||
CONF_SOFTWARE_SERIAL,
|
||||
CONNECTION,
|
||||
DEFAULT_NAME,
|
||||
DOMAIN,
|
||||
LED_PORTS,
|
||||
LOGICOP_PORTS,
|
||||
|
@ -146,110 +134,6 @@ def generate_unique_id(
|
|||
return unique_id
|
||||
|
||||
|
||||
def import_lcn_config(lcn_config: ConfigType) -> list[ConfigType]:
|
||||
"""Convert lcn settings from configuration.yaml to config_entries data.
|
||||
|
||||
Create a list of config_entry data structures like:
|
||||
|
||||
"data": {
|
||||
"host": "pchk",
|
||||
"ip_address": "192.168.2.41",
|
||||
"port": 4114,
|
||||
"username": "lcn",
|
||||
"password": "lcn,
|
||||
"sk_num_tries: 0,
|
||||
"dim_mode: "STEPS200",
|
||||
"acknowledge": False,
|
||||
"devices": [
|
||||
{
|
||||
"address": (0, 7, False)
|
||||
"name": "",
|
||||
"hardware_serial": -1,
|
||||
"software_serial": -1,
|
||||
"hardware_type": -1
|
||||
}, ...
|
||||
],
|
||||
"entities": [
|
||||
{
|
||||
"address": (0, 7, False)
|
||||
"name": "Light_Output1",
|
||||
"resource": "output1",
|
||||
"domain": "light",
|
||||
"domain_data": {
|
||||
"output": "OUTPUT1",
|
||||
"dimmable": True,
|
||||
"transition": 5000.0
|
||||
}
|
||||
}, ...
|
||||
]
|
||||
}
|
||||
"""
|
||||
data = {}
|
||||
for connection in lcn_config[CONF_CONNECTIONS]:
|
||||
host = {
|
||||
CONF_HOST: connection[CONF_NAME],
|
||||
CONF_IP_ADDRESS: connection[CONF_HOST],
|
||||
CONF_PORT: connection[CONF_PORT],
|
||||
CONF_USERNAME: connection[CONF_USERNAME],
|
||||
CONF_PASSWORD: connection[CONF_PASSWORD],
|
||||
CONF_SK_NUM_TRIES: connection[CONF_SK_NUM_TRIES],
|
||||
CONF_DIM_MODE: connection[CONF_DIM_MODE],
|
||||
CONF_ACKNOWLEDGE: False,
|
||||
CONF_DEVICES: [],
|
||||
CONF_ENTITIES: [],
|
||||
}
|
||||
data[connection[CONF_NAME]] = host
|
||||
|
||||
for confkey, domain_config in lcn_config.items():
|
||||
if confkey == CONF_CONNECTIONS:
|
||||
continue
|
||||
domain = DOMAIN_LOOKUP[confkey]
|
||||
# loop over entities in configuration.yaml
|
||||
for domain_data in domain_config:
|
||||
# remove name and address from domain_data
|
||||
entity_name = domain_data.pop(CONF_NAME)
|
||||
address, host_name = domain_data.pop(CONF_ADDRESS)
|
||||
|
||||
if host_name is None:
|
||||
host_name = DEFAULT_NAME
|
||||
|
||||
# check if we have a new device config
|
||||
for device_config in data[host_name][CONF_DEVICES]:
|
||||
if address == device_config[CONF_ADDRESS]:
|
||||
break
|
||||
else: # create new device_config
|
||||
device_config = {
|
||||
CONF_ADDRESS: address,
|
||||
CONF_NAME: "",
|
||||
CONF_HARDWARE_SERIAL: -1,
|
||||
CONF_SOFTWARE_SERIAL: -1,
|
||||
CONF_HARDWARE_TYPE: -1,
|
||||
}
|
||||
|
||||
data[host_name][CONF_DEVICES].append(device_config)
|
||||
|
||||
# insert entity config
|
||||
resource = get_resource(domain, domain_data).lower()
|
||||
for entity_config in data[host_name][CONF_ENTITIES]:
|
||||
if (
|
||||
address == entity_config[CONF_ADDRESS]
|
||||
and resource == entity_config[CONF_RESOURCE]
|
||||
and domain == entity_config[CONF_DOMAIN]
|
||||
):
|
||||
break
|
||||
else: # create new entity_config
|
||||
entity_config = {
|
||||
CONF_ADDRESS: address,
|
||||
CONF_NAME: entity_name,
|
||||
CONF_RESOURCE: resource,
|
||||
CONF_DOMAIN: domain,
|
||||
CONF_DOMAIN_DATA: domain_data.copy(),
|
||||
}
|
||||
data[host_name][CONF_ENTITIES].append(entity_config)
|
||||
|
||||
return list(data.values())
|
||||
|
||||
|
||||
def purge_entity_registry(
|
||||
hass: HomeAssistant, entry_id: str, imported_entry_data: ConfigType
|
||||
) -> None:
|
||||
|
@ -436,26 +320,6 @@ def get_device_config(
|
|||
return None
|
||||
|
||||
|
||||
def has_unique_host_names(hosts: list[ConfigType]) -> list[ConfigType]:
|
||||
"""Validate that all connection names are unique.
|
||||
|
||||
Use 'pchk' as default connection_name (or add a numeric suffix if
|
||||
pchk' is already in use.
|
||||
"""
|
||||
suffix = 0
|
||||
for host in hosts:
|
||||
if host.get(CONF_NAME) is None:
|
||||
if suffix == 0:
|
||||
host[CONF_NAME] = DEFAULT_NAME
|
||||
else:
|
||||
host[CONF_NAME] = f"{DEFAULT_NAME}{suffix:d}"
|
||||
suffix += 1
|
||||
|
||||
schema = vol.Schema(vol.Unique())
|
||||
schema([host.get(CONF_NAME) for host in hosts])
|
||||
return hosts
|
||||
|
||||
|
||||
def is_address(value: str) -> tuple[AddressType, str]:
|
||||
"""Validate the given address string.
|
||||
|
||||
|
|
|
@ -63,18 +63,6 @@
|
|||
}
|
||||
},
|
||||
"issues": {
|
||||
"authentication_error": {
|
||||
"title": "Authentication failed.",
|
||||
"description": "Configuring LCN using YAML is being removed but there was an error importing your YAML configuration.\n\nEnsure username and password are correct.\n\nConsider removing the LCN YAML configuration from your configuration.yaml file and continue to [set up the integration]({url}) manually."
|
||||
},
|
||||
"license_error": {
|
||||
"title": "Maximum number of connections was reached.",
|
||||
"description": "Configuring LCN using YAML is being removed but there was an error importing your YAML configuration.\n\nEnsure sufficient PCHK licenses are registered and restart Home Assistant.\n\nConsider removing the LCN YAML configuration from your configuration.yaml file and continue to [set up the integration]({url}) manually."
|
||||
},
|
||||
"connection_refused": {
|
||||
"title": "Unable to connect to PCHK.",
|
||||
"description": "Configuring LCN using YAML is being removed but there was an error importing your YAML configuration.\n\nEnsure the connection (IP and port) to the LCN bus coupler is correct.\n\nConsider removing the LCN YAML configuration from your configuration.yaml file and continue to [set up the integration]({url}) manually."
|
||||
},
|
||||
"deprecated_regulatorlock_sensor": {
|
||||
"title": "Deprecated LCN regulator lock binary sensor",
|
||||
"description": "Your LCN regulator lock binary sensor entity `{entity}` is beeing used in automations or scripts. A regulator lock switch entity is available and should be used going forward.\n\nPlease adjust your automations or scripts to fix this issue."
|
||||
|
|
Loading…
Add table
Reference in a new issue