Set device_class on temperature sensors R-Z (#52920)
This commit is contained in:
parent
ad0ccc1b70
commit
1a74fd7a14
11 changed files with 123 additions and 36 deletions
|
@ -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,
|
||||
),
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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."""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue