mirror of
https://github.com/micahqcade/custom_vesync.git
synced 2025-02-11 09:39:00 +01:00
Fix/160 core 300 s automation broken (#163)
* only accept numbers for AQI sensor * fix syntax error and update style. * add an air quality value sensor * add empty unit of measurement. * fix validate
This commit is contained in:
parent
9c7a779a9d
commit
b54a839187
13
.github/workflows/validate.yml
vendored
13
.github/workflows/validate.yml
vendored
@ -1,6 +1,7 @@
|
|||||||
name: Validate
|
name: Validate with hassfest
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
push:
|
||||||
pull_request:
|
pull_request:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: "0 0 * * *"
|
- cron: "0 0 * * *"
|
||||||
@ -9,11 +10,5 @@ jobs:
|
|||||||
validate:
|
validate:
|
||||||
runs-on: "ubuntu-latest"
|
runs-on: "ubuntu-latest"
|
||||||
steps:
|
steps:
|
||||||
- uses: "actions/checkout@v3.6.0"
|
- uses: "actions/checkout@v3"
|
||||||
- name: HACS validation
|
- uses: home-assistant/actions/hassfest@master
|
||||||
uses: "hacs/action@22.5.0"
|
|
||||||
with:
|
|
||||||
ignore: "brands"
|
|
||||||
category: "integration"
|
|
||||||
comment: false
|
|
||||||
|
|
@ -60,6 +60,8 @@ def _setup_entities(devices, async_add_entities, coordinator):
|
|||||||
entities.append(VeSyncHumiditySensor(dev, coordinator))
|
entities.append(VeSyncHumiditySensor(dev, coordinator))
|
||||||
if has_feature(dev, "details", "air_quality"):
|
if has_feature(dev, "details", "air_quality"):
|
||||||
entities.append(VeSyncAirQualitySensor(dev, coordinator))
|
entities.append(VeSyncAirQualitySensor(dev, coordinator))
|
||||||
|
if has_feature(dev, "details", "air_quality_value"):
|
||||||
|
entities.append(VeSyncAirQualityValueSensor(dev, coordinator))
|
||||||
if has_feature(dev, "details", "filter_life"):
|
if has_feature(dev, "details", "filter_life"):
|
||||||
entities.append(VeSyncFilterLifeSensor(dev, coordinator))
|
entities.append(VeSyncFilterLifeSensor(dev, coordinator))
|
||||||
|
|
||||||
@ -185,11 +187,19 @@ class VeSyncAirQualitySensor(VeSyncHumidifierSensorEntity):
|
|||||||
"""Representation of an air quality sensor."""
|
"""Representation of an air quality sensor."""
|
||||||
|
|
||||||
_attr_state_class = SensorStateClass.MEASUREMENT
|
_attr_state_class = SensorStateClass.MEASUREMENT
|
||||||
_attr_device_class = SensorDeviceClass.AQI
|
_attr_native_unit_of_measurement = " "
|
||||||
|
|
||||||
def __init__(self, plug, coordinator):
|
def __init__(self, device, coordinator):
|
||||||
"""Initialize the VeSync outlet device."""
|
"""Initialize the VeSync device."""
|
||||||
super().__init__(plug, coordinator)
|
super().__init__(device, coordinator)
|
||||||
|
self._numeric_quality = None
|
||||||
|
if self.native_value is not None:
|
||||||
|
self._numeric_quality = isinstance(self.native_value, (int, float))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_class(self):
|
||||||
|
"""Return the air quality device class."""
|
||||||
|
return SensorDeviceClass.AQI if self._numeric_quality else None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def unique_id(self):
|
def unique_id(self):
|
||||||
@ -204,12 +214,54 @@ class VeSyncAirQualitySensor(VeSyncHumidifierSensorEntity):
|
|||||||
@property
|
@property
|
||||||
def native_value(self):
|
def native_value(self):
|
||||||
"""Return the air quality index."""
|
"""Return the air quality index."""
|
||||||
quality = None
|
if has_feature(self.smarthumidifier, "details", "air_quality"):
|
||||||
if has_feature(self.smarthumidifier, "details", "air_quality_value"):
|
|
||||||
quality = self.smarthumidifier.details["air_quality_value"]
|
|
||||||
elif has_feature(self.smarthumidifier, "details", "air_quality"):
|
|
||||||
quality = self.smarthumidifier.details["air_quality"]
|
quality = self.smarthumidifier.details["air_quality"]
|
||||||
return quality.capitalize() if isinstance(quality, str) else quality
|
if isinstance(quality, (int, float)):
|
||||||
|
return quality
|
||||||
|
_LOGGER.warn(
|
||||||
|
"Got non numeric value for AQI sensor from 'air_quality' for %s: %s",
|
||||||
|
self.name,
|
||||||
|
quality,
|
||||||
|
)
|
||||||
|
_LOGGER.warn("No air quality index found in '%s'", self.name)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
class VeSyncAirQualityValueSensor(VeSyncHumidifierSensorEntity):
|
||||||
|
"""Representation of an air quality sensor."""
|
||||||
|
|
||||||
|
_attr_state_class = SensorStateClass.MEASUREMENT
|
||||||
|
_attr_device_class = SensorDeviceClass.AQI
|
||||||
|
_attr_native_unit_of_measurement = " "
|
||||||
|
|
||||||
|
def __init__(self, device, coordinator):
|
||||||
|
"""Initialize the VeSync device."""
|
||||||
|
super().__init__(device, coordinator)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unique_id(self):
|
||||||
|
"""Return unique ID for air quality sensor on device."""
|
||||||
|
return f"{super().unique_id}-air-quality-value"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
"""Return sensor name."""
|
||||||
|
return f"{super().name} air quality value"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def native_value(self):
|
||||||
|
"""Return the air quality index."""
|
||||||
|
if has_feature(self.smarthumidifier, "details", "air_quality_value"):
|
||||||
|
quality_value = self.smarthumidifier.details["air_quality_value"]
|
||||||
|
if isinstance(quality_value, (int, float)):
|
||||||
|
return quality_value
|
||||||
|
_LOGGER.warn(
|
||||||
|
"Got non numeric value for AQI sensor from 'air_quality_value' for %s: %s",
|
||||||
|
self.name,
|
||||||
|
quality_value,
|
||||||
|
)
|
||||||
|
_LOGGER.warn("No air quality value found in '%s'", self.name)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class VeSyncFilterLifeSensor(VeSyncHumidifierSensorEntity):
|
class VeSyncFilterLifeSensor(VeSyncHumidifierSensorEntity):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user