Add device class to canary sensors (#40050)
* add device class to canary sensors * Update test_sensor.py * Update sensor.py * Update sensor.py
This commit is contained in:
parent
9acceda0f8
commit
056e712667
2 changed files with 39 additions and 17 deletions
|
@ -1,9 +1,15 @@
|
||||||
"""Support for Canary sensors."""
|
"""Support for Canary sensors."""
|
||||||
from canary.api import SensorType
|
from canary.api import SensorType
|
||||||
|
|
||||||
from homeassistant.const import PERCENTAGE, TEMP_CELSIUS
|
from homeassistant.const import (
|
||||||
|
DEVICE_CLASS_BATTERY,
|
||||||
|
DEVICE_CLASS_HUMIDITY,
|
||||||
|
DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||||
|
DEVICE_CLASS_TEMPERATURE,
|
||||||
|
PERCENTAGE,
|
||||||
|
TEMP_CELSIUS,
|
||||||
|
)
|
||||||
from homeassistant.helpers.entity import Entity
|
from homeassistant.helpers.entity import Entity
|
||||||
from homeassistant.helpers.icon import icon_for_battery_level
|
|
||||||
|
|
||||||
from . import DATA_CANARY
|
from . import DATA_CANARY
|
||||||
|
|
||||||
|
@ -18,13 +24,13 @@ CANARY_PRO = "Canary Pro"
|
||||||
CANARY_FLEX = "Canary Flex"
|
CANARY_FLEX = "Canary Flex"
|
||||||
|
|
||||||
# Sensor types are defined like so:
|
# Sensor types are defined like so:
|
||||||
# sensor type name, unit_of_measurement, icon
|
# sensor type name, unit_of_measurement, icon, device class, products supported
|
||||||
SENSOR_TYPES = [
|
SENSOR_TYPES = [
|
||||||
["temperature", TEMP_CELSIUS, "mdi:thermometer", [CANARY_PRO]],
|
["temperature", TEMP_CELSIUS, None, DEVICE_CLASS_TEMPERATURE, [CANARY_PRO]],
|
||||||
["humidity", PERCENTAGE, "mdi:water-percent", [CANARY_PRO]],
|
["humidity", PERCENTAGE, None, DEVICE_CLASS_HUMIDITY, [CANARY_PRO]],
|
||||||
["air_quality", None, "mdi:weather-windy", [CANARY_PRO]],
|
["air_quality", None, "mdi:weather-windy", None, [CANARY_PRO]],
|
||||||
["wifi", "dBm", "mdi:wifi", [CANARY_FLEX]],
|
["wifi", "dBm", None, DEVICE_CLASS_SIGNAL_STRENGTH, [CANARY_FLEX]],
|
||||||
["battery", PERCENTAGE, "mdi:battery-50", [CANARY_FLEX]],
|
["battery", PERCENTAGE, None, DEVICE_CLASS_BATTERY, [CANARY_FLEX]],
|
||||||
]
|
]
|
||||||
|
|
||||||
STATE_AIR_QUALITY_NORMAL = "normal"
|
STATE_AIR_QUALITY_NORMAL = "normal"
|
||||||
|
@ -42,7 +48,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
|
||||||
if device.is_online:
|
if device.is_online:
|
||||||
device_type = device.device_type
|
device_type = device.device_type
|
||||||
for sensor_type in SENSOR_TYPES:
|
for sensor_type in SENSOR_TYPES:
|
||||||
if device_type.get("name") in sensor_type[3]:
|
if device_type.get("name") in sensor_type[4]:
|
||||||
devices.append(
|
devices.append(
|
||||||
CanarySensor(data, sensor_type, location, device)
|
CanarySensor(data, sensor_type, location, device)
|
||||||
)
|
)
|
||||||
|
@ -83,12 +89,14 @@ class CanarySensor(Entity):
|
||||||
"""Return the unit of measurement."""
|
"""Return the unit of measurement."""
|
||||||
return self._sensor_type[1]
|
return self._sensor_type[1]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_class(self):
|
||||||
|
"""Device class for the sensor."""
|
||||||
|
return self._sensor_type[3]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def icon(self):
|
def icon(self):
|
||||||
"""Icon for the sensor."""
|
"""Icon for the sensor."""
|
||||||
if self.state is not None and self._sensor_type[0] == "battery":
|
|
||||||
return icon_for_battery_level(battery_level=self.state)
|
|
||||||
|
|
||||||
return self._sensor_type[2]
|
return self._sensor_type[2]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
|
@ -6,7 +6,15 @@ from homeassistant.components.canary.sensor import (
|
||||||
STATE_AIR_QUALITY_NORMAL,
|
STATE_AIR_QUALITY_NORMAL,
|
||||||
STATE_AIR_QUALITY_VERY_ABNORMAL,
|
STATE_AIR_QUALITY_VERY_ABNORMAL,
|
||||||
)
|
)
|
||||||
from homeassistant.const import ATTR_UNIT_OF_MEASUREMENT, PERCENTAGE, TEMP_CELSIUS
|
from homeassistant.const import (
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT,
|
||||||
|
DEVICE_CLASS_BATTERY,
|
||||||
|
DEVICE_CLASS_HUMIDITY,
|
||||||
|
DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||||
|
DEVICE_CLASS_TEMPERATURE,
|
||||||
|
PERCENTAGE,
|
||||||
|
TEMP_CELSIUS,
|
||||||
|
)
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
|
|
||||||
from . import mock_device, mock_location, mock_reading
|
from . import mock_device, mock_location, mock_reading
|
||||||
|
@ -43,15 +51,15 @@ async def test_sensors_pro(hass, canary) -> None:
|
||||||
"20_temperature",
|
"20_temperature",
|
||||||
"21.12",
|
"21.12",
|
||||||
TEMP_CELSIUS,
|
TEMP_CELSIUS,
|
||||||
|
DEVICE_CLASS_TEMPERATURE,
|
||||||
None,
|
None,
|
||||||
"mdi:thermometer",
|
|
||||||
),
|
),
|
||||||
"home_dining_room_humidity": (
|
"home_dining_room_humidity": (
|
||||||
"20_humidity",
|
"20_humidity",
|
||||||
"50.46",
|
"50.46",
|
||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
|
DEVICE_CLASS_HUMIDITY,
|
||||||
None,
|
None,
|
||||||
"mdi:water-percent",
|
|
||||||
),
|
),
|
||||||
"home_dining_room_air_quality": (
|
"home_dining_room_air_quality": (
|
||||||
"20_air_quality",
|
"20_air_quality",
|
||||||
|
@ -156,10 +164,16 @@ async def test_sensors_flex(hass, canary) -> None:
|
||||||
"20_battery",
|
"20_battery",
|
||||||
"70.46",
|
"70.46",
|
||||||
PERCENTAGE,
|
PERCENTAGE,
|
||||||
|
DEVICE_CLASS_BATTERY,
|
||||||
|
None,
|
||||||
|
),
|
||||||
|
"home_dining_room_wifi": (
|
||||||
|
"20_wifi",
|
||||||
|
"-57.0",
|
||||||
|
"dBm",
|
||||||
|
DEVICE_CLASS_SIGNAL_STRENGTH,
|
||||||
None,
|
None,
|
||||||
"mdi:battery-70",
|
|
||||||
),
|
),
|
||||||
"home_dining_room_wifi": ("20_wifi", "-57.0", "dBm", None, "mdi:wifi"),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (sensor_id, data) in sensors.items():
|
for (sensor_id, data) in sensors.items():
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue