Migrate VeSync to has entity name (#96772)

* Migrate VeSync to has entity name

* Fix tests
This commit is contained in:
Joost Lekkerkerker 2023-07-17 17:52:53 +02:00 committed by GitHub
parent 560e0cc7e0
commit e99b6b2a03
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 123 additions and 97 deletions

View File

@ -51,11 +51,12 @@ async def async_process_devices(hass, manager):
class VeSyncBaseEntity(Entity): class VeSyncBaseEntity(Entity):
"""Base class for VeSync Entity Representations.""" """Base class for VeSync Entity Representations."""
_attr_has_entity_name = True
def __init__(self, device: VeSyncBaseDevice) -> None: def __init__(self, device: VeSyncBaseDevice) -> None:
"""Initialize the VeSync device.""" """Initialize the VeSync device."""
self.device = device self.device = device
self._attr_unique_id = self.base_unique_id self._attr_unique_id = self.base_unique_id
self._attr_name = self.base_name
@property @property
def base_unique_id(self): def base_unique_id(self):
@ -67,12 +68,6 @@ class VeSyncBaseEntity(Entity):
return f"{self.device.cid}{str(self.device.sub_device_no)}" return f"{self.device.cid}{str(self.device.sub_device_no)}"
return self.device.cid return self.device.cid
@property
def base_name(self) -> str:
"""Return the name of the device."""
# Same story here as `base_unique_id` above
return self.device.device_name
@property @property
def available(self) -> bool: def available(self) -> bool:
"""Return True if device is available.""" """Return True if device is available."""
@ -83,7 +78,7 @@ class VeSyncBaseEntity(Entity):
"""Return device information.""" """Return device information."""
return DeviceInfo( return DeviceInfo(
identifiers={(DOMAIN, self.base_unique_id)}, identifiers={(DOMAIN, self.base_unique_id)},
name=self.base_name, name=self.device.device_name,
model=self.device.device_type, model=self.device.device_type,
manufacturer="VeSync", manufacturer="VeSync",
sw_version=self.device.current_firm_version, sw_version=self.device.current_firm_version,

View File

@ -87,6 +87,7 @@ class VeSyncFanHA(VeSyncDevice, FanEntity):
"""Representation of a VeSync fan.""" """Representation of a VeSync fan."""
_attr_supported_features = FanEntityFeature.SET_SPEED _attr_supported_features = FanEntityFeature.SET_SPEED
_attr_name = None
def __init__(self, fan): def __init__(self, fan):
"""Initialize the VeSync fan device.""" """Initialize the VeSync fan device."""

View File

@ -66,6 +66,8 @@ def _setup_entities(devices, async_add_entities):
class VeSyncBaseLight(VeSyncDevice, LightEntity): class VeSyncBaseLight(VeSyncDevice, LightEntity):
"""Base class for VeSync Light Devices Representations.""" """Base class for VeSync Light Devices Representations."""
_attr_name = None
@property @property
def brightness(self) -> int: def brightness(self) -> int:
"""Get light brightness.""" """Get light brightness."""

View File

@ -79,7 +79,7 @@ PM25_SUPPORTED = ["Core300S", "Core400S", "Core600S"]
SENSORS: tuple[VeSyncSensorEntityDescription, ...] = ( SENSORS: tuple[VeSyncSensorEntityDescription, ...] = (
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="filter-life", key="filter-life",
name="Filter Life", translation_key="filter_life",
native_unit_of_measurement=PERCENTAGE, native_unit_of_measurement=PERCENTAGE,
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
entity_category=EntityCategory.DIAGNOSTIC, entity_category=EntityCategory.DIAGNOSTIC,
@ -88,13 +88,12 @@ SENSORS: tuple[VeSyncSensorEntityDescription, ...] = (
), ),
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="air-quality", key="air-quality",
name="Air Quality", translation_key="air_quality",
value_fn=lambda device: device.details["air_quality"], value_fn=lambda device: device.details["air_quality"],
exists_fn=lambda device: sku_supported(device, AIR_QUALITY_SUPPORTED), exists_fn=lambda device: sku_supported(device, AIR_QUALITY_SUPPORTED),
), ),
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="pm25", key="pm25",
name="PM2.5",
device_class=SensorDeviceClass.PM25, device_class=SensorDeviceClass.PM25,
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
@ -103,7 +102,7 @@ SENSORS: tuple[VeSyncSensorEntityDescription, ...] = (
), ),
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="power", key="power",
name="current power", translation_key="current_power",
device_class=SensorDeviceClass.POWER, device_class=SensorDeviceClass.POWER,
native_unit_of_measurement=UnitOfPower.WATT, native_unit_of_measurement=UnitOfPower.WATT,
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
@ -113,7 +112,7 @@ SENSORS: tuple[VeSyncSensorEntityDescription, ...] = (
), ),
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="energy", key="energy",
name="energy use today", translation_key="energy_today",
device_class=SensorDeviceClass.ENERGY, device_class=SensorDeviceClass.ENERGY,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
state_class=SensorStateClass.TOTAL_INCREASING, state_class=SensorStateClass.TOTAL_INCREASING,
@ -123,7 +122,7 @@ SENSORS: tuple[VeSyncSensorEntityDescription, ...] = (
), ),
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="energy-weekly", key="energy-weekly",
name="energy use weekly", translation_key="energy_week",
device_class=SensorDeviceClass.ENERGY, device_class=SensorDeviceClass.ENERGY,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
state_class=SensorStateClass.TOTAL_INCREASING, state_class=SensorStateClass.TOTAL_INCREASING,
@ -133,7 +132,7 @@ SENSORS: tuple[VeSyncSensorEntityDescription, ...] = (
), ),
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="energy-monthly", key="energy-monthly",
name="energy use monthly", translation_key="energy_month",
device_class=SensorDeviceClass.ENERGY, device_class=SensorDeviceClass.ENERGY,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
state_class=SensorStateClass.TOTAL_INCREASING, state_class=SensorStateClass.TOTAL_INCREASING,
@ -143,7 +142,7 @@ SENSORS: tuple[VeSyncSensorEntityDescription, ...] = (
), ),
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="energy-yearly", key="energy-yearly",
name="energy use yearly", translation_key="energy_year",
device_class=SensorDeviceClass.ENERGY, device_class=SensorDeviceClass.ENERGY,
native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR, native_unit_of_measurement=UnitOfEnergy.KILO_WATT_HOUR,
state_class=SensorStateClass.TOTAL_INCREASING, state_class=SensorStateClass.TOTAL_INCREASING,
@ -153,7 +152,7 @@ SENSORS: tuple[VeSyncSensorEntityDescription, ...] = (
), ),
VeSyncSensorEntityDescription( VeSyncSensorEntityDescription(
key="voltage", key="voltage",
name="current voltage", translation_key="current_voltage",
device_class=SensorDeviceClass.VOLTAGE, device_class=SensorDeviceClass.VOLTAGE,
native_unit_of_measurement=UnitOfElectricPotential.VOLT, native_unit_of_measurement=UnitOfElectricPotential.VOLT,
state_class=SensorStateClass.MEASUREMENT, state_class=SensorStateClass.MEASUREMENT,
@ -207,7 +206,6 @@ class VeSyncSensorEntity(VeSyncBaseEntity, SensorEntity):
"""Initialize the VeSync outlet device.""" """Initialize the VeSync outlet device."""
super().__init__(device) super().__init__(device)
self.entity_description = description self.entity_description = description
self._attr_name = f"{super().name} {description.name}"
self._attr_unique_id = f"{super().unique_id}-{description.key}" self._attr_unique_id = f"{super().unique_id}-{description.key}"
@property @property

View File

@ -16,6 +16,34 @@
"single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]" "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]"
} }
}, },
"entity": {
"sensor": {
"filter_life": {
"name": "Filter life"
},
"air_quality": {
"name": "Air quality"
},
"current_power": {
"name": "Current power"
},
"energy_today": {
"name": "Energy use today"
},
"energy_week": {
"name": "Energy use weekly"
},
"energy_month": {
"name": "Energy use monthly"
},
"energy_year": {
"name": "Energy use yearly"
},
"current_voltage": {
"name": "Current voltage"
}
}
},
"services": { "services": {
"update_devices": { "update_devices": {
"name": "Update devices", "name": "Update devices",

View File

@ -54,6 +54,8 @@ def _setup_entities(devices, async_add_entities):
class VeSyncBaseSwitch(VeSyncDevice, SwitchEntity): class VeSyncBaseSwitch(VeSyncDevice, SwitchEntity):
"""Base class for VeSync switch Device Representations.""" """Base class for VeSync switch Device Representations."""
_attr_name = None
def turn_on(self, **kwargs: Any) -> None: def turn_on(self, **kwargs: Any) -> None:
"""Turn the device on.""" """Turn the device on."""
self.device.turn_on() self.device.turn_on()

View File

@ -192,7 +192,7 @@
'name': None, 'name': None,
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Fan', 'original_name': None,
'state': dict({ 'state': dict({
'attributes': dict({ 'attributes': dict({
'friendly_name': 'Fan', 'friendly_name': 'Fan',
@ -220,10 +220,10 @@
'name': None, 'name': None,
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Fan Air Quality', 'original_name': 'Air quality',
'state': dict({ 'state': dict({
'attributes': dict({ 'attributes': dict({
'friendly_name': 'Fan Air Quality', 'friendly_name': 'Fan Air quality',
}), }),
'entity_id': 'sensor.fan_air_quality', 'entity_id': 'sensor.fan_air_quality',
'last_changed': str, 'last_changed': str,
@ -243,10 +243,10 @@
'name': None, 'name': None,
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Fan Filter Life', 'original_name': 'Filter life',
'state': dict({ 'state': dict({
'attributes': dict({ 'attributes': dict({
'friendly_name': 'Fan Filter Life', 'friendly_name': 'Fan Filter life',
'state_class': 'measurement', 'state_class': 'measurement',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),

View File

@ -47,7 +47,7 @@
'domain': 'fan', 'domain': 'fan',
'entity_category': None, 'entity_category': None,
'entity_id': 'fan.air_purifier_131s', 'entity_id': 'fan.air_purifier_131s',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -56,7 +56,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 131s', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': <FanEntityFeature: 1>, 'supported_features': <FanEntityFeature: 1>,
'translation_key': None, 'translation_key': None,
@ -129,7 +129,7 @@
'domain': 'fan', 'domain': 'fan',
'entity_category': None, 'entity_category': None,
'entity_id': 'fan.air_purifier_200s', 'entity_id': 'fan.air_purifier_200s',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -138,7 +138,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 200s', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': <FanEntityFeature: 1>, 'supported_features': <FanEntityFeature: 1>,
'translation_key': None, 'translation_key': None,
@ -218,7 +218,7 @@
'domain': 'fan', 'domain': 'fan',
'entity_category': None, 'entity_category': None,
'entity_id': 'fan.air_purifier_400s', 'entity_id': 'fan.air_purifier_400s',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -227,7 +227,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 400s', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': <FanEntityFeature: 1>, 'supported_features': <FanEntityFeature: 1>,
'translation_key': None, 'translation_key': None,
@ -308,7 +308,7 @@
'domain': 'fan', 'domain': 'fan',
'entity_category': None, 'entity_category': None,
'entity_id': 'fan.air_purifier_600s', 'entity_id': 'fan.air_purifier_600s',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -317,7 +317,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 600s', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': <FanEntityFeature: 1>, 'supported_features': <FanEntityFeature: 1>,
'translation_key': None, 'translation_key': None,

View File

@ -178,7 +178,7 @@
'domain': 'light', 'domain': 'light',
'entity_category': None, 'entity_category': None,
'entity_id': 'light.dimmable_light', 'entity_id': 'light.dimmable_light',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -187,7 +187,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Dimmable Light', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': None,
@ -259,7 +259,7 @@
'domain': 'light', 'domain': 'light',
'entity_category': None, 'entity_category': None,
'entity_id': 'light.dimmer_switch', 'entity_id': 'light.dimmer_switch',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -268,7 +268,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Dimmer Switch', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': None,
@ -395,7 +395,7 @@
'domain': 'light', 'domain': 'light',
'entity_category': None, 'entity_category': None,
'entity_id': 'light.temperature_light', 'entity_id': 'light.temperature_light',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -404,7 +404,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Temperature Light', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': None,

View File

@ -44,7 +44,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>, 'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.air_purifier_131s_filter_life', 'entity_id': 'sensor.air_purifier_131s_filter_life',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -53,10 +53,10 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 131s Filter Life', 'original_name': 'Filter life',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'filter_life',
'unique_id': 'air-purifier-filter-life', 'unique_id': 'air-purifier-filter-life',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),
@ -72,7 +72,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.air_purifier_131s_air_quality', 'entity_id': 'sensor.air_purifier_131s_air_quality',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -81,10 +81,10 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 131s Air Quality', 'original_name': 'Air quality',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'air_quality',
'unique_id': 'air-purifier-air-quality', 'unique_id': 'air-purifier-air-quality',
'unit_of_measurement': None, 'unit_of_measurement': None,
}), }),
@ -93,7 +93,7 @@
# name: test_sensor_state[Air Purifier 131s][sensor.air_purifier_131s_air_quality] # name: test_sensor_state[Air Purifier 131s][sensor.air_purifier_131s_air_quality]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'friendly_name': 'Air Purifier 131s Air Quality', 'friendly_name': 'Air Purifier 131s Air quality',
}), }),
'context': <ANY>, 'context': <ANY>,
'entity_id': 'sensor.air_purifier_131s_air_quality', 'entity_id': 'sensor.air_purifier_131s_air_quality',
@ -105,7 +105,7 @@
# name: test_sensor_state[Air Purifier 131s][sensor.air_purifier_131s_filter_life] # name: test_sensor_state[Air Purifier 131s][sensor.air_purifier_131s_filter_life]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'friendly_name': 'Air Purifier 131s Filter Life', 'friendly_name': 'Air Purifier 131s Filter life',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>, 'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),
@ -161,7 +161,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>, 'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.air_purifier_200s_filter_life', 'entity_id': 'sensor.air_purifier_200s_filter_life',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -170,10 +170,10 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 200s Filter Life', 'original_name': 'Filter life',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'filter_life',
'unique_id': 'asd_sdfKIHG7IJHGwJGJ7GJ_ag5h3G55-filter-life', 'unique_id': 'asd_sdfKIHG7IJHGwJGJ7GJ_ag5h3G55-filter-life',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),
@ -182,7 +182,7 @@
# name: test_sensor_state[Air Purifier 200s][sensor.air_purifier_200s_filter_life] # name: test_sensor_state[Air Purifier 200s][sensor.air_purifier_200s_filter_life]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'friendly_name': 'Air Purifier 200s Filter Life', 'friendly_name': 'Air Purifier 200s Filter life',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>, 'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),
@ -238,7 +238,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>, 'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.air_purifier_400s_filter_life', 'entity_id': 'sensor.air_purifier_400s_filter_life',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -247,10 +247,10 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 400s Filter Life', 'original_name': 'Filter life',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'filter_life',
'unique_id': '400s-purifier-filter-life', 'unique_id': '400s-purifier-filter-life',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),
@ -266,7 +266,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.air_purifier_400s_air_quality', 'entity_id': 'sensor.air_purifier_400s_air_quality',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -275,10 +275,10 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 400s Air Quality', 'original_name': 'Air quality',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'air_quality',
'unique_id': '400s-purifier-air-quality', 'unique_id': '400s-purifier-air-quality',
'unit_of_measurement': None, 'unit_of_measurement': None,
}), }),
@ -296,7 +296,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.air_purifier_400s_pm2_5', 'entity_id': 'sensor.air_purifier_400s_pm2_5',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -305,7 +305,7 @@
}), }),
'original_device_class': <SensorDeviceClass.PM25: 'pm25'>, 'original_device_class': <SensorDeviceClass.PM25: 'pm25'>,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 400s PM2.5', 'original_name': 'PM2.5',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': None,
@ -317,7 +317,7 @@
# name: test_sensor_state[Air Purifier 400s][sensor.air_purifier_400s_air_quality] # name: test_sensor_state[Air Purifier 400s][sensor.air_purifier_400s_air_quality]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'friendly_name': 'Air Purifier 400s Air Quality', 'friendly_name': 'Air Purifier 400s Air quality',
}), }),
'context': <ANY>, 'context': <ANY>,
'entity_id': 'sensor.air_purifier_400s_air_quality', 'entity_id': 'sensor.air_purifier_400s_air_quality',
@ -329,7 +329,7 @@
# name: test_sensor_state[Air Purifier 400s][sensor.air_purifier_400s_filter_life] # name: test_sensor_state[Air Purifier 400s][sensor.air_purifier_400s_filter_life]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'friendly_name': 'Air Purifier 400s Filter Life', 'friendly_name': 'Air Purifier 400s Filter life',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>, 'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),
@ -400,7 +400,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>, 'entity_category': <EntityCategory.DIAGNOSTIC: 'diagnostic'>,
'entity_id': 'sensor.air_purifier_600s_filter_life', 'entity_id': 'sensor.air_purifier_600s_filter_life',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -409,10 +409,10 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 600s Filter Life', 'original_name': 'Filter life',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'filter_life',
'unique_id': '600s-purifier-filter-life', 'unique_id': '600s-purifier-filter-life',
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),
@ -428,7 +428,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.air_purifier_600s_air_quality', 'entity_id': 'sensor.air_purifier_600s_air_quality',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -437,10 +437,10 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 600s Air Quality', 'original_name': 'Air quality',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'air_quality',
'unique_id': '600s-purifier-air-quality', 'unique_id': '600s-purifier-air-quality',
'unit_of_measurement': None, 'unit_of_measurement': None,
}), }),
@ -458,7 +458,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.air_purifier_600s_pm2_5', 'entity_id': 'sensor.air_purifier_600s_pm2_5',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -467,7 +467,7 @@
}), }),
'original_device_class': <SensorDeviceClass.PM25: 'pm25'>, 'original_device_class': <SensorDeviceClass.PM25: 'pm25'>,
'original_icon': None, 'original_icon': None,
'original_name': 'Air Purifier 600s PM2.5', 'original_name': 'PM2.5',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': None,
@ -479,7 +479,7 @@
# name: test_sensor_state[Air Purifier 600s][sensor.air_purifier_600s_air_quality] # name: test_sensor_state[Air Purifier 600s][sensor.air_purifier_600s_air_quality]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'friendly_name': 'Air Purifier 600s Air Quality', 'friendly_name': 'Air Purifier 600s Air quality',
}), }),
'context': <ANY>, 'context': <ANY>,
'entity_id': 'sensor.air_purifier_600s_air_quality', 'entity_id': 'sensor.air_purifier_600s_air_quality',
@ -491,7 +491,7 @@
# name: test_sensor_state[Air Purifier 600s][sensor.air_purifier_600s_filter_life] # name: test_sensor_state[Air Purifier 600s][sensor.air_purifier_600s_filter_life]
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'friendly_name': 'Air Purifier 600s Filter Life', 'friendly_name': 'Air Purifier 600s Filter life',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>, 'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': '%', 'unit_of_measurement': '%',
}), }),
@ -644,7 +644,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.outlet_current_power', 'entity_id': 'sensor.outlet_current_power',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -653,10 +653,10 @@
}), }),
'original_device_class': <SensorDeviceClass.POWER: 'power'>, 'original_device_class': <SensorDeviceClass.POWER: 'power'>,
'original_icon': None, 'original_icon': None,
'original_name': 'Outlet current power', 'original_name': 'Current power',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'current_power',
'unique_id': 'outlet-power', 'unique_id': 'outlet-power',
'unit_of_measurement': <UnitOfPower.WATT: 'W'>, 'unit_of_measurement': <UnitOfPower.WATT: 'W'>,
}), }),
@ -674,7 +674,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.outlet_energy_use_today', 'entity_id': 'sensor.outlet_energy_use_today',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -683,10 +683,10 @@
}), }),
'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>, 'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>,
'original_icon': None, 'original_icon': None,
'original_name': 'Outlet energy use today', 'original_name': 'Energy use today',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'energy_today',
'unique_id': 'outlet-energy', 'unique_id': 'outlet-energy',
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}), }),
@ -704,7 +704,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.outlet_energy_use_weekly', 'entity_id': 'sensor.outlet_energy_use_weekly',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -713,10 +713,10 @@
}), }),
'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>, 'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>,
'original_icon': None, 'original_icon': None,
'original_name': 'Outlet energy use weekly', 'original_name': 'Energy use weekly',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'energy_week',
'unique_id': 'outlet-energy-weekly', 'unique_id': 'outlet-energy-weekly',
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}), }),
@ -734,7 +734,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.outlet_energy_use_monthly', 'entity_id': 'sensor.outlet_energy_use_monthly',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -743,10 +743,10 @@
}), }),
'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>, 'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>,
'original_icon': None, 'original_icon': None,
'original_name': 'Outlet energy use monthly', 'original_name': 'Energy use monthly',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'energy_month',
'unique_id': 'outlet-energy-monthly', 'unique_id': 'outlet-energy-monthly',
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}), }),
@ -764,7 +764,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.outlet_energy_use_yearly', 'entity_id': 'sensor.outlet_energy_use_yearly',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -773,10 +773,10 @@
}), }),
'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>, 'original_device_class': <SensorDeviceClass.ENERGY: 'energy'>,
'original_icon': None, 'original_icon': None,
'original_name': 'Outlet energy use yearly', 'original_name': 'Energy use yearly',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'energy_year',
'unique_id': 'outlet-energy-yearly', 'unique_id': 'outlet-energy-yearly',
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}), }),
@ -794,7 +794,7 @@
'domain': 'sensor', 'domain': 'sensor',
'entity_category': None, 'entity_category': None,
'entity_id': 'sensor.outlet_current_voltage', 'entity_id': 'sensor.outlet_current_voltage',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -803,10 +803,10 @@
}), }),
'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>, 'original_device_class': <SensorDeviceClass.VOLTAGE: 'voltage'>,
'original_icon': None, 'original_icon': None,
'original_name': 'Outlet current voltage', 'original_name': 'Current voltage',
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': 'current_voltage',
'unique_id': 'outlet-voltage', 'unique_id': 'outlet-voltage',
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>, 'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}), }),
@ -816,7 +816,7 @@
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'power', 'device_class': 'power',
'friendly_name': 'Outlet current power', 'friendly_name': 'Outlet Current power',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>, 'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfPower.WATT: 'W'>, 'unit_of_measurement': <UnitOfPower.WATT: 'W'>,
}), }),
@ -831,7 +831,7 @@
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'voltage', 'device_class': 'voltage',
'friendly_name': 'Outlet current voltage', 'friendly_name': 'Outlet Current voltage',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>, 'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>, 'unit_of_measurement': <UnitOfElectricPotential.VOLT: 'V'>,
}), }),
@ -846,7 +846,7 @@
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'energy', 'device_class': 'energy',
'friendly_name': 'Outlet energy use monthly', 'friendly_name': 'Outlet Energy use monthly',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>, 'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}), }),
@ -861,7 +861,7 @@
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'energy', 'device_class': 'energy',
'friendly_name': 'Outlet energy use today', 'friendly_name': 'Outlet Energy use today',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>, 'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}), }),
@ -876,7 +876,7 @@
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'energy', 'device_class': 'energy',
'friendly_name': 'Outlet energy use weekly', 'friendly_name': 'Outlet Energy use weekly',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>, 'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}), }),
@ -891,7 +891,7 @@
StateSnapshot({ StateSnapshot({
'attributes': ReadOnlyDict({ 'attributes': ReadOnlyDict({
'device_class': 'energy', 'device_class': 'energy',
'friendly_name': 'Outlet energy use yearly', 'friendly_name': 'Outlet Energy use yearly',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>, 'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>, 'unit_of_measurement': <UnitOfEnergy.KILO_WATT_HOUR: 'kWh'>,
}), }),

View File

@ -256,7 +256,7 @@
'domain': 'switch', 'domain': 'switch',
'entity_category': None, 'entity_category': None,
'entity_id': 'switch.outlet', 'entity_id': 'switch.outlet',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -265,7 +265,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Outlet', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': None,
@ -362,7 +362,7 @@
'domain': 'switch', 'domain': 'switch',
'entity_category': None, 'entity_category': None,
'entity_id': 'switch.wall_switch', 'entity_id': 'switch.wall_switch',
'has_entity_name': False, 'has_entity_name': True,
'hidden_by': None, 'hidden_by': None,
'icon': None, 'icon': None,
'id': <ANY>, 'id': <ANY>,
@ -371,7 +371,7 @@
}), }),
'original_device_class': None, 'original_device_class': None,
'original_icon': None, 'original_icon': None,
'original_name': 'Wall Switch', 'original_name': None,
'platform': 'vesync', 'platform': 'vesync',
'supported_features': 0, 'supported_features': 0,
'translation_key': None, 'translation_key': None,