Set device_class on temperature sensors R-Z (#52920)

This commit is contained in:
Erik Montnemery 2021-07-12 18:53:52 +02:00 committed by GitHub
parent ad0ccc1b70
commit 1a74fd7a14
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 123 additions and 36 deletions

View file

@ -5,7 +5,11 @@ from regenmaschine.controller import Controller
from homeassistant.components.sensor import SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import TEMP_CELSIUS, VOLUME_CUBIC_METERS
from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS,
VOLUME_CUBIC_METERS,
)
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
@ -62,7 +66,7 @@ SENSORS = {
"Freeze Protect Temperature",
"mdi:thermometer",
TEMP_CELSIUS,
"temperature",
DEVICE_CLASS_TEMPERATURE,
True,
DATA_RESTRICTIONS_UNIVERSAL,
),

View file

@ -12,6 +12,7 @@ from homeassistant.const import (
CONF_NAME,
CONF_PORT,
CONF_SENSORS,
DEVICE_CLASS_TEMPERATURE,
PERCENTAGE,
TEMP_CELSIUS,
)
@ -110,23 +111,31 @@ def has_all_unique_names(value):
SENSOR_TYPES = {
# Type, Unit, Icon, post
"bed_temperature": ["temperature", TEMP_CELSIUS, "mdi:thermometer", "_bed_"],
"bed_temperature": [
"temperature",
TEMP_CELSIUS,
None,
"_bed_",
DEVICE_CLASS_TEMPERATURE,
],
"extruder_temperature": [
"temperature",
TEMP_CELSIUS,
"mdi:thermometer",
None,
"_extruder_",
DEVICE_CLASS_TEMPERATURE,
],
"chamber_temperature": [
"temperature",
TEMP_CELSIUS,
"mdi:thermometer",
None,
"_chamber_",
DEVICE_CLASS_TEMPERATURE,
],
"current_state": ["state", None, "mdi:printer-3d", ""],
"current_job": ["progress", PERCENTAGE, "mdi:file-percent", "_current_job"],
"job_end": ["progress", None, "mdi:clock-end", "_job_end"],
"job_start": ["progress", None, "mdi:clock-start", "_job_start"],
"current_state": ["state", None, "mdi:printer-3d", "", None],
"current_job": ["progress", PERCENTAGE, "mdi:file-percent", "_current_job", None],
"job_end": ["progress", None, "mdi:clock-end", "_job_end", None],
"job_start": ["progress", None, "mdi:clock-start", "_job_start", None],
}
SENSOR_SCHEMA = vol.Schema(

View file

@ -59,6 +59,7 @@ class RepetierSensor(SensorEntity):
self._printer_id = printer_id
self._sensor_type = sensor_type
self._state = None
self._attr_device_class = SENSOR_TYPES[self._sensor_type][4]
@property
def available(self) -> bool:

View file

@ -10,6 +10,7 @@ from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
from homeassistant.const import (
CONF_DISPLAY_OPTIONS,
CONF_NAME,
DEVICE_CLASS_TEMPERATURE,
PERCENTAGE,
TEMP_CELSIUS,
)
@ -24,9 +25,9 @@ CONF_IS_HAT_ATTACHED = "is_hat_attached"
MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=60)
SENSOR_TYPES = {
"temperature": ["temperature", TEMP_CELSIUS],
"humidity": ["humidity", PERCENTAGE],
"pressure": ["pressure", "mb"],
"temperature": ["temperature", TEMP_CELSIUS, DEVICE_CLASS_TEMPERATURE],
"humidity": ["humidity", PERCENTAGE, None],
"pressure": ["pressure", "mb", None],
}
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
@ -77,6 +78,7 @@ class SenseHatSensor(SensorEntity):
self._unit_of_measurement = SENSOR_TYPES[sensor_types][1]
self.type = sensor_types
self._state = None
self._attr_device_class = SENSOR_TYPES[sensor_types][2]
@property
def name(self):

View file

@ -11,6 +11,7 @@ from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
DEVICE_CLASS_TEMPERATURE,
PERCENTAGE,
PRECISION_TENTHS,
TEMP_CELSIUS,
@ -119,6 +120,8 @@ class SHTSensor(SensorEntity):
class SHTSensorTemperature(SHTSensor):
"""Representation of a temperature sensor."""
_attr_device_class = DEVICE_CLASS_TEMPERATURE
@property
def unit_of_measurement(self):
"""Return the unit of measurement."""

View file

@ -12,6 +12,7 @@ from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
from homeassistant.const import (
CONF_MAC,
CONF_NAME,
DEVICE_CLASS_TEMPERATURE,
EVENT_HOMEASSISTANT_STOP,
PERCENTAGE,
STATE_UNKNOWN,
@ -90,6 +91,7 @@ class SkybeaconHumid(SensorEntity):
class SkybeaconTemp(SensorEntity):
"""Representation of a Skybeacon temperature sensor."""
_attr_device_class = DEVICE_CLASS_TEMPERATURE
_attr_unit_of_measurement = TEMP_CELSIUS
def __init__(self, name, mon):

View file

@ -13,6 +13,7 @@ from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
from homeassistant.const import (
CONF_IP_ADDRESS,
CONF_NAME,
DEVICE_CLASS_TEMPERATURE,
ELECTRICAL_CURRENT_AMPERE,
ENERGY_WATT_HOUR,
FREQUENCY_HERTZ,
@ -51,6 +52,7 @@ SENSOR_TYPES = {
FREQUENCY_HERTZ,
"mdi:current-ac",
None,
None,
],
"current_power": [
"currentPower",
@ -58,6 +60,7 @@ SENSOR_TYPES = {
POWER_WATT,
"mdi:solar-power",
None,
None,
],
"energy_this_month": [
"energyThisMonth",
@ -65,6 +68,7 @@ SENSOR_TYPES = {
ENERGY_WATT_HOUR,
"mdi:solar-power",
None,
None,
],
"energy_this_year": [
"energyThisYear",
@ -72,6 +76,7 @@ SENSOR_TYPES = {
ENERGY_WATT_HOUR,
"mdi:solar-power",
None,
None,
],
"energy_today": [
"energyToday",
@ -79,13 +84,15 @@ SENSOR_TYPES = {
ENERGY_WATT_HOUR,
"mdi:solar-power",
None,
None,
],
"inverter_temperature": [
"invertertemperature",
"Inverter Temperature",
TEMP_CELSIUS,
"mdi:thermometer",
None,
"operating_mode",
DEVICE_CLASS_TEMPERATURE,
],
"lifetime_energy": [
"energyTotal",
@ -93,6 +100,7 @@ SENSOR_TYPES = {
ENERGY_WATT_HOUR,
"mdi:solar-power",
None,
None,
],
"optimizer_connected": [
"optimizers",
@ -100,6 +108,7 @@ SENSOR_TYPES = {
"optimizers",
"mdi:solar-panel",
"optimizers_connected",
None,
],
"optimizer_current": [
"optimizercurrent",
@ -107,6 +116,7 @@ SENSOR_TYPES = {
ELECTRICAL_CURRENT_AMPERE,
"mdi:solar-panel",
None,
None,
],
"optimizer_power": [
"optimizerpower",
@ -114,6 +124,7 @@ SENSOR_TYPES = {
POWER_WATT,
"mdi:solar-panel",
None,
None,
],
"optimizer_temperature": [
"optimizertemperature",
@ -121,6 +132,7 @@ SENSOR_TYPES = {
TEMP_CELSIUS,
"mdi:solar-panel",
None,
DEVICE_CLASS_TEMPERATURE,
],
"optimizer_voltage": [
"optimizervoltage",
@ -128,6 +140,7 @@ SENSOR_TYPES = {
VOLT,
"mdi:solar-panel",
None,
None,
],
}
@ -170,7 +183,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
TEMP_FAHRENHEIT,
"mdi:thermometer",
"operating_mode",
None,
DEVICE_CLASS_TEMPERATURE,
]
try:
@ -181,6 +194,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
POWER_WATT,
"mdi:arrow-collapse-down",
None,
None,
]
sensors["import_meter_reading"] = [
"totalEnergyimport",
@ -188,6 +202,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
ENERGY_WATT_HOUR,
"mdi:counter",
None,
None,
]
except IndexError:
_LOGGER.debug("Import meter sensors are not created")
@ -200,6 +215,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
POWER_WATT,
"mdi:arrow-expand-up",
None,
None,
]
sensors["export_meter_reading"] = [
"totalEnergyexport",
@ -207,6 +223,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
ENERGY_WATT_HOUR,
"mdi:counter",
None,
None,
]
except IndexError:
_LOGGER.debug("Export meter sensors are not created")
@ -225,6 +242,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
sensor_info[2],
sensor_info[3],
sensor_info[4],
sensor_info[5],
)
entities.append(sensor)
@ -234,7 +252,9 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
class SolarEdgeSensor(SensorEntity):
"""Representation of an SolarEdge Monitoring API sensor."""
def __init__(self, platform_name, data, json_key, name, unit, icon, attr):
def __init__(
self, platform_name, data, json_key, name, unit, icon, attr, device_class
):
"""Initialize the sensor."""
self._platform_name = platform_name
self._data = data
@ -245,6 +265,7 @@ class SolarEdgeSensor(SensorEntity):
self._unit_of_measurement = unit
self._icon = icon
self._attr = attr
self._attr_device_class = device_class
@property
def name(self):

View file

@ -11,6 +11,8 @@ from homeassistant.const import (
CONF_ID,
CONF_NAME,
CONF_PROTOCOL,
DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE,
PERCENTAGE,
TEMP_CELSIUS,
)
@ -18,7 +20,9 @@ import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__)
DatatypeDescription = namedtuple("DatatypeDescription", ["name", "unit"])
DatatypeDescription = namedtuple(
"DatatypeDescription", ["name", "unit", "device_class"]
)
CONF_DATATYPE_MASK = "datatype_mask"
CONF_ONLY_NAMED = "only_named"
@ -58,20 +62,28 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
sensor_value_descriptions = {
tellcore_constants.TELLSTICK_TEMPERATURE: DatatypeDescription(
"temperature", config.get(CONF_TEMPERATURE_SCALE)
"temperature", config.get(CONF_TEMPERATURE_SCALE), DEVICE_CLASS_TEMPERATURE
),
tellcore_constants.TELLSTICK_HUMIDITY: DatatypeDescription(
"humidity", PERCENTAGE
"humidity",
PERCENTAGE,
DEVICE_CLASS_HUMIDITY,
),
tellcore_constants.TELLSTICK_RAINRATE: DatatypeDescription(
"rain rate", "", None
),
tellcore_constants.TELLSTICK_RAINTOTAL: DatatypeDescription(
"rain total", "", None
),
tellcore_constants.TELLSTICK_RAINRATE: DatatypeDescription("rain rate", ""),
tellcore_constants.TELLSTICK_RAINTOTAL: DatatypeDescription("rain total", ""),
tellcore_constants.TELLSTICK_WINDDIRECTION: DatatypeDescription(
"wind direction", ""
"wind direction", "", None
),
tellcore_constants.TELLSTICK_WINDAVERAGE: DatatypeDescription(
"wind average", ""
"wind average", "", None
),
tellcore_constants.TELLSTICK_WINDGUST: DatatypeDescription(
"wind gust", "", None
),
tellcore_constants.TELLSTICK_WINDGUST: DatatypeDescription("wind gust", ""),
}
try:

View file

@ -6,7 +6,7 @@ import voluptuous as vol
from xbee_helper.exceptions import ZigBeeException, ZigBeeTxFailure
from homeassistant.components.sensor import SensorEntity
from homeassistant.const import CONF_TYPE, TEMP_CELSIUS
from homeassistant.const import CONF_TYPE, DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS
from . import DOMAIN, PLATFORM_SCHEMA, XBeeAnalogIn, XBeeAnalogInConfig, XBeeConfig
@ -46,6 +46,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
class XBeeTemperatureSensor(SensorEntity):
"""Representation of XBee Pro temperature sensor."""
_attr_device_class = DEVICE_CLASS_TEMPERATURE
_attr_unit_of_measurement = TEMP_CELSIUS
def __init__(self, config, device):

View file

@ -19,6 +19,7 @@ from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
DEGREE,
DEVICE_CLASS_TEMPERATURE,
LENGTH_METERS,
PERCENTAGE,
PRESSURE_HPA,
@ -43,43 +44,65 @@ MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=10)
VIENNA_TIME_ZONE = dt_util.get_time_zone("Europe/Vienna")
SENSOR_TYPES = {
"pressure": ("Pressure", PRESSURE_HPA, "LDstat hPa", float),
"pressure_sealevel": ("Pressure at Sea Level", PRESSURE_HPA, "LDred hPa", float),
"humidity": ("Humidity", PERCENTAGE, "RF %", int),
"pressure": ("Pressure", PRESSURE_HPA, None, "LDstat hPa", float),
"pressure_sealevel": (
"Pressure at Sea Level",
PRESSURE_HPA,
None,
"LDred hPa",
float,
),
"humidity": ("Humidity", PERCENTAGE, None, "RF %", int),
"wind_speed": (
"Wind Speed",
SPEED_KILOMETERS_PER_HOUR,
None,
f"WG {SPEED_KILOMETERS_PER_HOUR}",
float,
),
"wind_bearing": ("Wind Bearing", DEGREE, f"WR {DEGREE}", int),
"wind_bearing": ("Wind Bearing", DEGREE, None, f"WR {DEGREE}", int),
"wind_max_speed": (
"Top Wind Speed",
None,
SPEED_KILOMETERS_PER_HOUR,
f"WSG {SPEED_KILOMETERS_PER_HOUR}",
float,
),
"wind_max_bearing": ("Top Wind Bearing", DEGREE, f"WSR {DEGREE}", int),
"sun_last_hour": ("Sun Last Hour", PERCENTAGE, f"SO {PERCENTAGE}", int),
"temperature": ("Temperature", TEMP_CELSIUS, f"T {TEMP_CELSIUS}", float),
"wind_max_bearing": ("Top Wind Bearing", DEGREE, None, f"WSR {DEGREE}", int),
"sun_last_hour": ("Sun Last Hour", PERCENTAGE, None, f"SO {PERCENTAGE}", int),
"temperature": (
"Temperature",
TEMP_CELSIUS,
DEVICE_CLASS_TEMPERATURE,
f"T {TEMP_CELSIUS}",
float,
),
"precipitation": (
"Precipitation",
None,
f"l/{AREA_SQUARE_METERS}",
f"N l/{AREA_SQUARE_METERS}",
float,
),
"dewpoint": ("Dew Point", TEMP_CELSIUS, f"TP {TEMP_CELSIUS}", float),
"dewpoint": (
"Dew Point",
TEMP_CELSIUS,
DEVICE_CLASS_TEMPERATURE,
f"TP {TEMP_CELSIUS}",
float,
),
# The following probably not useful for general consumption,
# but we need them to fill in internal attributes
"station_name": ("Station Name", None, "Name", str),
"station_name": ("Station Name", None, None, "Name", str),
"station_elevation": (
"Station Elevation",
LENGTH_METERS,
None,
f"Höhe {LENGTH_METERS}",
int,
),
"update_date": ("Update Date", None, "Datum", str),
"update_time": ("Update Time", None, "Zeit", str),
"update_date": ("Update Date", None, None, "Datum", str),
"update_time": ("Update Time", None, None, "Zeit", str),
}
PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend(
@ -140,6 +163,7 @@ class ZamgSensor(SensorEntity):
self.probe = probe
self.client_name = name
self.variable = variable
self._attr_device_class = SENSOR_TYPES[variable][2]
@property
def name(self):
@ -217,6 +241,7 @@ class ZamgData:
api_fields = {
col_heading: (standard_name, dtype)
for standard_name, (
_,
_,
_,
col_heading,

View file

@ -1,6 +1,6 @@
"""Support for Z-Wave sensors."""
from homeassistant.components.sensor import DEVICE_CLASS_BATTERY, DOMAIN, SensorEntity
from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT
from homeassistant.const import DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT
from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
@ -79,6 +79,13 @@ class ZWaveMultilevelSensor(ZWaveSensor):
return self._state
@property
def device_class(self):
"""Return the class of this device."""
if self._units in ["C", "F"]:
return DEVICE_CLASS_TEMPERATURE
return None
@property
def unit_of_measurement(self):
"""Return the unit the value is expressed in."""