core/homeassistant/components/myuplink/helpers.py

131 lines
2.9 KiB
Python

"""Helper collection for myuplink."""
from myuplink import DevicePoint
from homeassistant.components.number import NumberEntityDescription
from homeassistant.components.sensor import SensorEntityDescription
from homeassistant.const import Platform
from .const import F_SERIES
def find_matching_platform(
device_point: DevicePoint,
description: SensorEntityDescription | NumberEntityDescription | None = None,
) -> Platform:
"""Find entity platform for a DevicePoint."""
if (
len(device_point.enum_values) == 2
and device_point.enum_values[0]["value"] == "0"
and device_point.enum_values[1]["value"] == "1"
):
if device_point.writable:
return Platform.SWITCH
return Platform.BINARY_SENSOR
if len(device_point.enum_values) > 0 and device_point.writable:
return Platform.SELECT
if (
description
and description.native_unit_of_measurement == "DM"
or (device_point.raw["maxValue"] and device_point.raw["minValue"])
):
if device_point.writable:
return Platform.NUMBER
return Platform.SENSOR
return Platform.SENSOR
WEEKDAYS = (
"monday",
"tuesday",
"wednesday",
"thursday",
"friday",
"saturday",
"sunday",
)
PARAMETER_ID_TO_EXCLUDE_F730 = (
"40940",
"47007",
"47015",
"47020",
"47021",
"47022",
"47023",
"47024",
"47025",
"47026",
"47027",
"47028",
"47032",
"47050",
"47051",
"47206",
"47209",
"47271",
"47272",
"47273",
"47274",
"47375",
"47376",
"47538",
"47539",
"47635",
"47669",
"47703",
"47737",
"47771",
"47772",
"47805",
"47806",
"47839",
"47840",
"47907",
"47941",
"47975",
"48009",
"48072",
"48442",
"49909",
"50113",
)
PARAMETER_ID_TO_INCLUDE_SMO20 = (
"40940",
"47011",
"47015",
"47028",
"47032",
"50004",
)
def skip_entity(model: str, device_point: DevicePoint) -> bool:
"""Check if entity should be skipped for this device model."""
if model == "SMO 20":
if (
len(device_point.smart_home_categories) > 0
or device_point.parameter_id in PARAMETER_ID_TO_INCLUDE_SMO20
):
return False
return True
if model.lower().startswith("f"):
# Entity names containing weekdays are used for advanced scheduling in the
# heat pump and should not be exposed in the integration
if any(d in device_point.parameter_name.lower() for d in WEEKDAYS):
return True
if device_point.parameter_id in PARAMETER_ID_TO_EXCLUDE_F730:
return True
return False
def transform_model_series(prefix: str) -> str:
"""Remap all F-series models."""
if prefix.lower().startswith("f"):
return F_SERIES
return prefix