Remove deprecated entities from OpenTherm Gateway (#99712)

This commit is contained in:
Joost Lekkerkerker 2023-09-06 21:50:48 +02:00 committed by GitHub
parent 533350b94a
commit b0e46f425f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 1 additions and 227 deletions

View File

@ -1,12 +1,10 @@
"""Support for OpenTherm Gateway binary sensors."""
import logging
from pprint import pformat
from homeassistant.components.binary_sensor import ENTITY_ID_FORMAT, BinarySensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_ID
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import async_generate_entity_id
@ -17,7 +15,6 @@ from .const import (
BINARY_SENSOR_INFO,
DATA_GATEWAYS,
DATA_OPENTHERM_GW,
DEPRECATED_BINARY_SENSOR_SOURCE_LOOKUP,
TRANSLATE_SOURCE,
)
@ -31,9 +28,7 @@ async def async_setup_entry(
) -> None:
"""Set up the OpenTherm Gateway binary sensors."""
sensors = []
deprecated_sensors = []
gw_dev = hass.data[DATA_OPENTHERM_GW][DATA_GATEWAYS][config_entry.data[CONF_ID]]
ent_reg = er.async_get(hass)
for var, info in BINARY_SENSOR_INFO.items():
device_class = info[0]
friendly_name_format = info[1]
@ -50,36 +45,6 @@ async def async_setup_entry(
)
)
old_style_entity_id = async_generate_entity_id(
ENTITY_ID_FORMAT, f"{var}_{gw_dev.gw_id}", hass=gw_dev.hass
)
old_ent = ent_reg.async_get(old_style_entity_id)
if old_ent and old_ent.config_entry_id == config_entry.entry_id:
if old_ent.disabled:
ent_reg.async_remove(old_style_entity_id)
else:
deprecated_sensors.append(
DeprecatedOpenThermBinarySensor(
gw_dev,
var,
device_class,
friendly_name_format,
)
)
sensors.extend(deprecated_sensors)
if deprecated_sensors:
_LOGGER.warning(
(
"The following binary_sensor entities are deprecated and may "
"no longer behave as expected. They will be removed in a "
"future version. You can force removal of these entities by "
"disabling them and restarting Home Assistant.\n%s"
),
pformat([s.entity_id for s in deprecated_sensors]),
)
async_add_entities(sensors)
@ -166,26 +131,3 @@ class OpenThermBinarySensor(BinarySensorEntity):
def device_class(self):
"""Return the class of this device."""
return self._device_class
class DeprecatedOpenThermBinarySensor(OpenThermBinarySensor):
"""Represent a deprecated OpenTherm Gateway Binary Sensor."""
# pylint: disable=super-init-not-called
def __init__(self, gw_dev, var, device_class, friendly_name_format):
"""Initialize the binary sensor."""
self.entity_id = async_generate_entity_id(
ENTITY_ID_FORMAT, f"{var}_{gw_dev.gw_id}", hass=gw_dev.hass
)
self._gateway = gw_dev
self._var = var
self._source = DEPRECATED_BINARY_SENSOR_SOURCE_LOOKUP[var]
self._state = None
self._device_class = device_class
self._friendly_name = friendly_name_format.format(gw_dev.name)
self._unsub_updates = None
@property
def unique_id(self):
"""Return a unique ID."""
return f"{self._gateway.gw_id}-{self._var}"

View File

@ -535,106 +535,3 @@ SENSOR_INFO: dict[str, list] = {
[gw_vars.OTGW],
],
}
DEPRECATED_BINARY_SENSOR_SOURCE_LOOKUP = {
gw_vars.DATA_MASTER_CH_ENABLED: gw_vars.THERMOSTAT,
gw_vars.DATA_MASTER_DHW_ENABLED: gw_vars.THERMOSTAT,
gw_vars.DATA_MASTER_OTC_ENABLED: gw_vars.THERMOSTAT,
gw_vars.DATA_MASTER_CH2_ENABLED: gw_vars.THERMOSTAT,
gw_vars.DATA_SLAVE_FAULT_IND: gw_vars.BOILER,
gw_vars.DATA_SLAVE_CH_ACTIVE: gw_vars.BOILER,
gw_vars.DATA_SLAVE_DHW_ACTIVE: gw_vars.BOILER,
gw_vars.DATA_SLAVE_FLAME_ON: gw_vars.BOILER,
gw_vars.DATA_SLAVE_COOLING_ACTIVE: gw_vars.BOILER,
gw_vars.DATA_SLAVE_CH2_ACTIVE: gw_vars.BOILER,
gw_vars.DATA_SLAVE_DIAG_IND: gw_vars.BOILER,
gw_vars.DATA_SLAVE_DHW_PRESENT: gw_vars.BOILER,
gw_vars.DATA_SLAVE_CONTROL_TYPE: gw_vars.BOILER,
gw_vars.DATA_SLAVE_COOLING_SUPPORTED: gw_vars.BOILER,
gw_vars.DATA_SLAVE_DHW_CONFIG: gw_vars.BOILER,
gw_vars.DATA_SLAVE_MASTER_LOW_OFF_PUMP: gw_vars.BOILER,
gw_vars.DATA_SLAVE_CH2_PRESENT: gw_vars.BOILER,
gw_vars.DATA_SLAVE_SERVICE_REQ: gw_vars.BOILER,
gw_vars.DATA_SLAVE_REMOTE_RESET: gw_vars.BOILER,
gw_vars.DATA_SLAVE_LOW_WATER_PRESS: gw_vars.BOILER,
gw_vars.DATA_SLAVE_GAS_FAULT: gw_vars.BOILER,
gw_vars.DATA_SLAVE_AIR_PRESS_FAULT: gw_vars.BOILER,
gw_vars.DATA_SLAVE_WATER_OVERTEMP: gw_vars.BOILER,
gw_vars.DATA_REMOTE_TRANSFER_DHW: gw_vars.BOILER,
gw_vars.DATA_REMOTE_TRANSFER_MAX_CH: gw_vars.BOILER,
gw_vars.DATA_REMOTE_RW_DHW: gw_vars.BOILER,
gw_vars.DATA_REMOTE_RW_MAX_CH: gw_vars.BOILER,
gw_vars.DATA_ROVRD_MAN_PRIO: gw_vars.THERMOSTAT,
gw_vars.DATA_ROVRD_AUTO_PRIO: gw_vars.THERMOSTAT,
gw_vars.OTGW_GPIO_A_STATE: gw_vars.OTGW,
gw_vars.OTGW_GPIO_B_STATE: gw_vars.OTGW,
gw_vars.OTGW_IGNORE_TRANSITIONS: gw_vars.OTGW,
gw_vars.OTGW_OVRD_HB: gw_vars.OTGW,
}
DEPRECATED_SENSOR_SOURCE_LOOKUP = {
gw_vars.DATA_CONTROL_SETPOINT: gw_vars.BOILER,
gw_vars.DATA_MASTER_MEMBERID: gw_vars.THERMOSTAT,
gw_vars.DATA_SLAVE_MEMBERID: gw_vars.BOILER,
gw_vars.DATA_SLAVE_OEM_FAULT: gw_vars.BOILER,
gw_vars.DATA_COOLING_CONTROL: gw_vars.BOILER,
gw_vars.DATA_CONTROL_SETPOINT_2: gw_vars.BOILER,
gw_vars.DATA_ROOM_SETPOINT_OVRD: gw_vars.THERMOSTAT,
gw_vars.DATA_SLAVE_MAX_RELATIVE_MOD: gw_vars.BOILER,
gw_vars.DATA_SLAVE_MAX_CAPACITY: gw_vars.BOILER,
gw_vars.DATA_SLAVE_MIN_MOD_LEVEL: gw_vars.BOILER,
gw_vars.DATA_ROOM_SETPOINT: gw_vars.THERMOSTAT,
gw_vars.DATA_REL_MOD_LEVEL: gw_vars.BOILER,
gw_vars.DATA_CH_WATER_PRESS: gw_vars.BOILER,
gw_vars.DATA_DHW_FLOW_RATE: gw_vars.BOILER,
gw_vars.DATA_ROOM_SETPOINT_2: gw_vars.THERMOSTAT,
gw_vars.DATA_ROOM_TEMP: gw_vars.THERMOSTAT,
gw_vars.DATA_CH_WATER_TEMP: gw_vars.BOILER,
gw_vars.DATA_DHW_TEMP: gw_vars.BOILER,
gw_vars.DATA_OUTSIDE_TEMP: gw_vars.THERMOSTAT,
gw_vars.DATA_RETURN_WATER_TEMP: gw_vars.BOILER,
gw_vars.DATA_SOLAR_STORAGE_TEMP: gw_vars.BOILER,
gw_vars.DATA_SOLAR_COLL_TEMP: gw_vars.BOILER,
gw_vars.DATA_CH_WATER_TEMP_2: gw_vars.BOILER,
gw_vars.DATA_DHW_TEMP_2: gw_vars.BOILER,
gw_vars.DATA_EXHAUST_TEMP: gw_vars.BOILER,
gw_vars.DATA_SLAVE_DHW_MAX_SETP: gw_vars.BOILER,
gw_vars.DATA_SLAVE_DHW_MIN_SETP: gw_vars.BOILER,
gw_vars.DATA_SLAVE_CH_MAX_SETP: gw_vars.BOILER,
gw_vars.DATA_SLAVE_CH_MIN_SETP: gw_vars.BOILER,
gw_vars.DATA_DHW_SETPOINT: gw_vars.BOILER,
gw_vars.DATA_MAX_CH_SETPOINT: gw_vars.BOILER,
gw_vars.DATA_OEM_DIAG: gw_vars.BOILER,
gw_vars.DATA_TOTAL_BURNER_STARTS: gw_vars.BOILER,
gw_vars.DATA_CH_PUMP_STARTS: gw_vars.BOILER,
gw_vars.DATA_DHW_PUMP_STARTS: gw_vars.BOILER,
gw_vars.DATA_DHW_BURNER_STARTS: gw_vars.BOILER,
gw_vars.DATA_TOTAL_BURNER_HOURS: gw_vars.BOILER,
gw_vars.DATA_CH_PUMP_HOURS: gw_vars.BOILER,
gw_vars.DATA_DHW_PUMP_HOURS: gw_vars.BOILER,
gw_vars.DATA_DHW_BURNER_HOURS: gw_vars.BOILER,
gw_vars.DATA_MASTER_OT_VERSION: gw_vars.THERMOSTAT,
gw_vars.DATA_SLAVE_OT_VERSION: gw_vars.BOILER,
gw_vars.DATA_MASTER_PRODUCT_TYPE: gw_vars.THERMOSTAT,
gw_vars.DATA_MASTER_PRODUCT_VERSION: gw_vars.THERMOSTAT,
gw_vars.DATA_SLAVE_PRODUCT_TYPE: gw_vars.BOILER,
gw_vars.DATA_SLAVE_PRODUCT_VERSION: gw_vars.BOILER,
gw_vars.OTGW_MODE: gw_vars.OTGW,
gw_vars.OTGW_DHW_OVRD: gw_vars.OTGW,
gw_vars.OTGW_ABOUT: gw_vars.OTGW,
gw_vars.OTGW_BUILD: gw_vars.OTGW,
gw_vars.OTGW_CLOCKMHZ: gw_vars.OTGW,
gw_vars.OTGW_LED_A: gw_vars.OTGW,
gw_vars.OTGW_LED_B: gw_vars.OTGW,
gw_vars.OTGW_LED_C: gw_vars.OTGW,
gw_vars.OTGW_LED_D: gw_vars.OTGW,
gw_vars.OTGW_LED_E: gw_vars.OTGW,
gw_vars.OTGW_LED_F: gw_vars.OTGW,
gw_vars.OTGW_GPIO_A: gw_vars.OTGW,
gw_vars.OTGW_GPIO_B: gw_vars.OTGW,
gw_vars.OTGW_SB_TEMP: gw_vars.OTGW,
gw_vars.OTGW_SETP_OVRD_MODE: gw_vars.OTGW,
gw_vars.OTGW_SMART_PWR: gw_vars.OTGW,
gw_vars.OTGW_THRM_DETECT: gw_vars.OTGW,
gw_vars.OTGW_VREF: gw_vars.OTGW,
}

View File

@ -1,25 +1,17 @@
"""Support for OpenTherm Gateway sensors."""
import logging
from pprint import pformat
from homeassistant.components.sensor import ENTITY_ID_FORMAT, SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_ID
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import async_generate_entity_id
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from . import DOMAIN
from .const import (
DATA_GATEWAYS,
DATA_OPENTHERM_GW,
DEPRECATED_SENSOR_SOURCE_LOOKUP,
SENSOR_INFO,
TRANSLATE_SOURCE,
)
from .const import DATA_GATEWAYS, DATA_OPENTHERM_GW, SENSOR_INFO, TRANSLATE_SOURCE
_LOGGER = logging.getLogger(__name__)
@ -31,9 +23,7 @@ async def async_setup_entry(
) -> None:
"""Set up the OpenTherm Gateway sensors."""
sensors = []
deprecated_sensors = []
gw_dev = hass.data[DATA_OPENTHERM_GW][DATA_GATEWAYS][config_entry.data[CONF_ID]]
ent_reg = er.async_get(hass)
for var, info in SENSOR_INFO.items():
device_class = info[0]
unit = info[1]
@ -52,37 +42,6 @@ async def async_setup_entry(
)
)
old_style_entity_id = async_generate_entity_id(
ENTITY_ID_FORMAT, f"{var}_{gw_dev.gw_id}", hass=gw_dev.hass
)
old_ent = ent_reg.async_get(old_style_entity_id)
if old_ent and old_ent.config_entry_id == config_entry.entry_id:
if old_ent.disabled:
ent_reg.async_remove(old_style_entity_id)
else:
deprecated_sensors.append(
DeprecatedOpenThermSensor(
gw_dev,
var,
device_class,
unit,
friendly_name_format,
)
)
sensors.extend(deprecated_sensors)
if deprecated_sensors:
_LOGGER.warning(
(
"The following sensor entities are deprecated and may no "
"longer behave as expected. They will be removed in a future "
"version. You can force removal of these entities by disabling "
"them and restarting Home Assistant.\n%s"
),
pformat([s.entity_id for s in deprecated_sensors]),
)
async_add_entities(sensors)
@ -175,27 +134,3 @@ class OpenThermSensor(SensorEntity):
def native_unit_of_measurement(self):
"""Return the unit of measurement."""
return self._unit
class DeprecatedOpenThermSensor(OpenThermSensor):
"""Represent a deprecated OpenTherm Gateway Sensor."""
# pylint: disable=super-init-not-called
def __init__(self, gw_dev, var, device_class, unit, friendly_name_format):
"""Initialize the OpenTherm Gateway sensor."""
self.entity_id = async_generate_entity_id(
ENTITY_ID_FORMAT, f"{var}_{gw_dev.gw_id}", hass=gw_dev.hass
)
self._gateway = gw_dev
self._var = var
self._source = DEPRECATED_SENSOR_SOURCE_LOOKUP[var]
self._value = None
self._device_class = device_class
self._unit = unit
self._friendly_name = friendly_name_format.format(gw_dev.name)
self._unsub_updates = None
@property
def unique_id(self):
"""Return a unique ID."""
return f"{self._gateway.gw_id}-{self._var}"