Add and use percentage constant (#32094)

* Add and use percentage constant

* Fix pylint error and broken test
This commit is contained in:
springstan 2020-02-28 20:46:48 +01:00 committed by GitHub
parent c7f128f286
commit f1a0ca7cd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
155 changed files with 735 additions and 459 deletions

View File

@ -11,7 +11,7 @@ from homeassistant.components.adguard.const import (
DOMAIN, DOMAIN,
) )
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import TIME_MILLISECONDS from homeassistant.const import TIME_MILLISECONDS, UNIT_PERCENTAGE
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.typing import HomeAssistantType from homeassistant.helpers.typing import HomeAssistantType
@ -134,7 +134,7 @@ class AdGuardHomePercentageBlockedSensor(AdGuardHomeSensor):
"AdGuard DNS Queries Blocked Ratio", "AdGuard DNS Queries Blocked Ratio",
"mdi:magnify-close", "mdi:magnify-close",
"blocked_percentage", "blocked_percentage",
"%", UNIT_PERCENTAGE,
) )
async def _adguard_update(self) -> None: async def _adguard_update(self) -> None:

View File

@ -9,6 +9,7 @@ from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
PRESSURE_HPA, PRESSURE_HPA,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -27,8 +28,6 @@ ATTR_ICON = "icon"
ATTR_LABEL = "label" ATTR_LABEL = "label"
ATTR_UNIT = "unit" ATTR_UNIT = "unit"
HUMI_PERCENT = "%"
SENSOR_TYPES = { SENSOR_TYPES = {
ATTR_API_PM1: { ATTR_API_PM1: {
ATTR_DEVICE_CLASS: None, ATTR_DEVICE_CLASS: None,
@ -40,7 +39,7 @@ SENSOR_TYPES = {
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY, ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
ATTR_ICON: None, ATTR_ICON: None,
ATTR_LABEL: ATTR_API_HUMIDITY.capitalize(), ATTR_LABEL: ATTR_API_HUMIDITY.capitalize(),
ATTR_UNIT: HUMI_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_API_PRESSURE: { ATTR_API_PRESSURE: {
ATTR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE, ATTR_DEVICE_CLASS: DEVICE_CLASS_PRESSURE,

View File

@ -14,6 +14,7 @@ from homeassistant.const import (
CONF_API_KEY, CONF_API_KEY,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
SPEED_MILES_PER_HOUR, SPEED_MILES_PER_HOUR,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
@ -154,18 +155,18 @@ SENSOR_TYPES = {
TYPE_EVENTRAININ: ("Event Rain", "in", TYPE_SENSOR, None), TYPE_EVENTRAININ: ("Event Rain", "in", TYPE_SENSOR, None),
TYPE_FEELSLIKE: ("Feels Like", "°F", TYPE_SENSOR, "temperature"), TYPE_FEELSLIKE: ("Feels Like", "°F", TYPE_SENSOR, "temperature"),
TYPE_HOURLYRAININ: ("Hourly Rain Rate", "in/hr", TYPE_SENSOR, None), TYPE_HOURLYRAININ: ("Hourly Rain Rate", "in/hr", TYPE_SENSOR, None),
TYPE_HUMIDITY10: ("Humidity 10", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY10: ("Humidity 10", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY1: ("Humidity 1", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY1: ("Humidity 1", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY2: ("Humidity 2", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY2: ("Humidity 2", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY3: ("Humidity 3", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY3: ("Humidity 3", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY4: ("Humidity 4", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY4: ("Humidity 4", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY5: ("Humidity 5", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY5: ("Humidity 5", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY6: ("Humidity 6", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY6: ("Humidity 6", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY7: ("Humidity 7", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY7: ("Humidity 7", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY8: ("Humidity 8", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY8: ("Humidity 8", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY9: ("Humidity 9", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY9: ("Humidity 9", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITY: ("Humidity", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITY: ("Humidity", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_HUMIDITYIN: ("Humidity In", "%", TYPE_SENSOR, "humidity"), TYPE_HUMIDITYIN: ("Humidity In", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_LASTRAIN: ("Last Rain", None, TYPE_SENSOR, "timestamp"), TYPE_LASTRAIN: ("Last Rain", None, TYPE_SENSOR, "timestamp"),
TYPE_MAXDAILYGUST: ("Max Gust", SPEED_MILES_PER_HOUR, TYPE_SENSOR, None), TYPE_MAXDAILYGUST: ("Max Gust", SPEED_MILES_PER_HOUR, TYPE_SENSOR, None),
TYPE_MONTHLYRAININ: ("Monthly Rain", "in", TYPE_SENSOR, None), TYPE_MONTHLYRAININ: ("Monthly Rain", "in", TYPE_SENSOR, None),
@ -179,16 +180,16 @@ SENSOR_TYPES = {
TYPE_RELAY7: ("Relay 7", None, TYPE_BINARY_SENSOR, "connectivity"), TYPE_RELAY7: ("Relay 7", None, TYPE_BINARY_SENSOR, "connectivity"),
TYPE_RELAY8: ("Relay 8", None, TYPE_BINARY_SENSOR, "connectivity"), TYPE_RELAY8: ("Relay 8", None, TYPE_BINARY_SENSOR, "connectivity"),
TYPE_RELAY9: ("Relay 9", None, TYPE_BINARY_SENSOR, "connectivity"), TYPE_RELAY9: ("Relay 9", None, TYPE_BINARY_SENSOR, "connectivity"),
TYPE_SOILHUM10: ("Soil Humidity 10", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM10: ("Soil Humidity 10", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM1: ("Soil Humidity 1", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM1: ("Soil Humidity 1", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM2: ("Soil Humidity 2", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM2: ("Soil Humidity 2", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM3: ("Soil Humidity 3", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM3: ("Soil Humidity 3", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM4: ("Soil Humidity 4", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM4: ("Soil Humidity 4", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM5: ("Soil Humidity 5", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM5: ("Soil Humidity 5", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM6: ("Soil Humidity 6", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM6: ("Soil Humidity 6", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM7: ("Soil Humidity 7", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM7: ("Soil Humidity 7", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM8: ("Soil Humidity 8", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM8: ("Soil Humidity 8", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILHUM9: ("Soil Humidity 9", "%", TYPE_SENSOR, "humidity"), TYPE_SOILHUM9: ("Soil Humidity 9", UNIT_PERCENTAGE, TYPE_SENSOR, "humidity"),
TYPE_SOILTEMP10F: ("Soil Temp 10", "°F", TYPE_SENSOR, "temperature"), TYPE_SOILTEMP10F: ("Soil Temp 10", "°F", TYPE_SENSOR, "temperature"),
TYPE_SOILTEMP1F: ("Soil Temp 1", "°F", TYPE_SENSOR, "temperature"), TYPE_SOILTEMP1F: ("Soil Temp 1", "°F", TYPE_SENSOR, "temperature"),
TYPE_SOILTEMP2F: ("Soil Temp 2", "°F", TYPE_SENSOR, "temperature"), TYPE_SOILTEMP2F: ("Soil Temp 2", "°F", TYPE_SENSOR, "temperature"),

View File

@ -4,7 +4,7 @@ import logging
from amcrest import AmcrestError from amcrest import AmcrestError
from homeassistant.const import CONF_NAME, CONF_SENSORS from homeassistant.const import CONF_NAME, CONF_SENSORS, UNIT_PERCENTAGE
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -20,7 +20,7 @@ SENSOR_SDCARD = "sdcard"
# Sensor types are defined like: Name, units, icon # Sensor types are defined like: Name, units, icon
SENSORS = { SENSORS = {
SENSOR_PTZ_PRESET: ["PTZ Preset", None, "mdi:camera-iris"], SENSOR_PTZ_PRESET: ["PTZ Preset", None, "mdi:camera-iris"],
SENSOR_SDCARD: ["SD Used", "%", "mdi:sd"], SENSOR_SDCARD: ["SD Used", UNIT_PERCENTAGE, "mdi:sd"],
} }

View File

@ -12,6 +12,7 @@ from homeassistant.const import (
TEMP_CELSIUS, TEMP_CELSIUS,
TIME_MINUTES, TIME_MINUTES,
TIME_SECONDS, TIME_SECONDS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -28,7 +29,7 @@ SENSOR_TYPES = {
"battdate": ["Battery Replaced", "", "mdi:calendar-clock"], "battdate": ["Battery Replaced", "", "mdi:calendar-clock"],
"battstat": ["Battery Status", "", "mdi:information-outline"], "battstat": ["Battery Status", "", "mdi:information-outline"],
"battv": ["Battery Voltage", "V", "mdi:flash"], "battv": ["Battery Voltage", "V", "mdi:flash"],
"bcharge": ["Battery", "%", "mdi:battery"], "bcharge": ["Battery", UNIT_PERCENTAGE, "mdi:battery"],
"cable": ["Cable Type", "", "mdi:ethernet-cable"], "cable": ["Cable Type", "", "mdi:ethernet-cable"],
"cumonbatt": ["Total Time on Battery", "", "mdi:timer"], "cumonbatt": ["Total Time on Battery", "", "mdi:timer"],
"date": ["Status Date", "", "mdi:calendar-clock"], "date": ["Status Date", "", "mdi:calendar-clock"],
@ -42,20 +43,20 @@ SENSOR_TYPES = {
"firmware": ["Firmware Version", "", "mdi:information-outline"], "firmware": ["Firmware Version", "", "mdi:information-outline"],
"hitrans": ["Transfer High", "V", "mdi:flash"], "hitrans": ["Transfer High", "V", "mdi:flash"],
"hostname": ["Hostname", "", "mdi:information-outline"], "hostname": ["Hostname", "", "mdi:information-outline"],
"humidity": ["Ambient Humidity", "%", "mdi:water-percent"], "humidity": ["Ambient Humidity", UNIT_PERCENTAGE, "mdi:water-percent"],
"itemp": ["Internal Temperature", TEMP_CELSIUS, "mdi:thermometer"], "itemp": ["Internal Temperature", TEMP_CELSIUS, "mdi:thermometer"],
"lastxfer": ["Last Transfer", "", "mdi:transfer"], "lastxfer": ["Last Transfer", "", "mdi:transfer"],
"linefail": ["Input Voltage Status", "", "mdi:information-outline"], "linefail": ["Input Voltage Status", "", "mdi:information-outline"],
"linefreq": ["Line Frequency", "Hz", "mdi:information-outline"], "linefreq": ["Line Frequency", "Hz", "mdi:information-outline"],
"linev": ["Input Voltage", "V", "mdi:flash"], "linev": ["Input Voltage", "V", "mdi:flash"],
"loadpct": ["Load", "%", "mdi:gauge"], "loadpct": ["Load", UNIT_PERCENTAGE, "mdi:gauge"],
"loadapnt": ["Load Apparent Power", "%", "mdi:gauge"], "loadapnt": ["Load Apparent Power", UNIT_PERCENTAGE, "mdi:gauge"],
"lotrans": ["Transfer Low", "V", "mdi:flash"], "lotrans": ["Transfer Low", "V", "mdi:flash"],
"mandate": ["Manufacture Date", "", "mdi:calendar"], "mandate": ["Manufacture Date", "", "mdi:calendar"],
"masterupd": ["Master Update", "", "mdi:information-outline"], "masterupd": ["Master Update", "", "mdi:information-outline"],
"maxlinev": ["Input Voltage High", "V", "mdi:flash"], "maxlinev": ["Input Voltage High", "V", "mdi:flash"],
"maxtime": ["Battery Timeout", "", "mdi:timer-off"], "maxtime": ["Battery Timeout", "", "mdi:timer-off"],
"mbattchg": ["Battery Shutdown", "%", "mdi:battery-alert"], "mbattchg": ["Battery Shutdown", UNIT_PERCENTAGE, "mdi:battery-alert"],
"minlinev": ["Input Voltage Low", "V", "mdi:flash"], "minlinev": ["Input Voltage Low", "V", "mdi:flash"],
"mintimel": ["Shutdown Time", "", "mdi:timer"], "mintimel": ["Shutdown Time", "", "mdi:timer"],
"model": ["Model", "", "mdi:information-outline"], "model": ["Model", "", "mdi:information-outline"],
@ -70,7 +71,7 @@ SENSOR_TYPES = {
"reg1": ["Register 1 Fault", "", "mdi:information-outline"], "reg1": ["Register 1 Fault", "", "mdi:information-outline"],
"reg2": ["Register 2 Fault", "", "mdi:information-outline"], "reg2": ["Register 2 Fault", "", "mdi:information-outline"],
"reg3": ["Register 3 Fault", "", "mdi:information-outline"], "reg3": ["Register 3 Fault", "", "mdi:information-outline"],
"retpct": ["Restore Requirement", "%", "mdi:battery-alert"], "retpct": ["Restore Requirement", UNIT_PERCENTAGE, "mdi:battery-alert"],
"selftest": ["Last Self Test", "", "mdi:calendar-clock"], "selftest": ["Last Self Test", "", "mdi:calendar-clock"],
"sense": ["Sensitivity", "", "mdi:information-outline"], "sense": ["Sensitivity", "", "mdi:information-outline"],
"serialno": ["Serial Number", "", "mdi:information-outline"], "serialno": ["Serial Number", "", "mdi:information-outline"],
@ -92,14 +93,14 @@ SPECIFIC_UNITS = {"ITEMP": TEMP_CELSIUS}
INFERRED_UNITS = { INFERRED_UNITS = {
" Minutes": TIME_MINUTES, " Minutes": TIME_MINUTES,
" Seconds": TIME_SECONDS, " Seconds": TIME_SECONDS,
" Percent": "%", " Percent": UNIT_PERCENTAGE,
" Volts": "V", " Volts": "V",
" Ampere": "A", " Ampere": "A",
" Volt-Ampere": "VA", " Volt-Ampere": "VA",
" Watts": POWER_WATT, " Watts": POWER_WATT,
" Hz": "Hz", " Hz": "Hz",
" C": TEMP_CELSIUS, " C": TEMP_CELSIUS,
" Percent Load Capacity": "%", " Percent Load Capacity": UNIT_PERCENTAGE,
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(

View File

@ -4,7 +4,12 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_MONITORED_CONDITIONS, TEMP_CELSIUS, TEMP_FAHRENHEIT from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
)
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -14,7 +19,7 @@ from . import DOMAIN, UPDATE_TOPIC
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
TEMP_UNITS = [TEMP_CELSIUS, TEMP_FAHRENHEIT] TEMP_UNITS = [TEMP_CELSIUS, TEMP_FAHRENHEIT]
PERCENT_UNITS = ["%", "%"] PERCENT_UNITS = [UNIT_PERCENTAGE, UNIT_PERCENTAGE]
SALT_UNITS = ["g/L", "PPM"] SALT_UNITS = ["g/L", "PPM"]
WATT_UNITS = ["W", "W"] WATT_UNITS = ["W", "W"]
NO_UNITS = [None, None] NO_UNITS = [None, None]

View File

@ -11,6 +11,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -27,10 +28,10 @@ SENSOR_TYPES = {
"last_capture": ["Last", None, "run-fast"], "last_capture": ["Last", None, "run-fast"],
"total_cameras": ["Arlo Cameras", None, "video"], "total_cameras": ["Arlo Cameras", None, "video"],
"captured_today": ["Captured Today", None, "file-video"], "captured_today": ["Captured Today", None, "file-video"],
"battery_level": ["Battery Level", "%", "battery-50"], "battery_level": ["Battery Level", UNIT_PERCENTAGE, "battery-50"],
"signal_strength": ["Signal Strength", None, "signal"], "signal_strength": ["Signal Strength", None, "signal"],
"temperature": ["Temperature", TEMP_CELSIUS, "thermometer"], "temperature": ["Temperature", TEMP_CELSIUS, "thermometer"],
"humidity": ["Humidity", "%", "water-percent"], "humidity": ["Humidity", UNIT_PERCENTAGE, "water-percent"],
"air_quality": ["Air Quality", CONCENTRATION_PARTS_PER_MILLION, "biohazard"], "air_quality": ["Air Quality", CONCENTRATION_PARTS_PER_MILLION, "biohazard"],
} }

View File

@ -16,6 +16,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -48,7 +49,7 @@ SENSOR_TYPES = {
}, },
"HUMID": { "HUMID": {
"device_class": DEVICE_CLASS_HUMIDITY, "device_class": DEVICE_CLASS_HUMIDITY,
"unit_of_measurement": "%", "unit_of_measurement": UNIT_PERCENTAGE,
"icon": "mdi:water-percent", "icon": "mdi:water-percent",
}, },
"CO2": { "CO2": {
@ -80,7 +81,7 @@ SENSOR_TYPES = {
}, },
"score": { "score": {
"device_class": DEVICE_CLASS_SCORE, "device_class": DEVICE_CLASS_SCORE,
"unit_of_measurement": "%", "unit_of_measurement": UNIT_PERCENTAGE,
"icon": "mdi:percent", "icon": "mdi:percent",
}, },
} }

View File

@ -12,6 +12,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -24,8 +25,8 @@ DEFAULT_NAME = "BeeWi SmartClim"
# Sensor config # Sensor config
SENSOR_TYPES = [ SENSOR_TYPES = [
[DEVICE_CLASS_TEMPERATURE, "Temperature", TEMP_CELSIUS], [DEVICE_CLASS_TEMPERATURE, "Temperature", TEMP_CELSIUS],
[DEVICE_CLASS_HUMIDITY, "Humidity", "%"], [DEVICE_CLASS_HUMIDITY, "Humidity", UNIT_PERCENTAGE],
[DEVICE_CLASS_BATTERY, "Battery", "%"], [DEVICE_CLASS_BATTERY, "Battery", UNIT_PERCENTAGE],
] ]
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(

View File

@ -4,7 +4,12 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_MONITORED_CONDITIONS, TEMP_CELSIUS, TEMP_FAHRENHEIT from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -25,7 +30,7 @@ SENSOR_TYPES = [
# Sensor units - these do not currently align with the API documentation # Sensor units - these do not currently align with the API documentation
SENSOR_UNITS_IMPERIAL = { SENSOR_UNITS_IMPERIAL = {
"Temperature": TEMP_FAHRENHEIT, "Temperature": TEMP_FAHRENHEIT,
"Humidity": "%", "Humidity": UNIT_PERCENTAGE,
"Pressure": "inHg", "Pressure": "inHg",
"Luminance": "cd/m²", "Luminance": "cd/m²",
"Voltage": "mV", "Voltage": "mV",
@ -34,7 +39,7 @@ SENSOR_UNITS_IMPERIAL = {
# Metric units # Metric units
SENSOR_UNITS_METRIC = { SENSOR_UNITS_METRIC = {
"Temperature": TEMP_CELSIUS, "Temperature": TEMP_CELSIUS,
"Humidity": "%", "Humidity": UNIT_PERCENTAGE,
"Pressure": "mbar", "Pressure": "mbar",
"Luminance": "cd/m²", "Luminance": "cd/m²",
"Voltage": "mV", "Voltage": "mV",

View File

@ -8,7 +8,12 @@ import smbus # pylint: disable=import-error
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_MONITORED_CONDITIONS, CONF_NAME, TEMP_FAHRENHEIT from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle from homeassistant.util import Throttle
@ -44,7 +49,7 @@ SENSOR_HUMID = "humidity"
SENSOR_PRESS = "pressure" SENSOR_PRESS = "pressure"
SENSOR_TYPES = { SENSOR_TYPES = {
SENSOR_TEMP: ["Temperature", None], SENSOR_TEMP: ["Temperature", None],
SENSOR_HUMID: ["Humidity", "%"], SENSOR_HUMID: ["Humidity", UNIT_PERCENTAGE],
SENSOR_PRESS: ["Pressure", "mb"], SENSOR_PRESS: ["Pressure", "mb"],
} }
DEFAULT_MONITORED = [SENSOR_TEMP, SENSOR_HUMID, SENSOR_PRESS] DEFAULT_MONITORED = [SENSOR_TEMP, SENSOR_HUMID, SENSOR_PRESS]

View File

@ -8,7 +8,12 @@ from smbus import SMBus # pylint: disable=import-error
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_MONITORED_CONDITIONS, CONF_NAME, TEMP_FAHRENHEIT from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util.temperature import celsius_to_fahrenheit from homeassistant.util.temperature import celsius_to_fahrenheit
@ -50,10 +55,10 @@ SENSOR_GAS = "gas"
SENSOR_AQ = "airquality" SENSOR_AQ = "airquality"
SENSOR_TYPES = { SENSOR_TYPES = {
SENSOR_TEMP: ["Temperature", None], SENSOR_TEMP: ["Temperature", None],
SENSOR_HUMID: ["Humidity", "%"], SENSOR_HUMID: ["Humidity", UNIT_PERCENTAGE],
SENSOR_PRESS: ["Pressure", "mb"], SENSOR_PRESS: ["Pressure", "mb"],
SENSOR_GAS: ["Gas Resistance", "Ohms"], SENSOR_GAS: ["Gas Resistance", "Ohms"],
SENSOR_AQ: ["Air Quality", "%"], SENSOR_AQ: ["Air Quality", UNIT_PERCENTAGE],
} }
DEFAULT_MONITORED = [SENSOR_TEMP, SENSOR_HUMID, SENSOR_PRESS, SENSOR_AQ] DEFAULT_MONITORED = [SENSOR_TEMP, SENSOR_HUMID, SENSOR_PRESS, SENSOR_AQ]
OVERSAMPLING_VALUES = set([0, 1, 2, 4, 8, 16]) OVERSAMPLING_VALUES = set([0, 1, 2, 4, 8, 16])

View File

@ -8,6 +8,7 @@ from homeassistant.const import (
LENGTH_KILOMETERS, LENGTH_KILOMETERS,
LENGTH_MILES, LENGTH_MILES,
TIME_HOURS, TIME_HOURS,
UNIT_PERCENTAGE,
VOLUME_GALLONS, VOLUME_GALLONS,
VOLUME_LITERS, VOLUME_LITERS,
) )
@ -28,7 +29,7 @@ ATTR_TO_HA_METRIC = {
"charging_time_remaining": ["mdi:update", TIME_HOURS], "charging_time_remaining": ["mdi:update", TIME_HOURS],
"charging_status": ["mdi:battery-charging", None], "charging_status": ["mdi:battery-charging", None],
# No icon as this is dealt with directly as a special case in icon() # No icon as this is dealt with directly as a special case in icon()
"charging_level_hv": [None, "%"], "charging_level_hv": [None, UNIT_PERCENTAGE],
} }
ATTR_TO_HA_IMPERIAL = { ATTR_TO_HA_IMPERIAL = {
@ -41,7 +42,7 @@ ATTR_TO_HA_IMPERIAL = {
"charging_time_remaining": ["mdi:update", TIME_HOURS], "charging_time_remaining": ["mdi:update", TIME_HOURS],
"charging_status": ["mdi:battery-charging", None], "charging_status": ["mdi:battery-charging", None],
# No icon as this is dealt with directly as a special case in icon() # No icon as this is dealt with directly as a special case in icon()
"charging_level_hv": [None, "%"], "charging_level_hv": [None, UNIT_PERCENTAGE],
} }

View File

@ -21,6 +21,7 @@ from homeassistant.const import (
CONF_NAME, CONF_NAME,
SPEED_KILOMETERS_PER_HOUR, SPEED_KILOMETERS_PER_HOUR,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -68,7 +69,7 @@ SENSOR_TYPES = {
"press_msl": ["Pressure msl", "msl"], "press_msl": ["Pressure msl", "msl"],
"press_tend": ["Pressure Tend", None], "press_tend": ["Pressure Tend", None],
"rain_trace": ["Rain Today", "mm"], "rain_trace": ["Rain Today", "mm"],
"rel_hum": ["Relative Humidity", "%"], "rel_hum": ["Relative Humidity", UNIT_PERCENTAGE],
"sea_state": ["Sea State", None], "sea_state": ["Sea State", None],
"swell_dir_worded": ["Swell Direction", None], "swell_dir_worded": ["Swell Direction", None],
"swell_height": ["Swell Height", "m"], "swell_height": ["Swell Height", "m"],

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
CONF_TIMEOUT, CONF_TIMEOUT,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -29,7 +30,7 @@ SCAN_INTERVAL = timedelta(seconds=300)
SENSOR_TYPES = { SENSOR_TYPES = {
"temperature": ["Temperature", TEMP_CELSIUS], "temperature": ["Temperature", TEMP_CELSIUS],
"air_quality": ["Air Quality", " "], "air_quality": ["Air Quality", " "],
"humidity": ["Humidity", "%"], "humidity": ["Humidity", UNIT_PERCENTAGE],
"light": ["Light", " "], "light": ["Light", " "],
"noise": ["Noise", " "], "noise": ["Noise", " "],
} }

View File

@ -1,5 +1,5 @@
"""Constants for Brother integration.""" """Constants for Brother integration."""
from homeassistant.const import TIME_DAYS from homeassistant.const import TIME_DAYS, UNIT_PERCENTAGE
ATTR_BELT_UNIT_REMAINING_LIFE = "belt_unit_remaining_life" ATTR_BELT_UNIT_REMAINING_LIFE = "belt_unit_remaining_life"
ATTR_BLACK_INK_REMAINING = "black_ink_remaining" ATTR_BLACK_INK_REMAINING = "black_ink_remaining"
@ -30,7 +30,6 @@ ATTR_YELLOW_TONER_REMAINING = "yellow_toner_remaining"
DOMAIN = "brother" DOMAIN = "brother"
UNIT_PAGES = "p" UNIT_PAGES = "p"
UNIT_PERCENT = "%"
PRINTER_TYPES = ["laser", "ink"] PRINTER_TYPES = ["laser", "ink"]
@ -58,72 +57,72 @@ SENSOR_TYPES = {
ATTR_DRUM_REMAINING_LIFE: { ATTR_DRUM_REMAINING_LIFE: {
ATTR_ICON: "mdi:chart-donut", ATTR_ICON: "mdi:chart-donut",
ATTR_LABEL: ATTR_DRUM_REMAINING_LIFE.replace("_", " ").title(), ATTR_LABEL: ATTR_DRUM_REMAINING_LIFE.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_BELT_UNIT_REMAINING_LIFE: { ATTR_BELT_UNIT_REMAINING_LIFE: {
ATTR_ICON: "mdi:current-ac", ATTR_ICON: "mdi:current-ac",
ATTR_LABEL: ATTR_BELT_UNIT_REMAINING_LIFE.replace("_", " ").title(), ATTR_LABEL: ATTR_BELT_UNIT_REMAINING_LIFE.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_FUSER_REMAINING_LIFE: { ATTR_FUSER_REMAINING_LIFE: {
ATTR_ICON: "mdi:water-outline", ATTR_ICON: "mdi:water-outline",
ATTR_LABEL: ATTR_FUSER_REMAINING_LIFE.replace("_", " ").title(), ATTR_LABEL: ATTR_FUSER_REMAINING_LIFE.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_LASER_REMAINING_LIFE: { ATTR_LASER_REMAINING_LIFE: {
ATTR_ICON: "mdi:spotlight-beam", ATTR_ICON: "mdi:spotlight-beam",
ATTR_LABEL: ATTR_LASER_REMAINING_LIFE.replace("_", " ").title(), ATTR_LABEL: ATTR_LASER_REMAINING_LIFE.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_PF_KIT_1_REMAINING_LIFE: { ATTR_PF_KIT_1_REMAINING_LIFE: {
ATTR_ICON: "mdi:printer-3d", ATTR_ICON: "mdi:printer-3d",
ATTR_LABEL: ATTR_PF_KIT_1_REMAINING_LIFE.replace("_", " ").title(), ATTR_LABEL: ATTR_PF_KIT_1_REMAINING_LIFE.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_PF_KIT_MP_REMAINING_LIFE: { ATTR_PF_KIT_MP_REMAINING_LIFE: {
ATTR_ICON: "mdi:printer-3d", ATTR_ICON: "mdi:printer-3d",
ATTR_LABEL: ATTR_PF_KIT_MP_REMAINING_LIFE.replace("_", " ").title(), ATTR_LABEL: ATTR_PF_KIT_MP_REMAINING_LIFE.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_BLACK_TONER_REMAINING: { ATTR_BLACK_TONER_REMAINING: {
ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_ICON: "mdi:printer-3d-nozzle",
ATTR_LABEL: ATTR_BLACK_TONER_REMAINING.replace("_", " ").title(), ATTR_LABEL: ATTR_BLACK_TONER_REMAINING.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_CYAN_TONER_REMAINING: { ATTR_CYAN_TONER_REMAINING: {
ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_ICON: "mdi:printer-3d-nozzle",
ATTR_LABEL: ATTR_CYAN_TONER_REMAINING.replace("_", " ").title(), ATTR_LABEL: ATTR_CYAN_TONER_REMAINING.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_MAGENTA_TONER_REMAINING: { ATTR_MAGENTA_TONER_REMAINING: {
ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_ICON: "mdi:printer-3d-nozzle",
ATTR_LABEL: ATTR_MAGENTA_TONER_REMAINING.replace("_", " ").title(), ATTR_LABEL: ATTR_MAGENTA_TONER_REMAINING.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_YELLOW_TONER_REMAINING: { ATTR_YELLOW_TONER_REMAINING: {
ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_ICON: "mdi:printer-3d-nozzle",
ATTR_LABEL: ATTR_YELLOW_TONER_REMAINING.replace("_", " ").title(), ATTR_LABEL: ATTR_YELLOW_TONER_REMAINING.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_BLACK_INK_REMAINING: { ATTR_BLACK_INK_REMAINING: {
ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_ICON: "mdi:printer-3d-nozzle",
ATTR_LABEL: ATTR_BLACK_INK_REMAINING.replace("_", " ").title(), ATTR_LABEL: ATTR_BLACK_INK_REMAINING.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_CYAN_INK_REMAINING: { ATTR_CYAN_INK_REMAINING: {
ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_ICON: "mdi:printer-3d-nozzle",
ATTR_LABEL: ATTR_CYAN_INK_REMAINING.replace("_", " ").title(), ATTR_LABEL: ATTR_CYAN_INK_REMAINING.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_MAGENTA_INK_REMAINING: { ATTR_MAGENTA_INK_REMAINING: {
ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_ICON: "mdi:printer-3d-nozzle",
ATTR_LABEL: ATTR_MAGENTA_INK_REMAINING.replace("_", " ").title(), ATTR_LABEL: ATTR_MAGENTA_INK_REMAINING.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_YELLOW_INK_REMAINING: { ATTR_YELLOW_INK_REMAINING: {
ATTR_ICON: "mdi:printer-3d-nozzle", ATTR_ICON: "mdi:printer-3d-nozzle",
ATTR_LABEL: ATTR_YELLOW_INK_REMAINING.replace("_", " ").title(), ATTR_LABEL: ATTR_YELLOW_INK_REMAINING.replace("_", " ").title(),
ATTR_UNIT: UNIT_PERCENT, ATTR_UNIT: UNIT_PERCENTAGE,
}, },
ATTR_UPTIME: { ATTR_UPTIME: {
ATTR_ICON: "mdi:timer", ATTR_ICON: "mdi:timer",

View File

@ -31,6 +31,7 @@ from homeassistant.const import (
SPEED_KILOMETERS_PER_HOUR, SPEED_KILOMETERS_PER_HOUR,
TEMP_CELSIUS, TEMP_CELSIUS,
TIME_HOURS, TIME_HOURS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -67,7 +68,7 @@ SENSOR_TYPES = {
"symbol": ["Symbol", None, None], "symbol": ["Symbol", None, None],
# new in json api (>1.0.0): # new in json api (>1.0.0):
"feeltemperature": ["Feel temperature", TEMP_CELSIUS, "mdi:thermometer"], "feeltemperature": ["Feel temperature", TEMP_CELSIUS, "mdi:thermometer"],
"humidity": ["Humidity", "%", "mdi:water-percent"], "humidity": ["Humidity", UNIT_PERCENTAGE, "mdi:water-percent"],
"temperature": ["Temperature", TEMP_CELSIUS, "mdi:thermometer"], "temperature": ["Temperature", TEMP_CELSIUS, "mdi:thermometer"],
"groundtemperature": ["Ground temperature", TEMP_CELSIUS, "mdi:thermometer"], "groundtemperature": ["Ground temperature", TEMP_CELSIUS, "mdi:thermometer"],
"windspeed": ["Wind speed", SPEED_KILOMETERS_PER_HOUR, "mdi:weather-windy"], "windspeed": ["Wind speed", SPEED_KILOMETERS_PER_HOUR, "mdi:weather-windy"],
@ -120,16 +121,16 @@ SENSOR_TYPES = {
"maxrain_3d": ["Maximum rain 3d", "mm", "mdi:weather-pouring"], "maxrain_3d": ["Maximum rain 3d", "mm", "mdi:weather-pouring"],
"maxrain_4d": ["Maximum rain 4d", "mm", "mdi:weather-pouring"], "maxrain_4d": ["Maximum rain 4d", "mm", "mdi:weather-pouring"],
"maxrain_5d": ["Maximum rain 5d", "mm", "mdi:weather-pouring"], "maxrain_5d": ["Maximum rain 5d", "mm", "mdi:weather-pouring"],
"rainchance_1d": ["Rainchance 1d", "%", "mdi:weather-pouring"], "rainchance_1d": ["Rainchance 1d", UNIT_PERCENTAGE, "mdi:weather-pouring"],
"rainchance_2d": ["Rainchance 2d", "%", "mdi:weather-pouring"], "rainchance_2d": ["Rainchance 2d", UNIT_PERCENTAGE, "mdi:weather-pouring"],
"rainchance_3d": ["Rainchance 3d", "%", "mdi:weather-pouring"], "rainchance_3d": ["Rainchance 3d", UNIT_PERCENTAGE, "mdi:weather-pouring"],
"rainchance_4d": ["Rainchance 4d", "%", "mdi:weather-pouring"], "rainchance_4d": ["Rainchance 4d", UNIT_PERCENTAGE, "mdi:weather-pouring"],
"rainchance_5d": ["Rainchance 5d", "%", "mdi:weather-pouring"], "rainchance_5d": ["Rainchance 5d", UNIT_PERCENTAGE, "mdi:weather-pouring"],
"sunchance_1d": ["Sunchance 1d", "%", "mdi:weather-partly-cloudy"], "sunchance_1d": ["Sunchance 1d", UNIT_PERCENTAGE, "mdi:weather-partly-cloudy"],
"sunchance_2d": ["Sunchance 2d", "%", "mdi:weather-partly-cloudy"], "sunchance_2d": ["Sunchance 2d", UNIT_PERCENTAGE, "mdi:weather-partly-cloudy"],
"sunchance_3d": ["Sunchance 3d", "%", "mdi:weather-partly-cloudy"], "sunchance_3d": ["Sunchance 3d", UNIT_PERCENTAGE, "mdi:weather-partly-cloudy"],
"sunchance_4d": ["Sunchance 4d", "%", "mdi:weather-partly-cloudy"], "sunchance_4d": ["Sunchance 4d", UNIT_PERCENTAGE, "mdi:weather-partly-cloudy"],
"sunchance_5d": ["Sunchance 5d", "%", "mdi:weather-partly-cloudy"], "sunchance_5d": ["Sunchance 5d", UNIT_PERCENTAGE, "mdi:weather-partly-cloudy"],
"windforce_1d": ["Wind force 1d", "Bft", "mdi:weather-windy"], "windforce_1d": ["Wind force 1d", "Bft", "mdi:weather-windy"],
"windforce_2d": ["Wind force 2d", "Bft", "mdi:weather-windy"], "windforce_2d": ["Wind force 2d", "Bft", "mdi:weather-windy"],
"windforce_3d": ["Wind force 3d", "Bft", "mdi:weather-windy"], "windforce_3d": ["Wind force 3d", "Bft", "mdi:weather-windy"],

View File

@ -1,7 +1,7 @@
"""Support for Canary sensors.""" """Support for Canary sensors."""
from canary.api import SensorType from canary.api import SensorType
from homeassistant.const import TEMP_CELSIUS from homeassistant.const import TEMP_CELSIUS, UNIT_PERCENTAGE
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
@ -14,10 +14,10 @@ ATTR_AIR_QUALITY = "air_quality"
# sensor type name, unit_of_measurement, icon # sensor type name, unit_of_measurement, icon
SENSOR_TYPES = [ SENSOR_TYPES = [
["temperature", TEMP_CELSIUS, "mdi:thermometer", ["Canary"]], ["temperature", TEMP_CELSIUS, "mdi:thermometer", ["Canary"]],
["humidity", "%", "mdi:water-percent", ["Canary"]], ["humidity", UNIT_PERCENTAGE, "mdi:water-percent", ["Canary"]],
["air_quality", None, "mdi:weather-windy", ["Canary"]], ["air_quality", None, "mdi:weather-windy", ["Canary"]],
["wifi", "dBm", "mdi:wifi", ["Canary Flex"]], ["wifi", "dBm", "mdi:wifi", ["Canary Flex"]],
["battery", "%", "mdi:battery-50", ["Canary Flex"]], ["battery", UNIT_PERCENTAGE, "mdi:battery-50", ["Canary Flex"]],
] ]
STATE_AIR_QUALITY_NORMAL = "normal" STATE_AIR_QUALITY_NORMAL = "normal"

View File

@ -18,6 +18,7 @@ from homeassistant.const import (
CONF_FOR, CONF_FOR,
CONF_PLATFORM, CONF_PLATFORM,
CONF_TYPE, CONF_TYPE,
UNIT_PERCENTAGE,
) )
from homeassistant.core import CALLBACK_TYPE, HomeAssistant from homeassistant.core import CALLBACK_TYPE, HomeAssistant
from homeassistant.helpers import config_validation as cv, entity_registry from homeassistant.helpers import config_validation as cv, entity_registry
@ -177,7 +178,7 @@ async def async_get_trigger_capabilities(hass: HomeAssistant, config):
if trigger_type == "current_temperature_changed": if trigger_type == "current_temperature_changed":
unit_of_measurement = hass.config.units.temperature_unit unit_of_measurement = hass.config.units.temperature_unit
else: else:
unit_of_measurement = "%" unit_of_measurement = UNIT_PERCENTAGE
return { return {
"extra_fields": vol.Schema( "extra_fields": vol.Schema(

View File

@ -33,6 +33,7 @@ from homeassistant.const import (
TEMP_CELSIUS, TEMP_CELSIUS,
TIME_DAYS, TIME_DAYS,
TIME_HOURS, TIME_HOURS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
@ -78,7 +79,7 @@ SENSOR_TYPES = {
ATTR_CURRENT_HUMIDITY: { ATTR_CURRENT_HUMIDITY: {
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY, ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
ATTR_LABEL: "Inside Humidity", ATTR_LABEL: "Inside Humidity",
ATTR_UNIT: "%", ATTR_UNIT: UNIT_PERCENTAGE,
ATTR_ICON: "mdi:water-percent", ATTR_ICON: "mdi:water-percent",
ATTR_ID: SENSOR_HUMIDITY_EXTRACT, ATTR_ID: SENSOR_HUMIDITY_EXTRACT,
}, },
@ -93,7 +94,7 @@ SENSOR_TYPES = {
ATTR_OUTSIDE_HUMIDITY: { ATTR_OUTSIDE_HUMIDITY: {
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY, ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
ATTR_LABEL: "Outside Humidity", ATTR_LABEL: "Outside Humidity",
ATTR_UNIT: "%", ATTR_UNIT: UNIT_PERCENTAGE,
ATTR_ICON: "mdi:water-percent", ATTR_ICON: "mdi:water-percent",
ATTR_ID: SENSOR_HUMIDITY_OUTDOOR, ATTR_ID: SENSOR_HUMIDITY_OUTDOOR,
}, },
@ -108,7 +109,7 @@ SENSOR_TYPES = {
ATTR_SUPPLY_HUMIDITY: { ATTR_SUPPLY_HUMIDITY: {
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY, ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
ATTR_LABEL: "Supply Humidity", ATTR_LABEL: "Supply Humidity",
ATTR_UNIT: "%", ATTR_UNIT: UNIT_PERCENTAGE,
ATTR_ICON: "mdi:water-percent", ATTR_ICON: "mdi:water-percent",
ATTR_ID: SENSOR_HUMIDITY_SUPPLY, ATTR_ID: SENSOR_HUMIDITY_SUPPLY,
}, },
@ -122,7 +123,7 @@ SENSOR_TYPES = {
ATTR_SUPPLY_FAN_DUTY: { ATTR_SUPPLY_FAN_DUTY: {
ATTR_DEVICE_CLASS: None, ATTR_DEVICE_CLASS: None,
ATTR_LABEL: "Supply Fan Duty", ATTR_LABEL: "Supply Fan Duty",
ATTR_UNIT: "%", ATTR_UNIT: UNIT_PERCENTAGE,
ATTR_ICON: "mdi:fan", ATTR_ICON: "mdi:fan",
ATTR_ID: SENSOR_FAN_SUPPLY_DUTY, ATTR_ID: SENSOR_FAN_SUPPLY_DUTY,
}, },
@ -136,7 +137,7 @@ SENSOR_TYPES = {
ATTR_EXHAUST_FAN_DUTY: { ATTR_EXHAUST_FAN_DUTY: {
ATTR_DEVICE_CLASS: None, ATTR_DEVICE_CLASS: None,
ATTR_LABEL: "Exhaust Fan Duty", ATTR_LABEL: "Exhaust Fan Duty",
ATTR_UNIT: "%", ATTR_UNIT: UNIT_PERCENTAGE,
ATTR_ICON: "mdi:fan", ATTR_ICON: "mdi:fan",
ATTR_ID: SENSOR_FAN_EXHAUST_DUTY, ATTR_ID: SENSOR_FAN_EXHAUST_DUTY,
}, },
@ -151,7 +152,7 @@ SENSOR_TYPES = {
ATTR_EXHAUST_HUMIDITY: { ATTR_EXHAUST_HUMIDITY: {
ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY, ATTR_DEVICE_CLASS: DEVICE_CLASS_HUMIDITY,
ATTR_LABEL: "Exhaust Humidity", ATTR_LABEL: "Exhaust Humidity",
ATTR_UNIT: "%", ATTR_UNIT: UNIT_PERCENTAGE,
ATTR_ICON: "mdi:water-percent", ATTR_ICON: "mdi:water-percent",
ATTR_ID: SENSOR_HUMIDITY_EXHAUST, ATTR_ID: SENSOR_HUMIDITY_EXHAUST,
}, },
@ -172,7 +173,7 @@ SENSOR_TYPES = {
ATTR_BYPASS_STATE: { ATTR_BYPASS_STATE: {
ATTR_DEVICE_CLASS: None, ATTR_DEVICE_CLASS: None,
ATTR_LABEL: "Bypass State", ATTR_LABEL: "Bypass State",
ATTR_UNIT: "%", ATTR_UNIT: UNIT_PERCENTAGE,
ATTR_ICON: "mdi:camera-iris", ATTR_ICON: "mdi:camera-iris",
ATTR_ID: SENSOR_BYPASS_STATE, ATTR_ID: SENSOR_BYPASS_STATE,
}, },

View File

@ -6,7 +6,7 @@ import logging
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_HOST, CONF_PORT from homeassistant.const import CONF_HOST, CONF_PORT, UNIT_PERCENTAGE
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -268,7 +268,7 @@ class MarkerSensor(Entity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit of measurement.""" """Return the unit of measurement."""
return "%" return UNIT_PERCENTAGE
@property @property
def device_state_attributes(self): def device_state_attributes(self):

View File

@ -6,6 +6,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -45,14 +46,24 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
ReadCommand.extractTemperature, ReadCommand.extractTemperature,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
], ],
["Danfoss Air Remaining Filter", "%", ReadCommand.filterPercent, None], [
["Danfoss Air Humidity", "%", ReadCommand.humidity, DEVICE_CLASS_HUMIDITY], "Danfoss Air Remaining Filter",
["Danfoss Air Fan Step", "%", ReadCommand.fan_step, None], UNIT_PERCENTAGE,
ReadCommand.filterPercent,
None,
],
[
"Danfoss Air Humidity",
UNIT_PERCENTAGE,
ReadCommand.humidity,
DEVICE_CLASS_HUMIDITY,
],
["Danfoss Air Fan Step", UNIT_PERCENTAGE, ReadCommand.fan_step, None],
["Danfoss Air Exhaust Fan Speed", "RPM", ReadCommand.exhaust_fan_speed, None], ["Danfoss Air Exhaust Fan Speed", "RPM", ReadCommand.exhaust_fan_speed, None],
["Danfoss Air Supply Fan Speed", "RPM", ReadCommand.supply_fan_speed, None], ["Danfoss Air Supply Fan Speed", "RPM", ReadCommand.supply_fan_speed, None],
[ [
"Danfoss Air Dial Battery", "Danfoss Air Dial Battery",
"%", UNIT_PERCENTAGE,
ReadCommand.battery_percent, ReadCommand.battery_percent,
DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY,
], ],

View File

@ -19,6 +19,7 @@ from homeassistant.const import (
SPEED_METERS_PER_SECOND, SPEED_METERS_PER_SECOND,
SPEED_MILES_PER_HOUR, SPEED_MILES_PER_HOUR,
TIME_HOURS, TIME_HOURS,
UNIT_PERCENTAGE,
UNIT_UV_INDEX, UNIT_UV_INDEX,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -113,11 +114,11 @@ SENSOR_TYPES = {
], ],
"precip_probability": [ "precip_probability": [
"Precip Probability", "Precip Probability",
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"mdi:water-percent", "mdi:water-percent",
["currently", "minutely", "hourly", "daily"], ["currently", "minutely", "hourly", "daily"],
], ],
@ -193,21 +194,21 @@ SENSOR_TYPES = {
], ],
"cloud_cover": [ "cloud_cover": [
"Cloud Coverage", "Cloud Coverage",
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"mdi:weather-partly-cloudy", "mdi:weather-partly-cloudy",
["currently", "hourly", "daily"], ["currently", "hourly", "daily"],
], ],
"humidity": [ "humidity": [
"Humidity", "Humidity",
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"%", UNIT_PERCENTAGE,
"mdi:water-percent", "mdi:water-percent",
["currently", "hourly", "daily"], ["currently", "hourly", "daily"],
], ],

View File

@ -9,7 +9,12 @@ from pydeconz.sensor import (
Thermostat, Thermostat,
) )
from homeassistant.const import ATTR_TEMPERATURE, ATTR_VOLTAGE, DEVICE_CLASS_BATTERY from homeassistant.const import (
ATTR_TEMPERATURE,
ATTR_VOLTAGE,
DEVICE_CLASS_BATTERY,
UNIT_PERCENTAGE,
)
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.dispatcher import ( from homeassistant.helpers.dispatcher import (
async_dispatcher_connect, async_dispatcher_connect,
@ -194,7 +199,7 @@ class DeconzBattery(DeconzDevice):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit of measurement of this entity.""" """Return the unit of measurement of this entity."""
return "%" return UNIT_PERCENTAGE
@property @property
def device_state_attributes(self): def device_state_attributes(self):

View File

@ -4,6 +4,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -23,7 +24,12 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
12, 12,
), ),
DemoSensor( DemoSensor(
"sensor_2", "Outside Humidity", 54, DEVICE_CLASS_HUMIDITY, "%", None "sensor_2",
"Outside Humidity",
54,
DEVICE_CLASS_HUMIDITY,
UNIT_PERCENTAGE,
None,
), ),
] ]
) )

View File

@ -6,7 +6,12 @@ import Adafruit_DHT # pylint: disable=import-error
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_MONITORED_CONDITIONS, CONF_NAME, TEMP_FAHRENHEIT from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle from homeassistant.util import Throttle
@ -28,7 +33,7 @@ SENSOR_TEMPERATURE = "temperature"
SENSOR_HUMIDITY = "humidity" SENSOR_HUMIDITY = "humidity"
SENSOR_TYPES = { SENSOR_TYPES = {
SENSOR_TEMPERATURE: ["Temperature", None], SENSOR_TEMPERATURE: ["Temperature", None],
SENSOR_HUMIDITY: ["Humidity", "%"], SENSOR_HUMIDITY: ["Humidity", UNIT_PERCENTAGE],
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(

View File

@ -6,7 +6,7 @@ import re
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_SENSORS, DATA_GIGABYTES from homeassistant.const import CONF_SENSORS, DATA_GIGABYTES, UNIT_PERCENTAGE
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -24,7 +24,12 @@ SENSOR_SMS_UNREAD = "sms"
SENSORS = { SENSORS = {
SENSOR_NETWORK: ("signal strength", "Network", None, "mdi:access-point-network"), SENSOR_NETWORK: ("signal strength", "Network", None, "mdi:access-point-network"),
SENSOR_SIGNAL: ("signal strength", "Signal Strength", "%", "mdi:signal"), SENSOR_SIGNAL: (
"signal strength",
"Signal Strength",
UNIT_PERCENTAGE,
"mdi:signal",
),
SENSOR_SMS_UNREAD: ("sms unread", "SMS unread", "", "mdi:message-text-outline"), SENSOR_SMS_UNREAD: ("sms unread", "SMS unread", "", "mdi:message-text-outline"),
SENSOR_UPLOAD: ("traffic modem tx", "Sent", DATA_GIGABYTES, "mdi:cloud-upload"), SENSOR_UPLOAD: ("traffic modem tx", "Sent", DATA_GIGABYTES, "mdi:cloud-upload"),
SENSOR_DOWNLOAD: ( SENSOR_DOWNLOAD: (

View File

@ -4,7 +4,7 @@ import logging
from libpurecool.dyson_pure_cool import DysonPureCool from libpurecool.dyson_pure_cool import DysonPureCool
from libpurecool.dyson_pure_cool_link import DysonPureCoolLink from libpurecool.dyson_pure_cool_link import DysonPureCoolLink
from homeassistant.const import STATE_OFF, TEMP_CELSIUS, TIME_HOURS from homeassistant.const import STATE_OFF, TEMP_CELSIUS, TIME_HOURS, UNIT_PERCENTAGE
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from . import DYSON_DEVICES from . import DYSON_DEVICES
@ -13,7 +13,7 @@ SENSOR_UNITS = {
"air_quality": None, "air_quality": None,
"dust": None, "dust": None,
"filter_life": TIME_HOURS, "filter_life": TIME_HOURS,
"humidity": "%", "humidity": UNIT_PERCENTAGE,
} }
SENSOR_ICONS = { SENSOR_ICONS = {

View File

@ -18,6 +18,7 @@ from homeassistant.const import (
CONF_USERNAME, CONF_USERNAME,
DATA_GIGABITS, DATA_GIGABITS,
TIME_DAYS, TIME_DAYS,
UNIT_PERCENTAGE,
) )
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -27,7 +28,6 @@ from homeassistant.util import Throttle
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
PRICE = "CAD" PRICE = "CAD"
PERCENT = "%"
DEFAULT_NAME = "EBox" DEFAULT_NAME = "EBox"
@ -36,7 +36,7 @@ SCAN_INTERVAL = timedelta(minutes=15)
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15) MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15)
SENSOR_TYPES = { SENSOR_TYPES = {
"usage": ["Usage", PERCENT, "mdi:percent"], "usage": ["Usage", UNIT_PERCENTAGE, "mdi:percent"],
"balance": ["Balance", PRICE, "mdi:square-inc-cash"], "balance": ["Balance", PRICE, "mdi:square-inc-cash"],
"limit": ["Data limit", DATA_GIGABITS, "mdi:download"], "limit": ["Data limit", DATA_GIGABITS, "mdi:download"],
"days_left": ["Days left", TIME_DAYS, "mdi:calendar-today"], "days_left": ["Days left", TIME_DAYS, "mdi:calendar-today"],

View File

@ -5,6 +5,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -12,7 +13,7 @@ from .const import _LOGGER, DOMAIN, ECOBEE_MODEL_TO_NAME, MANUFACTURER
SENSOR_TYPES = { SENSOR_TYPES = {
"temperature": ["Temperature", TEMP_FAHRENHEIT], "temperature": ["Temperature", TEMP_FAHRENHEIT],
"humidity": ["Humidity", "%"], "humidity": ["Humidity", UNIT_PERCENTAGE],
} }

View File

@ -1,6 +1,8 @@
"""Support for Eight Sleep sensors.""" """Support for Eight Sleep sensors."""
import logging import logging
from homeassistant.const import UNIT_PERCENTAGE
from . import ( from . import (
CONF_SENSORS, CONF_SENSORS,
DATA_EIGHT, DATA_EIGHT,
@ -18,9 +20,9 @@ ATTR_AVG_RESP_RATE = "Average Respiratory Rate"
ATTR_HEART_RATE = "Heart Rate" ATTR_HEART_RATE = "Heart Rate"
ATTR_AVG_HEART_RATE = "Average Heart Rate" ATTR_AVG_HEART_RATE = "Average Heart Rate"
ATTR_SLEEP_DUR = "Time Slept" ATTR_SLEEP_DUR = "Time Slept"
ATTR_LIGHT_PERC = "Light Sleep %" ATTR_LIGHT_PERC = f"Light Sleep {UNIT_PERCENTAGE}"
ATTR_DEEP_PERC = "Deep Sleep %" ATTR_DEEP_PERC = f"Deep Sleep {UNIT_PERCENTAGE}"
ATTR_REM_PERC = "REM Sleep %" ATTR_REM_PERC = f"REM Sleep {UNIT_PERCENTAGE}"
ATTR_TNT = "Tosses & Turns" ATTR_TNT = "Tosses & Turns"
ATTR_SLEEP_STAGE = "Sleep Stage" ATTR_SLEEP_STAGE = "Sleep Stage"
ATTR_TARGET_HEAT = "Target Heating Level" ATTR_TARGET_HEAT = "Target Heating Level"
@ -100,7 +102,7 @@ class EightHeatSensor(EightSleepHeatEntity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit the value is expressed in.""" """Return the unit the value is expressed in."""
return "%" return UNIT_PERCENTAGE
async def async_update(self): async def async_update(self):
"""Retrieve latest state.""" """Retrieve latest state."""

View File

@ -16,6 +16,7 @@ from homeassistant.const import (
STATE_CLOSED, STATE_CLOSED,
STATE_OPEN, STATE_OPEN,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -36,7 +37,7 @@ SENSOR_TYPE_WINDOWHANDLE = "windowhandle"
SENSOR_TYPES = { SENSOR_TYPES = {
SENSOR_TYPE_HUMIDITY: { SENSOR_TYPE_HUMIDITY: {
"name": "Humidity", "name": "Humidity",
"unit": "%", "unit": UNIT_PERCENTAGE,
"icon": "mdi:water-percent", "icon": "mdi:water-percent",
"class": DEVICE_CLASS_HUMIDITY, "class": DEVICE_CLASS_HUMIDITY,
}, },

View File

@ -6,19 +6,19 @@ from epsonprinter_pkg.epsonprinterapi import EpsonPrinterAPI
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_HOST, CONF_MONITORED_CONDITIONS from homeassistant.const import CONF_HOST, CONF_MONITORED_CONDITIONS, UNIT_PERCENTAGE
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
MONITORED_CONDITIONS = { MONITORED_CONDITIONS = {
"black": ["Ink level Black", "%", "mdi:water"], "black": ["Ink level Black", UNIT_PERCENTAGE, "mdi:water"],
"photoblack": ["Ink level Photoblack", "%", "mdi:water"], "photoblack": ["Ink level Photoblack", UNIT_PERCENTAGE, "mdi:water"],
"magenta": ["Ink level Magenta", "%", "mdi:water"], "magenta": ["Ink level Magenta", UNIT_PERCENTAGE, "mdi:water"],
"cyan": ["Ink level Cyan", "%", "mdi:water"], "cyan": ["Ink level Cyan", UNIT_PERCENTAGE, "mdi:water"],
"yellow": ["Ink level Yellow", "%", "mdi:water"], "yellow": ["Ink level Yellow", UNIT_PERCENTAGE, "mdi:water"],
"clean": ["Cleaning level", "%", "mdi:water"], "clean": ["Cleaning level", UNIT_PERCENTAGE, "mdi:water"],
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{ {

View File

@ -9,6 +9,7 @@ from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -28,7 +29,12 @@ SENSOR_TYPES = {
None, None,
], ],
"CO2": ["CO2", CONCENTRATION_PARTS_PER_MILLION, "mdi:cloud", None], "CO2": ["CO2", CONCENTRATION_PARTS_PER_MILLION, "mdi:cloud", None],
"com.fibaro.humiditySensor": ["Humidity", "%", None, DEVICE_CLASS_HUMIDITY], "com.fibaro.humiditySensor": [
"Humidity",
UNIT_PERCENTAGE,
None,
DEVICE_CLASS_HUMIDITY,
],
"com.fibaro.lightSensor": ["Light", "lx", None, DEVICE_CLASS_ILLUMINANCE], "com.fibaro.lightSensor": ["Light", "lx", None, DEVICE_CLASS_ILLUMINANCE],
} }

View File

@ -18,6 +18,7 @@ from homeassistant.const import (
MASS_MILLIGRAMS, MASS_MILLIGRAMS,
TIME_MILLISECONDS, TIME_MILLISECONDS,
TIME_MINUTES, TIME_MINUTES,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -91,11 +92,11 @@ FITBIT_RESOURCES_LIST = {
], ],
"activities/tracker/steps": ["Tracker Steps", "steps", "walk"], "activities/tracker/steps": ["Tracker Steps", "steps", "walk"],
"body/bmi": ["BMI", "BMI", "human"], "body/bmi": ["BMI", "BMI", "human"],
"body/fat": ["Body Fat", "%", "human"], "body/fat": ["Body Fat", UNIT_PERCENTAGE, "human"],
"body/weight": ["Weight", "", "human"], "body/weight": ["Weight", "", "human"],
"devices/battery": ["Battery", None, None], "devices/battery": ["Battery", None, None],
"sleep/awakeningsCount": ["Awakenings Count", "times awaken", "sleep"], "sleep/awakeningsCount": ["Awakenings Count", "times awaken", "sleep"],
"sleep/efficiency": ["Sleep Efficiency", "%", "sleep"], "sleep/efficiency": ["Sleep Efficiency", UNIT_PERCENTAGE, "sleep"],
"sleep/minutesAfterWakeup": ["Minutes After Wakeup", TIME_MINUTES, "sleep"], "sleep/minutesAfterWakeup": ["Minutes After Wakeup", TIME_MINUTES, "sleep"],
"sleep/minutesAsleep": ["Sleep Minutes Asleep", TIME_MINUTES, "sleep"], "sleep/minutesAsleep": ["Sleep Minutes Asleep", TIME_MINUTES, "sleep"],
"sleep/minutesAwake": ["Sleep Minutes Awake", TIME_MINUTES, "sleep"], "sleep/minutesAwake": ["Sleep Minutes Awake", TIME_MINUTES, "sleep"],

View File

@ -17,6 +17,7 @@ from homeassistant.const import (
CONF_USERNAME, CONF_USERNAME,
TEMP_CELSIUS, TEMP_CELSIUS,
TIME_SECONDS, TIME_SECONDS,
UNIT_PERCENTAGE,
) )
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -37,7 +38,7 @@ SENSOR_TYPES = {
"time": [ATTR_TIME, TIME_SECONDS], "time": [ATTR_TIME, TIME_SECONDS],
"pm": [ATTR_PM2_5, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, "mdi:cloud"], "pm": [ATTR_PM2_5, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, "mdi:cloud"],
"tmp": [ATTR_TEMPERATURE, TEMP_CELSIUS, "mdi:thermometer"], "tmp": [ATTR_TEMPERATURE, TEMP_CELSIUS, "mdi:thermometer"],
"hum": [ATTR_HUMIDITY, "%", "mdi:water-percent"], "hum": [ATTR_HUMIDITY, UNIT_PERCENTAGE, "mdi:water-percent"],
"co2": [ "co2": [
ATTR_CARBON_DIOXIDE, ATTR_CARBON_DIOXIDE,
CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_PARTS_PER_MILLION,
@ -48,7 +49,7 @@ SENSOR_TYPES = {
CONCENTRATION_PARTS_PER_BILLION, CONCENTRATION_PARTS_PER_BILLION,
"mdi:cloud", "mdi:cloud",
], ],
"allpollu": [ATTR_FOOBOT_INDEX, "%", "mdi:percent"], "allpollu": [ATTR_FOOBOT_INDEX, UNIT_PERCENTAGE, "mdi:percent"],
} }
SCAN_INTERVAL = timedelta(minutes=10) SCAN_INTERVAL = timedelta(minutes=10)

View File

@ -1,5 +1,5 @@
"""Constants for the Garmin Connect integration.""" """Constants for the Garmin Connect integration."""
from homeassistant.const import DEVICE_CLASS_TIMESTAMP, TIME_MINUTES from homeassistant.const import DEVICE_CLASS_TIMESTAMP, TIME_MINUTES, UNIT_PERCENTAGE
DOMAIN = "garmin_connect" DOMAIN = "garmin_connect"
ATTRIBUTION = "Data provided by garmin.com" ATTRIBUTION = "Data provided by garmin.com"
@ -159,45 +159,51 @@ GARMIN_ENTITY_LIST = {
None, None,
True, True,
], ],
"stressPercentage": ["Stress Percentage", "%", "mdi:flash-alert", None, False], "stressPercentage": [
"Stress Percentage",
UNIT_PERCENTAGE,
"mdi:flash-alert",
None,
False,
],
"restStressPercentage": [ "restStressPercentage": [
"Rest Stress Percentage", "Rest Stress Percentage",
"%", UNIT_PERCENTAGE,
"mdi:flash-alert", "mdi:flash-alert",
None, None,
False, False,
], ],
"activityStressPercentage": [ "activityStressPercentage": [
"Activity Stress Percentage", "Activity Stress Percentage",
"%", UNIT_PERCENTAGE,
"mdi:flash-alert", "mdi:flash-alert",
None, None,
False, False,
], ],
"uncategorizedStressPercentage": [ "uncategorizedStressPercentage": [
"Uncat. Stress Percentage", "Uncat. Stress Percentage",
"%", UNIT_PERCENTAGE,
"mdi:flash-alert", "mdi:flash-alert",
None, None,
False, False,
], ],
"lowStressPercentage": [ "lowStressPercentage": [
"Low Stress Percentage", "Low Stress Percentage",
"%", UNIT_PERCENTAGE,
"mdi:flash-alert", "mdi:flash-alert",
None, None,
False, False,
], ],
"mediumStressPercentage": [ "mediumStressPercentage": [
"Medium Stress Percentage", "Medium Stress Percentage",
"%", UNIT_PERCENTAGE,
"mdi:flash-alert", "mdi:flash-alert",
None, None,
False, False,
], ],
"highStressPercentage": [ "highStressPercentage": [
"High Stress Percentage", "High Stress Percentage",
"%", UNIT_PERCENTAGE,
"mdi:flash-alert", "mdi:flash-alert",
None, None,
False, False,
@ -225,42 +231,42 @@ GARMIN_ENTITY_LIST = {
], ],
"bodyBatteryChargedValue": [ "bodyBatteryChargedValue": [
"Body Battery Charged", "Body Battery Charged",
"%", UNIT_PERCENTAGE,
"mdi:battery-charging-100", "mdi:battery-charging-100",
None, None,
True, True,
], ],
"bodyBatteryDrainedValue": [ "bodyBatteryDrainedValue": [
"Body Battery Drained", "Body Battery Drained",
"%", UNIT_PERCENTAGE,
"mdi:battery-alert-variant-outline", "mdi:battery-alert-variant-outline",
None, None,
True, True,
], ],
"bodyBatteryHighestValue": [ "bodyBatteryHighestValue": [
"Body Battery Highest", "Body Battery Highest",
"%", UNIT_PERCENTAGE,
"mdi:battery-heart", "mdi:battery-heart",
None, None,
True, True,
], ],
"bodyBatteryLowestValue": [ "bodyBatteryLowestValue": [
"Body Battery Lowest", "Body Battery Lowest",
"%", UNIT_PERCENTAGE,
"mdi:battery-heart-outline", "mdi:battery-heart-outline",
None, None,
True, True,
], ],
"bodyBatteryMostRecentValue": [ "bodyBatteryMostRecentValue": [
"Body Battery Most Recent", "Body Battery Most Recent",
"%", UNIT_PERCENTAGE,
"mdi:battery-positive", "mdi:battery-positive",
None, None,
True, True,
], ],
"averageSpo2": ["Average SPO2", "%", "mdi:diabetes", None, True], "averageSpo2": ["Average SPO2", UNIT_PERCENTAGE, "mdi:diabetes", None, True],
"lowestSpo2": ["Lowest SPO2", "%", "mdi:diabetes", None, True], "lowestSpo2": ["Lowest SPO2", UNIT_PERCENTAGE, "mdi:diabetes", None, True],
"latestSpo2": ["Latest SPO2", "%", "mdi:diabetes", None, True], "latestSpo2": ["Latest SPO2", UNIT_PERCENTAGE, "mdi:diabetes", None, True],
"latestSpo2ReadingTimeLocal": [ "latestSpo2ReadingTimeLocal": [
"Latest SPO2 Time", "Latest SPO2 Time",
"", "",
@ -270,7 +276,7 @@ GARMIN_ENTITY_LIST = {
], ],
"averageMonitoringEnvironmentAltitude": [ "averageMonitoringEnvironmentAltitude": [
"Average Altitude", "Average Altitude",
"%", UNIT_PERCENTAGE,
"mdi:image-filter-hdr", "mdi:image-filter-hdr",
None, None,
False, False,

View File

@ -2,7 +2,7 @@
from datetime import timedelta from datetime import timedelta
from typing import Any, Dict from typing import Any, Dict
from homeassistant.const import DEVICE_CLASS_BATTERY from homeassistant.const import DEVICE_CLASS_BATTERY, UNIT_PERCENTAGE
from homeassistant.helpers.typing import ConfigType, HomeAssistantType from homeassistant.helpers.typing import ConfigType, HomeAssistantType
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
@ -77,7 +77,7 @@ class GeniusBattery(GeniusDevice):
@property @property
def unit_of_measurement(self) -> str: def unit_of_measurement(self) -> str:
"""Return the unit of measurement of the sensor.""" """Return the unit of measurement of the sensor."""
return "%" return UNIT_PERCENTAGE
@property @property
def state(self) -> str: def state(self) -> str:

View File

@ -1,5 +1,10 @@
"""Constants for Glances component.""" """Constants for Glances component."""
from homeassistant.const import DATA_GIBIBYTES, DATA_MEBIBYTES, TEMP_CELSIUS from homeassistant.const import (
DATA_GIBIBYTES,
DATA_MEBIBYTES,
TEMP_CELSIUS,
UNIT_PERCENTAGE,
)
DOMAIN = "glances" DOMAIN = "glances"
CONF_VERSION = "version" CONF_VERSION = "version"
@ -14,13 +19,13 @@ DATA_UPDATED = "glances_data_updated"
SUPPORTED_VERSIONS = [2, 3] SUPPORTED_VERSIONS = [2, 3]
SENSOR_TYPES = { SENSOR_TYPES = {
"disk_use_percent": ["fs", "used percent", "%", "mdi:harddisk"], "disk_use_percent": ["fs", "used percent", UNIT_PERCENTAGE, "mdi:harddisk"],
"disk_use": ["fs", "used", DATA_GIBIBYTES, "mdi:harddisk"], "disk_use": ["fs", "used", DATA_GIBIBYTES, "mdi:harddisk"],
"disk_free": ["fs", "free", DATA_GIBIBYTES, "mdi:harddisk"], "disk_free": ["fs", "free", DATA_GIBIBYTES, "mdi:harddisk"],
"memory_use_percent": ["mem", "RAM used percent", "%", "mdi:memory"], "memory_use_percent": ["mem", "RAM used percent", UNIT_PERCENTAGE, "mdi:memory"],
"memory_use": ["mem", "RAM used", DATA_MEBIBYTES, "mdi:memory"], "memory_use": ["mem", "RAM used", DATA_MEBIBYTES, "mdi:memory"],
"memory_free": ["mem", "RAM free", DATA_MEBIBYTES, "mdi:memory"], "memory_free": ["mem", "RAM free", DATA_MEBIBYTES, "mdi:memory"],
"swap_use_percent": ["memswap", "Swap used percent", "%", "mdi:memory"], "swap_use_percent": ["memswap", "Swap used percent", UNIT_PERCENTAGE, "mdi:memory"],
"swap_use": ["memswap", "Swap used", DATA_GIBIBYTES, "mdi:memory"], "swap_use": ["memswap", "Swap used", DATA_GIBIBYTES, "mdi:memory"],
"swap_free": ["memswap", "Swap free", DATA_GIBIBYTES, "mdi:memory"], "swap_free": ["memswap", "Swap free", DATA_GIBIBYTES, "mdi:memory"],
"processor_load": ["load", "CPU load", "15 min", "mdi:memory"], "processor_load": ["load", "CPU load", "15 min", "mdi:memory"],
@ -28,10 +33,10 @@ SENSOR_TYPES = {
"process_total": ["processcount", "Total", "Count", "mdi:memory"], "process_total": ["processcount", "Total", "Count", "mdi:memory"],
"process_thread": ["processcount", "Thread", "Count", "mdi:memory"], "process_thread": ["processcount", "Thread", "Count", "mdi:memory"],
"process_sleeping": ["processcount", "Sleeping", "Count", "mdi:memory"], "process_sleeping": ["processcount", "Sleeping", "Count", "mdi:memory"],
"cpu_use_percent": ["cpu", "CPU used", "%", "mdi:memory"], "cpu_use_percent": ["cpu", "CPU used", UNIT_PERCENTAGE, "mdi:memory"],
"sensor_temp": ["sensors", "Temp", TEMP_CELSIUS, "mdi:thermometer"], "sensor_temp": ["sensors", "Temp", TEMP_CELSIUS, "mdi:thermometer"],
"docker_active": ["docker", "Containers active", "", "mdi:docker"], "docker_active": ["docker", "Containers active", "", "mdi:docker"],
"docker_cpu_use": ["docker", "Containers CPU used", "%", "mdi:docker"], "docker_cpu_use": ["docker", "Containers CPU used", UNIT_PERCENTAGE, "mdi:docker"],
"docker_memory_use": [ "docker_memory_use": [
"docker", "docker",
"Containers RAM used", "Containers RAM used",

View File

@ -14,6 +14,7 @@ from homeassistant.const import (
CONF_TYPE, CONF_TYPE,
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_START,
TIME_HOURS, TIME_HOURS,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.exceptions import TemplateError from homeassistant.exceptions import TemplateError
@ -36,7 +37,11 @@ CONF_TYPE_COUNT = "count"
CONF_TYPE_KEYS = [CONF_TYPE_TIME, CONF_TYPE_RATIO, CONF_TYPE_COUNT] CONF_TYPE_KEYS = [CONF_TYPE_TIME, CONF_TYPE_RATIO, CONF_TYPE_COUNT]
DEFAULT_NAME = "unnamed statistics" DEFAULT_NAME = "unnamed statistics"
UNITS = {CONF_TYPE_TIME: TIME_HOURS, CONF_TYPE_RATIO: "%", CONF_TYPE_COUNT: ""} UNITS = {
CONF_TYPE_TIME: TIME_HOURS,
CONF_TYPE_RATIO: UNIT_PERCENTAGE,
CONF_TYPE_COUNT: "",
}
ICON = "mdi:chart-line" ICON = "mdi:chart-line"
ATTR_VALUE = "value" ATTR_VALUE = "value"

View File

@ -23,6 +23,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entityfilter import FILTER_SCHEMA from homeassistant.helpers.entityfilter import FILTER_SCHEMA
@ -236,7 +237,7 @@ def get_accessory(hass, driver, state, aid, config):
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
): ):
a_type = "TemperatureSensor" a_type = "TemperatureSensor"
elif device_class == DEVICE_CLASS_HUMIDITY and unit == "%": elif device_class == DEVICE_CLASS_HUMIDITY and unit == UNIT_PERCENTAGE:
a_type = "HumiditySensor" a_type = "HumiditySensor"
elif device_class == DEVICE_CLASS_PM25 or DEVICE_CLASS_PM25 in state.entity_id: elif device_class == DEVICE_CLASS_PM25 or DEVICE_CLASS_PM25 in state.entity_id:
a_type = "AirQualitySensor" a_type = "AirQualitySensor"

View File

@ -8,6 +8,7 @@ from homeassistant.const import (
DEVICE_CLASS_ILLUMINANCE, DEVICE_CLASS_ILLUMINANCE,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
@ -18,7 +19,6 @@ TEMP_C_ICON = "mdi:thermometer"
BRIGHTNESS_ICON = "mdi:brightness-6" BRIGHTNESS_ICON = "mdi:brightness-6"
CO2_ICON = "mdi:periodic-table-co2" CO2_ICON = "mdi:periodic-table-co2"
UNIT_PERCENT = "%"
UNIT_LUX = "lux" UNIT_LUX = "lux"
@ -52,7 +52,7 @@ class HomeKitHumiditySensor(HomeKitEntity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return units for the sensor.""" """Return units for the sensor."""
return UNIT_PERCENT return UNIT_PERCENTAGE
def _update_relative_humidity_current(self, value): def _update_relative_humidity_current(self, value):
self._state = value self._state = value
@ -234,7 +234,7 @@ class HomeKitBatterySensor(HomeKitEntity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return units for the sensor.""" """Return units for the sensor."""
return UNIT_PERCENT return UNIT_PERCENTAGE
def _update_battery_level(self, value): def _update_battery_level(self, value):
self._state = value self._state = value

View File

@ -9,6 +9,7 @@ from homeassistant.const import (
ENERGY_WATT_HOUR, ENERGY_WATT_HOUR,
POWER_WATT, POWER_WATT,
SPEED_KILOMETERS_PER_HOUR, SPEED_KILOMETERS_PER_HOUR,
UNIT_PERCENTAGE,
VOLUME_CUBIC_METERS, VOLUME_CUBIC_METERS,
) )
@ -32,7 +33,7 @@ HM_STATE_HA_CAST = {
} }
HM_UNIT_HA_CAST = { HM_UNIT_HA_CAST = {
"HUMIDITY": "%", "HUMIDITY": UNIT_PERCENTAGE,
"TEMPERATURE": "°C", "TEMPERATURE": "°C",
"ACTUAL_TEMPERATURE": "°C", "ACTUAL_TEMPERATURE": "°C",
"BRIGHTNESS": "#", "BRIGHTNESS": "#",

View File

@ -33,6 +33,7 @@ from homeassistant.const import (
POWER_WATT, POWER_WATT,
SPEED_KILOMETERS_PER_HOUR, SPEED_KILOMETERS_PER_HOUR,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.typing import HomeAssistantType from homeassistant.helpers.typing import HomeAssistantType
@ -155,7 +156,7 @@ class HomematicipAccesspointStatus(HomematicipGenericDevice):
@property @property
def unit_of_measurement(self) -> str: def unit_of_measurement(self) -> str:
"""Return the unit this state is expressed in.""" """Return the unit this state is expressed in."""
return "%" return UNIT_PERCENTAGE
@property @property
def device_state_attributes(self) -> Dict[str, Any]: def device_state_attributes(self) -> Dict[str, Any]:
@ -194,7 +195,7 @@ class HomematicipHeatingThermostat(HomematicipGenericDevice):
@property @property
def unit_of_measurement(self) -> str: def unit_of_measurement(self) -> str:
"""Return the unit this state is expressed in.""" """Return the unit this state is expressed in."""
return "%" return UNIT_PERCENTAGE
class HomematicipHumiditySensor(HomematicipGenericDevice): class HomematicipHumiditySensor(HomematicipGenericDevice):
@ -217,7 +218,7 @@ class HomematicipHumiditySensor(HomematicipGenericDevice):
@property @property
def unit_of_measurement(self) -> str: def unit_of_measurement(self) -> str:
"""Return the unit this state is expressed in.""" """Return the unit this state is expressed in."""
return "%" return UNIT_PERCENTAGE
class HomematicipTemperatureSensor(HomematicipGenericDevice): class HomematicipTemperatureSensor(HomematicipGenericDevice):

View File

@ -8,7 +8,7 @@ import smbus # pylint: disable=import-error
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_NAME, TEMP_FAHRENHEIT from homeassistant.const import CONF_NAME, TEMP_FAHRENHEIT, UNIT_PERCENTAGE
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle from homeassistant.util import Throttle
@ -50,7 +50,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
dev = [ dev = [
HTU21DSensor(sensor_handler, name, SENSOR_TEMPERATURE, temp_unit), HTU21DSensor(sensor_handler, name, SENSOR_TEMPERATURE, temp_unit),
HTU21DSensor(sensor_handler, name, SENSOR_HUMIDITY, "%"), HTU21DSensor(sensor_handler, name, SENSOR_HUMIDITY, UNIT_PERCENTAGE),
] ]
async_add_entities(dev) async_add_entities(dev)

View File

@ -3,7 +3,7 @@ import logging
from typing import Dict from typing import Dict
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_USERNAME, DEVICE_CLASS_BATTERY from homeassistant.const import CONF_USERNAME, DEVICE_CLASS_BATTERY, UNIT_PERCENTAGE
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
@ -61,7 +61,7 @@ class IcloudDeviceBatterySensor(Entity):
@property @property
def unit_of_measurement(self) -> str: def unit_of_measurement(self) -> str:
"""Battery state measured in percentage.""" """Battery state measured in percentage."""
return "%" return UNIT_PERCENTAGE
@property @property
def icon(self) -> str: def icon(self) -> str:

View File

@ -1,9 +1,13 @@
"""Support for Home Assistant iOS app sensors.""" """Support for Home Assistant iOS app sensors."""
from homeassistant.components import ios from homeassistant.components import ios
from homeassistant.const import UNIT_PERCENTAGE
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
SENSOR_TYPES = {"level": ["Battery Level", "%"], "state": ["Battery State", None]} SENSOR_TYPES = {
"level": ["Battery Level", UNIT_PERCENTAGE],
"state": ["Battery State", None],
}
DEFAULT_ICON_LEVEL = "mdi:battery" DEFAULT_ICON_LEVEL = "mdi:battery"
DEFAULT_ICON_STATE = "mdi:power-plug" DEFAULT_ICON_STATE = "mdi:power-plug"

View File

@ -12,6 +12,7 @@ from homeassistant.const import (
CONF_PASSWORD, CONF_PASSWORD,
CONF_USERNAME, CONF_USERNAME,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
UNIT_PERCENTAGE,
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_validation as cv, discovery from homeassistant.helpers import config_validation as cv, discovery
@ -101,7 +102,7 @@ NODE_FILTERS = {
}, },
"light": { "light": {
"uom": ["51"], "uom": ["51"],
"states": ["on", "off", "%"], "states": ["on", "off", UNIT_PERCENTAGE],
"node_def_id": [ "node_def_id": [
"DimmerLampSwitch", "DimmerLampSwitch",
"DimmerLampSwitch_ADV", "DimmerLampSwitch_ADV",

View File

@ -18,6 +18,7 @@ from homeassistant.const import (
TIME_MONTHS, TIME_MONTHS,
TIME_SECONDS, TIME_SECONDS,
TIME_YEARS, TIME_YEARS,
UNIT_PERCENTAGE,
UNIT_UV_INDEX, UNIT_UV_INDEX,
) )
from homeassistant.helpers.typing import ConfigType from homeassistant.helpers.typing import ConfigType
@ -74,7 +75,7 @@ UOM_FRIENDLY_NAME = {
"48": SPEED_MILES_PER_HOUR, "48": SPEED_MILES_PER_HOUR,
"49": SPEED_METERS_PER_SECOND, "49": SPEED_METERS_PER_SECOND,
"50": "ohm", "50": "ohm",
"51": "%", "51": UNIT_PERCENTAGE,
"52": "lb", "52": "lb",
"53": "power factor", "53": "power factor",
"54": CONCENTRATION_PARTS_PER_MILLION, "54": CONCENTRATION_PARTS_PER_MILLION,

View File

@ -7,6 +7,7 @@ from homeassistant.const import (
CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_BILLION, CONCENTRATION_PARTS_PER_BILLION,
CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_PARTS_PER_MILLION,
UNIT_PERCENTAGE,
) )
DOMAIN = "kaiterra" DOMAIN = "kaiterra"
@ -53,7 +54,7 @@ ATTR_AQI_POLLUTANT = "air_quality_index_pollutant"
AVAILABLE_AQI_STANDARDS = ["us", "cn", "in"] AVAILABLE_AQI_STANDARDS = ["us", "cn", "in"]
AVAILABLE_UNITS = [ AVAILABLE_UNITS = [
"x", "x",
"%", UNIT_PERCENTAGE,
"C", "C",
"F", "F",
CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER, CONCENTRATION_MILLIGRAMS_PER_CUBIC_METER,

View File

@ -10,6 +10,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
@ -21,7 +22,7 @@ _LOGGER = logging.getLogger(__name__)
SENSOR_TYPES = { SENSOR_TYPES = {
DEVICE_CLASS_TEMPERATURE: ["Temperature", TEMP_CELSIUS], DEVICE_CLASS_TEMPERATURE: ["Temperature", TEMP_CELSIUS],
DEVICE_CLASS_HUMIDITY: ["Humidity", "%"], DEVICE_CLASS_HUMIDITY: ["Humidity", UNIT_PERCENTAGE],
} }
@ -119,9 +120,7 @@ class KonnectedSensor(Entity):
@property @property
def device_info(self): def device_info(self):
"""Return the device info.""" """Return the device info."""
return { return {"identifiers": {(KONNECTED_DOMAIN, self._device_id)}}
"identifiers": {(KONNECTED_DOMAIN, self._device_id)},
}
async def async_added_to_hass(self): async def async_added_to_hass(self):
"""Store entity_id and register state change callback.""" """Store entity_id and register state change callback."""

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
CONF_TYPE, CONF_TYPE,
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -193,7 +194,7 @@ class LaCrosseHumidity(LaCrosseSensor):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit of measurement.""" """Return the unit of measurement."""
return "%" return UNIT_PERCENTAGE
@property @property
def state(self): def state(self):

View File

@ -1,7 +1,7 @@
"""Constants for the LCN component.""" """Constants for the LCN component."""
from itertools import product from itertools import product
from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT from homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_PERCENTAGE
DOMAIN = "lcn" DOMAIN = "lcn"
DATA_LCN = "lcn" DATA_LCN = "lcn"
@ -153,7 +153,7 @@ VAR_UNITS = [
"LX", "LX",
"M/S", "M/S",
"METERPERSECOND", "METERPERSECOND",
"%", UNIT_PERCENTAGE,
"PERCENT", "PERCENT",
"PPM", "PPM",
"VOLT", "VOLT",

View File

@ -6,7 +6,12 @@ from batinfo import Batteries
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_NAME, CONF_NAME, DEVICE_CLASS_BATTERY from homeassistant.const import (
ATTR_NAME,
CONF_NAME,
DEVICE_CLASS_BATTERY,
UNIT_PERCENTAGE,
)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -98,7 +103,7 @@ class LinuxBatterySensor(Entity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit the value is expressed in.""" """Return the unit the value is expressed in."""
return "%" return UNIT_PERCENTAGE
@property @property
def device_state_attributes(self): def device_state_attributes(self):

View File

@ -1,4 +1,5 @@
"""Constants in Logi Circle component.""" """Constants in Logi Circle component."""
from homeassistant.const import UNIT_PERCENTAGE
CONF_CLIENT_ID = "client_id" CONF_CLIENT_ID = "client_id"
CONF_CLIENT_SECRET = "client_secret" CONF_CLIENT_SECRET = "client_secret"
@ -15,11 +16,11 @@ RECORDING_MODE_KEY = "RECORDING_MODE"
# Sensor types: Name, unit of measure, icon per sensor key. # Sensor types: Name, unit of measure, icon per sensor key.
LOGI_SENSORS = { LOGI_SENSORS = {
"battery_level": ["Battery", "%", "battery-50"], "battery_level": ["Battery", UNIT_PERCENTAGE, "battery-50"],
"last_activity_time": ["Last Activity", None, "history"], "last_activity_time": ["Last Activity", None, "history"],
"recording": ["Recording Mode", None, "eye"], "recording": ["Recording Mode", None, "eye"],
"signal_strength_category": ["WiFi Signal Category", None, "wifi"], "signal_strength_category": ["WiFi Signal Category", None, "wifi"],
"signal_strength_percentage": ["WiFi Signal Strength", "%", "wifi"], "signal_strength_percentage": ["WiFi Signal Strength", UNIT_PERCENTAGE, "wifi"],
"streaming": ["Streaming Mode", None, "camera"], "streaming": ["Streaming Mode", None, "camera"],
} }

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_SENSORS, CONF_SENSORS,
CONF_SHOW_ON_MAP, CONF_SHOW_ON_MAP,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.exceptions import ConfigEntryNotReady
@ -42,7 +43,7 @@ TOPIC_UPDATE = f"{DOMAIN}_data_update"
SENSORS = { SENSORS = {
SENSOR_TEMPERATURE: ["Temperature", "mdi:thermometer", TEMP_CELSIUS], SENSOR_TEMPERATURE: ["Temperature", "mdi:thermometer", TEMP_CELSIUS],
SENSOR_HUMIDITY: ["Humidity", "mdi:water-percent", "%"], SENSOR_HUMIDITY: ["Humidity", "mdi:water-percent", UNIT_PERCENTAGE],
SENSOR_PRESSURE: ["Pressure", "mdi:arrow-down-bold", "Pa"], SENSOR_PRESSURE: ["Pressure", "mdi:arrow-down-bold", "Pa"],
SENSOR_PRESSURE_AT_SEALEVEL: ["Pressure at sealevel", "mdi:download", "Pa"], SENSOR_PRESSURE_AT_SEALEVEL: ["Pressure at sealevel", "mdi:download", "Pa"],
SENSOR_PM10: [ SENSOR_PM10: [

View File

@ -1,6 +1,11 @@
"""Meteo-France component constants.""" """Meteo-France component constants."""
from homeassistant.const import SPEED_KILOMETERS_PER_HOUR, TEMP_CELSIUS, TIME_MINUTES from homeassistant.const import (
SPEED_KILOMETERS_PER_HOUR,
TEMP_CELSIUS,
TIME_MINUTES,
UNIT_PERCENTAGE,
)
DOMAIN = "meteo_france" DOMAIN = "meteo_france"
PLATFORMS = ["sensor", "weather"] PLATFORMS = ["sensor", "weather"]
@ -17,25 +22,25 @@ SENSOR_TYPE_CLASS = "device_class"
SENSOR_TYPES = { SENSOR_TYPES = {
"rain_chance": { "rain_chance": {
SENSOR_TYPE_NAME: "Rain chance", SENSOR_TYPE_NAME: "Rain chance",
SENSOR_TYPE_UNIT: "%", SENSOR_TYPE_UNIT: UNIT_PERCENTAGE,
SENSOR_TYPE_ICON: "mdi:weather-rainy", SENSOR_TYPE_ICON: "mdi:weather-rainy",
SENSOR_TYPE_CLASS: None, SENSOR_TYPE_CLASS: None,
}, },
"freeze_chance": { "freeze_chance": {
SENSOR_TYPE_NAME: "Freeze chance", SENSOR_TYPE_NAME: "Freeze chance",
SENSOR_TYPE_UNIT: "%", SENSOR_TYPE_UNIT: UNIT_PERCENTAGE,
SENSOR_TYPE_ICON: "mdi:snowflake", SENSOR_TYPE_ICON: "mdi:snowflake",
SENSOR_TYPE_CLASS: None, SENSOR_TYPE_CLASS: None,
}, },
"thunder_chance": { "thunder_chance": {
SENSOR_TYPE_NAME: "Thunder chance", SENSOR_TYPE_NAME: "Thunder chance",
SENSOR_TYPE_UNIT: "%", SENSOR_TYPE_UNIT: UNIT_PERCENTAGE,
SENSOR_TYPE_ICON: "mdi:weather-lightning", SENSOR_TYPE_ICON: "mdi:weather-lightning",
SENSOR_TYPE_CLASS: None, SENSOR_TYPE_CLASS: None,
}, },
"snow_chance": { "snow_chance": {
SENSOR_TYPE_NAME: "Snow chance", SENSOR_TYPE_NAME: "Snow chance",
SENSOR_TYPE_UNIT: "%", SENSOR_TYPE_UNIT: UNIT_PERCENTAGE,
SENSOR_TYPE_ICON: "mdi:weather-snowy", SENSOR_TYPE_ICON: "mdi:weather-snowy",
SENSOR_TYPE_CLASS: None, SENSOR_TYPE_CLASS: None,
}, },

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
CONF_NAME, CONF_NAME,
SPEED_MILES_PER_HOUR, SPEED_MILES_PER_HOUR,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -71,8 +72,8 @@ SENSOR_TYPES = {
"visibility": ["Visibility", None], "visibility": ["Visibility", None],
"visibility_distance": ["Visibility Distance", "km"], "visibility_distance": ["Visibility Distance", "km"],
"uv": ["UV", None], "uv": ["UV", None],
"precipitation": ["Probability of Precipitation", "%"], "precipitation": ["Probability of Precipitation", UNIT_PERCENTAGE],
"humidity": ["Humidity", "%"], "humidity": ["Humidity", UNIT_PERCENTAGE],
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(

View File

@ -6,7 +6,7 @@ from pycsspeechtts import pycsspeechtts
import voluptuous as vol import voluptuous as vol
from homeassistant.components.tts import CONF_LANG, PLATFORM_SCHEMA, Provider from homeassistant.components.tts import CONF_LANG, PLATFORM_SCHEMA, Provider
from homeassistant.const import CONF_API_KEY, CONF_TYPE from homeassistant.const import CONF_API_KEY, CONF_TYPE, UNIT_PERCENTAGE
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
CONF_GENDER = "gender" CONF_GENDER = "gender"
@ -122,8 +122,8 @@ class MicrosoftProvider(Provider):
self._gender = gender self._gender = gender
self._type = ttype self._type = ttype
self._output = DEFAULT_OUTPUT self._output = DEFAULT_OUTPUT
self._rate = f"{rate}%" self._rate = f"{rate}{UNIT_PERCENTAGE}"
self._volume = f"{volume}%" self._volume = f"{volume}{UNIT_PERCENTAGE}"
self._pitch = pitch self._pitch = pitch
self._contour = contour self._contour = contour
self._region = region self._region = region

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
CONF_NAME, CONF_NAME,
CONF_SCAN_INTERVAL, CONF_SCAN_INTERVAL,
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_START,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -43,9 +44,9 @@ SCAN_INTERVAL = timedelta(seconds=1200)
SENSOR_TYPES = { SENSOR_TYPES = {
"temperature": ["Temperature", "°C", "mdi:thermometer"], "temperature": ["Temperature", "°C", "mdi:thermometer"],
"light": ["Light intensity", "lx", "mdi:white-balance-sunny"], "light": ["Light intensity", "lx", "mdi:white-balance-sunny"],
"moisture": ["Moisture", "%", "mdi:water-percent"], "moisture": ["Moisture", UNIT_PERCENTAGE, "mdi:water-percent"],
"conductivity": ["Conductivity", "µS/cm", "mdi:flash-circle"], "conductivity": ["Conductivity", "µS/cm", "mdi:flash-circle"],
"battery": ["Battery", "%", "mdi:battery-charging"], "battery": ["Battery", UNIT_PERCENTAGE, "mdi:battery-charging"],
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY,
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -46,8 +47,8 @@ DEFAULT_TIMEOUT = 10
# Sensor types are defined like: Name, units # Sensor types are defined like: Name, units
SENSOR_TYPES = { SENSOR_TYPES = {
"temperature": [DEVICE_CLASS_TEMPERATURE, "Temperature", "°C"], "temperature": [DEVICE_CLASS_TEMPERATURE, "Temperature", "°C"],
"humidity": [DEVICE_CLASS_HUMIDITY, "Humidity", "%"], "humidity": [DEVICE_CLASS_HUMIDITY, "Humidity", UNIT_PERCENTAGE],
"battery": [DEVICE_CLASS_BATTERY, "Battery", "%"], "battery": [DEVICE_CLASS_BATTERY, "Battery", UNIT_PERCENTAGE],
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
STATE_UNKNOWN, STATE_UNKNOWN,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -245,7 +246,7 @@ class MoldIndicator(Entity):
) )
return None return None
if unit != "%": if unit != UNIT_PERCENTAGE:
_LOGGER.error( _LOGGER.error(
"Humidity sensor %s has unsupported unit: %s %s", "Humidity sensor %s has unsupported unit: %s %s",
state.entity_id, state.entity_id,
@ -360,7 +361,7 @@ class MoldIndicator(Entity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit of measurement.""" """Return the unit of measurement."""
return "%" return UNIT_PERCENTAGE
@property @property
def state(self): def state(self):

View File

@ -2,6 +2,7 @@
import logging import logging
from homeassistant.components.sensor import ENTITY_ID_FORMAT from homeassistant.components.sensor import ENTITY_ID_FORMAT
from homeassistant.const import UNIT_PERCENTAGE
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
@ -25,7 +26,9 @@ SENSORS = [
EVSensorConfig("Electric Range", "electricRange", "miles", "mdi:speedometer"), EVSensorConfig("Electric Range", "electricRange", "miles", "mdi:speedometer"),
EVSensorConfig("Charged By", "estimatedFullChargeBy"), EVSensorConfig("Charged By", "estimatedFullChargeBy"),
EVSensorConfig("Charge Mode", "chargeMode"), EVSensorConfig("Charge Mode", "chargeMode"),
EVSensorConfig("Battery Level", BATTERY_SENSOR, "%", "mdi:battery", ["charging"]), EVSensorConfig(
"Battery Level", BATTERY_SENSOR, UNIT_PERCENTAGE, "mdi:battery", ["charging"]
),
] ]

View File

@ -7,13 +7,14 @@ from homeassistant.const import (
POWER_WATT, POWER_WATT,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
SENSORS = { SENSORS = {
"V_TEMP": [None, "mdi:thermometer"], "V_TEMP": [None, "mdi:thermometer"],
"V_HUM": ["%", "mdi:water-percent"], "V_HUM": [UNIT_PERCENTAGE, "mdi:water-percent"],
"V_DIMMER": ["%", "mdi:percent"], "V_DIMMER": [UNIT_PERCENTAGE, "mdi:percent"],
"V_PERCENTAGE": ["%", "mdi:percent"], "V_PERCENTAGE": [UNIT_PERCENTAGE, "mdi:percent"],
"V_PRESSURE": [None, "mdi:gauge"], "V_PRESSURE": [None, "mdi:gauge"],
"V_FORECAST": [None, "mdi:weather-partly-cloudy"], "V_FORECAST": [None, "mdi:weather-partly-cloudy"],
"V_RAIN": [None, "mdi:weather-rainy"], "V_RAIN": [None, "mdi:weather-rainy"],
@ -26,7 +27,7 @@ SENSORS = {
"V_IMPEDANCE": ["ohm", None], "V_IMPEDANCE": ["ohm", None],
"V_WATT": [POWER_WATT, None], "V_WATT": [POWER_WATT, None],
"V_KWH": [ENERGY_KILO_WATT_HOUR, None], "V_KWH": [ENERGY_KILO_WATT_HOUR, None],
"V_LIGHT_LEVEL": ["%", "mdi:white-balance-sunny"], "V_LIGHT_LEVEL": [UNIT_PERCENTAGE, "mdi:white-balance-sunny"],
"V_FLOW": ["m", "mdi:gauge"], "V_FLOW": ["m", "mdi:gauge"],
"V_VOLUME": ["", None], "V_VOLUME": ["", None],
"V_LEVEL": { "V_LEVEL": {

View File

@ -5,6 +5,7 @@ import logging
from pybotvac.exceptions import NeatoRobotException from pybotvac.exceptions import NeatoRobotException
from homeassistant.components.sensor import DEVICE_CLASS_BATTERY from homeassistant.components.sensor import DEVICE_CLASS_BATTERY
from homeassistant.const import UNIT_PERCENTAGE
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from .const import NEATO_DOMAIN, NEATO_LOGIN, NEATO_ROBOTS, SCAN_INTERVAL_MINUTES from .const import NEATO_DOMAIN, NEATO_LOGIN, NEATO_ROBOTS, SCAN_INTERVAL_MINUTES
@ -83,7 +84,7 @@ class NeatoSensor(Entity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return unit of measurement.""" """Return unit of measurement."""
return "%" return UNIT_PERCENTAGE
@property @property
def device_info(self): def device_info(self):

View File

@ -8,6 +8,7 @@ from homeassistant.const import (
STATE_OFF, STATE_OFF,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
from . import CONF_SENSORS, DATA_NEST, DATA_NEST_CONFIG, NestSensorDevice from . import CONF_SENSORS, DATA_NEST, DATA_NEST_CONFIG, NestSensorDevice
@ -41,7 +42,7 @@ _VALID_SENSOR_TYPES = (
+ STRUCTURE_CAMERA_SENSOR_TYPES + STRUCTURE_CAMERA_SENSOR_TYPES
) )
SENSOR_UNITS = {"humidity": "%"} SENSOR_UNITS = {"humidity": UNIT_PERCENTAGE}
SENSOR_DEVICE_CLASSES = {"humidity": DEVICE_CLASS_HUMIDITY} SENSOR_DEVICE_CLASSES = {"humidity": DEVICE_CLASS_HUMIDITY}

View File

@ -11,6 +11,7 @@ from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
SPEED_KILOMETERS_PER_HOUR, SPEED_KILOMETERS_PER_HOUR,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle from homeassistant.util import Throttle
@ -57,13 +58,18 @@ SENSOR_TYPES = {
"co2": ["CO2", CONCENTRATION_PARTS_PER_MILLION, "mdi:periodic-table-co2", None], "co2": ["CO2", CONCENTRATION_PARTS_PER_MILLION, "mdi:periodic-table-co2", None],
"pressure": ["Pressure", "mbar", "mdi:gauge", None], "pressure": ["Pressure", "mbar", "mdi:gauge", None],
"noise": ["Noise", "dB", "mdi:volume-high", None], "noise": ["Noise", "dB", "mdi:volume-high", None],
"humidity": ["Humidity", "%", "mdi:water-percent", DEVICE_CLASS_HUMIDITY], "humidity": [
"Humidity",
UNIT_PERCENTAGE,
"mdi:water-percent",
DEVICE_CLASS_HUMIDITY,
],
"rain": ["Rain", "mm", "mdi:weather-rainy", None], "rain": ["Rain", "mm", "mdi:weather-rainy", None],
"sum_rain_1": ["sum_rain_1", "mm", "mdi:weather-rainy", None], "sum_rain_1": ["sum_rain_1", "mm", "mdi:weather-rainy", None],
"sum_rain_24": ["sum_rain_24", "mm", "mdi:weather-rainy", None], "sum_rain_24": ["sum_rain_24", "mm", "mdi:weather-rainy", None],
"battery_vp": ["Battery", "", "mdi:battery", None], "battery_vp": ["Battery", "", "mdi:battery", None],
"battery_lvl": ["Battery_lvl", "", "mdi:battery", None], "battery_lvl": ["Battery_lvl", "", "mdi:battery", None],
"battery_percent": ["battery_percent", "%", None, DEVICE_CLASS_BATTERY], "battery_percent": ["battery_percent", UNIT_PERCENTAGE, None, DEVICE_CLASS_BATTERY],
"min_temp": ["Min Temp.", TEMP_CELSIUS, "mdi:thermometer", None], "min_temp": ["Min Temp.", TEMP_CELSIUS, "mdi:thermometer", None],
"max_temp": ["Max Temp.", TEMP_CELSIUS, "mdi:thermometer", None], "max_temp": ["Max Temp.", TEMP_CELSIUS, "mdi:thermometer", None],
"windangle": ["Angle", "", "mdi:compass", None], "windangle": ["Angle", "", "mdi:compass", None],

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_NAME, CONF_NAME,
CONF_PORT, CONF_PORT,
CONF_RESOURCES, CONF_RESOURCES,
UNIT_PERCENTAGE,
) )
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -78,7 +79,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
try: try:
resource_data = netdata.api.metrics[sensor] resource_data = netdata.api.metrics[sensor]
unit = ( unit = (
"%" UNIT_PERCENTAGE
if resource_data["units"] == "percentage" if resource_data["units"] == "percentage"
else resource_data["units"] else resource_data["units"]
) )

View File

@ -1,7 +1,7 @@
"""Define possible sensor types.""" """Define possible sensor types."""
from homeassistant.components.binary_sensor import DEVICE_CLASS_CONNECTIVITY from homeassistant.components.binary_sensor import DEVICE_CLASS_CONNECTIVITY
from homeassistant.const import DATA_MEBIBYTES from homeassistant.const import DATA_MEBIBYTES, UNIT_PERCENTAGE
SENSOR_SMS = "sms" SENSOR_SMS = "sms"
SENSOR_SMS_TOTAL = "sms_total" SENSOR_SMS_TOTAL = "sms_total"
@ -11,7 +11,7 @@ SENSOR_UNITS = {
SENSOR_SMS: "unread", SENSOR_SMS: "unread",
SENSOR_SMS_TOTAL: "messages", SENSOR_SMS_TOTAL: "messages",
SENSOR_USAGE: DATA_MEBIBYTES, SENSOR_USAGE: DATA_MEBIBYTES,
"radio_quality": "%", "radio_quality": UNIT_PERCENTAGE,
"rx_level": "dBm", "rx_level": "dBm",
"tx_level": "dBm", "tx_level": "dBm",
"upstream": None, "upstream": None,

View File

@ -14,7 +14,7 @@ from homeassistant.components.notify import (
PLATFORM_SCHEMA, PLATFORM_SCHEMA,
BaseNotificationService, BaseNotificationService,
) )
from homeassistant.const import CONF_HOST, CONF_TIMEOUT from homeassistant.const import CONF_HOST, CONF_TIMEOUT, UNIT_PERCENTAGE
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -66,7 +66,14 @@ POSITIONS = {
"center": 4, "center": 4,
} }
TRANSPARENCIES = {"default": 0, "0%": 1, "25%": 2, "50%": 3, "75%": 4, "100%": 5} TRANSPARENCIES = {
"default": 0,
f"0{UNIT_PERCENTAGE}": 1,
f"25{UNIT_PERCENTAGE}": 2,
f"50{UNIT_PERCENTAGE}": 3,
f"75{UNIT_PERCENTAGE}": 4,
f"100{UNIT_PERCENTAGE}": 5,
}
COLORS = { COLORS = {
"grey": "#607d8b", "grey": "#607d8b",

View File

@ -1,7 +1,7 @@
"""Battery Charge and Range Support for the Nissan Leaf.""" """Battery Charge and Range Support for the Nissan Leaf."""
import logging import logging
from homeassistant.const import DEVICE_CLASS_BATTERY from homeassistant.const import DEVICE_CLASS_BATTERY, UNIT_PERCENTAGE
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
from homeassistant.util.distance import LENGTH_KILOMETERS, LENGTH_MILES from homeassistant.util.distance import LENGTH_KILOMETERS, LENGTH_MILES
from homeassistant.util.unit_system import IMPERIAL_SYSTEM, METRIC_SYSTEM from homeassistant.util.unit_system import IMPERIAL_SYSTEM, METRIC_SYSTEM
@ -56,7 +56,7 @@ class LeafBatterySensor(LeafEntity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Battery state measured in percentage.""" """Battery state measured in percentage."""
return "%" return UNIT_PERCENTAGE
@property @property
def icon(self): def icon(self):

View File

@ -19,6 +19,7 @@ from homeassistant.const import (
STATE_UNKNOWN, STATE_UNKNOWN,
TEMP_CELSIUS, TEMP_CELSIUS,
TIME_SECONDS, TIME_SECONDS,
UNIT_PERCENTAGE,
) )
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -51,8 +52,8 @@ SENSOR_TYPES = {
"ups.firmware": ["Firmware Version", "", "mdi:information-outline"], "ups.firmware": ["Firmware Version", "", "mdi:information-outline"],
"ups.firmware.aux": ["Firmware Version 2", "", "mdi:information-outline"], "ups.firmware.aux": ["Firmware Version 2", "", "mdi:information-outline"],
"ups.temperature": ["UPS Temperature", TEMP_CELSIUS, "mdi:thermometer"], "ups.temperature": ["UPS Temperature", TEMP_CELSIUS, "mdi:thermometer"],
"ups.load": ["Load", "%", "mdi:gauge"], "ups.load": ["Load", UNIT_PERCENTAGE, "mdi:gauge"],
"ups.load.high": ["Overload Setting", "%", "mdi:gauge"], "ups.load.high": ["Overload Setting", UNIT_PERCENTAGE, "mdi:gauge"],
"ups.id": ["System identifier", "", "mdi:information-outline"], "ups.id": ["System identifier", "", "mdi:information-outline"],
"ups.delay.start": ["Load Restart Delay", TIME_SECONDS, "mdi:timer"], "ups.delay.start": ["Load Restart Delay", TIME_SECONDS, "mdi:timer"],
"ups.delay.reboot": ["UPS Reboot Delay", TIME_SECONDS, "mdi:timer"], "ups.delay.reboot": ["UPS Reboot Delay", TIME_SECONDS, "mdi:timer"],
@ -65,7 +66,7 @@ SENSOR_TYPES = {
"ups.test.date": ["Self-Test Date", "", "mdi:calendar"], "ups.test.date": ["Self-Test Date", "", "mdi:calendar"],
"ups.display.language": ["Language", "", "mdi:information-outline"], "ups.display.language": ["Language", "", "mdi:information-outline"],
"ups.contacts": ["External Contacts", "", "mdi:information-outline"], "ups.contacts": ["External Contacts", "", "mdi:information-outline"],
"ups.efficiency": ["Efficiency", "%", "mdi:gauge"], "ups.efficiency": ["Efficiency", UNIT_PERCENTAGE, "mdi:gauge"],
"ups.power": ["Current Apparent Power", "VA", "mdi:flash"], "ups.power": ["Current Apparent Power", "VA", "mdi:flash"],
"ups.power.nominal": ["Nominal Power", "VA", "mdi:flash"], "ups.power.nominal": ["Nominal Power", "VA", "mdi:flash"],
"ups.realpower": ["Current Real Power", POWER_WATT, "mdi:flash"], "ups.realpower": ["Current Real Power", POWER_WATT, "mdi:flash"],
@ -77,10 +78,18 @@ SENSOR_TYPES = {
"ups.start.battery": ["Start on Battery", "", "mdi:information-outline"], "ups.start.battery": ["Start on Battery", "", "mdi:information-outline"],
"ups.start.reboot": ["Reboot on Battery", "", "mdi:information-outline"], "ups.start.reboot": ["Reboot on Battery", "", "mdi:information-outline"],
"ups.shutdown": ["Shutdown Ability", "", "mdi:information-outline"], "ups.shutdown": ["Shutdown Ability", "", "mdi:information-outline"],
"battery.charge": ["Battery Charge", "%", "mdi:gauge"], "battery.charge": ["Battery Charge", UNIT_PERCENTAGE, "mdi:gauge"],
"battery.charge.low": ["Low Battery Setpoint", "%", "mdi:gauge"], "battery.charge.low": ["Low Battery Setpoint", UNIT_PERCENTAGE, "mdi:gauge"],
"battery.charge.restart": ["Minimum Battery to Start", "%", "mdi:gauge"], "battery.charge.restart": [
"battery.charge.warning": ["Warning Battery Setpoint", "%", "mdi:gauge"], "Minimum Battery to Start",
UNIT_PERCENTAGE,
"mdi:gauge",
],
"battery.charge.warning": [
"Warning Battery Setpoint",
UNIT_PERCENTAGE,
"mdi:gauge",
],
"battery.charger.status": ["Charging Status", "", "mdi:information-outline"], "battery.charger.status": ["Charging Status", "", "mdi:information-outline"],
"battery.voltage": ["Battery Voltage", "V", "mdi:flash"], "battery.voltage": ["Battery Voltage", "V", "mdi:flash"],
"battery.voltage.nominal": ["Nominal Battery Voltage", "V", "mdi:flash"], "battery.voltage.nominal": ["Nominal Battery Voltage", "V", "mdi:flash"],

View File

@ -20,6 +20,7 @@ from homeassistant.const import (
CONTENT_TYPE_JSON, CONTENT_TYPE_JSON,
TEMP_CELSIUS, TEMP_CELSIUS,
TIME_SECONDS, TIME_SECONDS,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers import discovery from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -71,7 +72,13 @@ SENSOR_TYPES = {
# API Endpoint, Group, Key, unit, icon # API Endpoint, Group, Key, unit, icon
"Temperatures": ["printer", "temperature", "*", TEMP_CELSIUS], "Temperatures": ["printer", "temperature", "*", TEMP_CELSIUS],
"Current State": ["printer", "state", "text", None, "mdi:printer-3d"], "Current State": ["printer", "state", "text", None, "mdi:printer-3d"],
"Job Percentage": ["job", "progress", "completion", "%", "mdi:file-percent"], "Job Percentage": [
"job",
"progress",
"completion",
UNIT_PERCENTAGE,
"mdi:file-percent",
],
"Time Remaining": [ "Time Remaining": [
"job", "job",
"progress", "progress",

View File

@ -3,7 +3,7 @@ import logging
import requests import requests
from homeassistant.const import TEMP_CELSIUS from homeassistant.const import TEMP_CELSIUS, UNIT_PERCENTAGE
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from . import DOMAIN as COMPONENT_DOMAIN, SENSOR_TYPES from . import DOMAIN as COMPONENT_DOMAIN, SENSOR_TYPES
@ -111,7 +111,7 @@ class OctoPrintSensor(Entity):
def state(self): def state(self):
"""Return the state of the sensor.""" """Return the state of the sensor."""
sensor_unit = self.unit_of_measurement sensor_unit = self.unit_of_measurement
if sensor_unit in (TEMP_CELSIUS, "%"): if sensor_unit in (TEMP_CELSIUS, UNIT_PERCENTAGE):
# API sometimes returns null and not 0 # API sometimes returns null and not 0
if self._state is None: if self._state is None:
self._state = 0 self._state = 0

View File

@ -8,7 +8,7 @@ from pyownet import protocol
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_HOST, CONF_PORT, TEMP_CELSIUS from homeassistant.const import CONF_HOST, CONF_PORT, TEMP_CELSIUS, UNIT_PERCENTAGE
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -60,14 +60,14 @@ HOBBYBOARD_EF = {
SENSOR_TYPES = { SENSOR_TYPES = {
# SensorType: [ Measured unit, Unit ] # SensorType: [ Measured unit, Unit ]
"temperature": ["temperature", TEMP_CELSIUS], "temperature": ["temperature", TEMP_CELSIUS],
"humidity": ["humidity", "%"], "humidity": ["humidity", UNIT_PERCENTAGE],
"humidity_raw": ["humidity", "%"], "humidity_raw": ["humidity", UNIT_PERCENTAGE],
"pressure": ["pressure", "mb"], "pressure": ["pressure", "mb"],
"illuminance": ["illuminance", "lux"], "illuminance": ["illuminance", "lux"],
"wetness_0": ["wetness", "%"], "wetness_0": ["wetness", UNIT_PERCENTAGE],
"wetness_1": ["wetness", "%"], "wetness_1": ["wetness", UNIT_PERCENTAGE],
"wetness_2": ["wetness", "%"], "wetness_2": ["wetness", UNIT_PERCENTAGE],
"wetness_3": ["wetness", "%"], "wetness_3": ["wetness", UNIT_PERCENTAGE],
"moisture_0": ["moisture", "cb"], "moisture_0": ["moisture", "cb"],
"moisture_1": ["moisture", "cb"], "moisture_1": ["moisture", "cb"],
"moisture_2": ["moisture", "cb"], "moisture_2": ["moisture", "cb"],

View File

@ -6,6 +6,7 @@ from homeassistant.const import (
TEMP_CELSIUS, TEMP_CELSIUS,
TIME_HOURS, TIME_HOURS,
TIME_MINUTES, TIME_MINUTES,
UNIT_PERCENTAGE,
) )
ATTR_GW_ID = "gateway_id" ATTR_GW_ID = "gateway_id"
@ -38,7 +39,6 @@ SERVICE_SET_SB_TEMP = "set_setback_temperature"
UNIT_BAR = "bar" UNIT_BAR = "bar"
UNIT_KW = "kW" UNIT_KW = "kW"
UNIT_L_MIN = f"L/{TIME_MINUTES}" UNIT_L_MIN = f"L/{TIME_MINUTES}"
UNIT_PERCENT = "%"
BINARY_SENSOR_INFO = { BINARY_SENSOR_INFO = {
# [device_class, friendly_name format] # [device_class, friendly_name format]
@ -121,7 +121,7 @@ SENSOR_INFO = {
gw_vars.DATA_MASTER_MEMBERID: [None, None, "Thermostat Member ID {}"], gw_vars.DATA_MASTER_MEMBERID: [None, None, "Thermostat Member ID {}"],
gw_vars.DATA_SLAVE_MEMBERID: [None, None, "Boiler Member ID {}"], gw_vars.DATA_SLAVE_MEMBERID: [None, None, "Boiler Member ID {}"],
gw_vars.DATA_SLAVE_OEM_FAULT: [None, None, "Boiler OEM Fault Code {}"], gw_vars.DATA_SLAVE_OEM_FAULT: [None, None, "Boiler OEM Fault Code {}"],
gw_vars.DATA_COOLING_CONTROL: [None, UNIT_PERCENT, "Cooling Control Signal {}"], gw_vars.DATA_COOLING_CONTROL: [None, UNIT_PERCENTAGE, "Cooling Control Signal {}"],
gw_vars.DATA_CONTROL_SETPOINT_2: [ gw_vars.DATA_CONTROL_SETPOINT_2: [
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
@ -134,13 +134,13 @@ SENSOR_INFO = {
], ],
gw_vars.DATA_SLAVE_MAX_RELATIVE_MOD: [ gw_vars.DATA_SLAVE_MAX_RELATIVE_MOD: [
None, None,
UNIT_PERCENT, UNIT_PERCENTAGE,
"Boiler Maximum Relative Modulation {}", "Boiler Maximum Relative Modulation {}",
], ],
gw_vars.DATA_SLAVE_MAX_CAPACITY: [None, UNIT_KW, "Boiler Maximum Capacity {}"], gw_vars.DATA_SLAVE_MAX_CAPACITY: [None, UNIT_KW, "Boiler Maximum Capacity {}"],
gw_vars.DATA_SLAVE_MIN_MOD_LEVEL: [ gw_vars.DATA_SLAVE_MIN_MOD_LEVEL: [
None, None,
UNIT_PERCENT, UNIT_PERCENTAGE,
"Boiler Minimum Modulation Level {}", "Boiler Minimum Modulation Level {}",
], ],
gw_vars.DATA_ROOM_SETPOINT: [ gw_vars.DATA_ROOM_SETPOINT: [
@ -148,7 +148,7 @@ SENSOR_INFO = {
TEMP_CELSIUS, TEMP_CELSIUS,
"Room Setpoint {}", "Room Setpoint {}",
], ],
gw_vars.DATA_REL_MOD_LEVEL: [None, UNIT_PERCENT, "Relative Modulation Level {}"], gw_vars.DATA_REL_MOD_LEVEL: [None, UNIT_PERCENTAGE, "Relative Modulation Level {}"],
gw_vars.DATA_CH_WATER_PRESS: [None, UNIT_BAR, "Central Heating Water Pressure {}"], gw_vars.DATA_CH_WATER_PRESS: [None, UNIT_BAR, "Central Heating Water Pressure {}"],
gw_vars.DATA_DHW_FLOW_RATE: [None, UNIT_L_MIN, "Hot Water Flow Rate {}"], gw_vars.DATA_DHW_FLOW_RATE: [None, UNIT_L_MIN, "Hot Water Flow Rate {}"],
gw_vars.DATA_ROOM_SETPOINT_2: [ gw_vars.DATA_ROOM_SETPOINT_2: [

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
SPEED_METERS_PER_SECOND, SPEED_METERS_PER_SECOND,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -36,9 +37,9 @@ SENSOR_TYPES = {
"temperature": ["Temperature", None], "temperature": ["Temperature", None],
"wind_speed": ["Wind speed", SPEED_METERS_PER_SECOND], "wind_speed": ["Wind speed", SPEED_METERS_PER_SECOND],
"wind_bearing": ["Wind bearing", "°"], "wind_bearing": ["Wind bearing", "°"],
"humidity": ["Humidity", "%"], "humidity": ["Humidity", UNIT_PERCENTAGE],
"pressure": ["Pressure", "mbar"], "pressure": ["Pressure", "mbar"],
"clouds": ["Cloud coverage", "%"], "clouds": ["Cloud coverage", UNIT_PERCENTAGE],
"rain": ["Rain", "mm"], "rain": ["Rain", "mm"],
"snow": ["Snow", "mm"], "snow": ["Snow", "mm"],
"weather_code": ["Weather code", None], "weather_code": ["Weather code", None],

View File

@ -1,6 +1,8 @@
"""Constants for the pi_hole integration.""" """Constants for the pi_hole integration."""
from datetime import timedelta from datetime import timedelta
from homeassistant.const import UNIT_PERCENTAGE
DOMAIN = "pi_hole" DOMAIN = "pi_hole"
CONF_LOCATION = "location" CONF_LOCATION = "location"
@ -26,7 +28,7 @@ SENSOR_DICT = {
"ads_blocked_today": ["Ads Blocked Today", "ads", "mdi:close-octagon-outline"], "ads_blocked_today": ["Ads Blocked Today", "ads", "mdi:close-octagon-outline"],
"ads_percentage_today": [ "ads_percentage_today": [
"Ads Percentage Blocked Today", "Ads Percentage Blocked Today",
"%", UNIT_PERCENTAGE,
"mdi:close-octagon-outline", "mdi:close-octagon-outline",
], ],
"clients_ever_seen": ["Seen Clients", "clients", "mdi:account-outline"], "clients_ever_seen": ["Seen Clients", "clients", "mdi:account-outline"],

View File

@ -2,6 +2,7 @@
import logging import logging
from homeassistant.const import UNIT_PERCENTAGE
from homeassistant.helpers.dispatcher import ( from homeassistant.helpers.dispatcher import (
async_dispatcher_connect, async_dispatcher_connect,
async_dispatcher_send, async_dispatcher_send,
@ -145,7 +146,7 @@ class PlaatoSensor(Entity):
if self._type == ATTR_BPM: if self._type == ATTR_BPM:
return "bpm" return "bpm"
if self._type == ATTR_ABV: if self._type == ATTR_ABV:
return "%" return UNIT_PERCENTAGE
return "" return ""

View File

@ -16,6 +16,7 @@ from homeassistant.const import (
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
STATE_UNKNOWN, STATE_UNKNOWN,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
@ -131,14 +132,17 @@ class Plant(Entity):
""" """
READINGS = { READINGS = {
READING_BATTERY: {ATTR_UNIT_OF_MEASUREMENT: "%", "min": CONF_MIN_BATTERY_LEVEL}, READING_BATTERY: {
ATTR_UNIT_OF_MEASUREMENT: UNIT_PERCENTAGE,
"min": CONF_MIN_BATTERY_LEVEL,
},
READING_TEMPERATURE: { READING_TEMPERATURE: {
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS, ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
"min": CONF_MIN_TEMPERATURE, "min": CONF_MIN_TEMPERATURE,
"max": CONF_MAX_TEMPERATURE, "max": CONF_MAX_TEMPERATURE,
}, },
READING_MOISTURE: { READING_MOISTURE: {
ATTR_UNIT_OF_MEASUREMENT: "%", ATTR_UNIT_OF_MEASUREMENT: UNIT_PERCENTAGE,
"min": CONF_MIN_MOISTURE, "min": CONF_MIN_MOISTURE,
"max": CONF_MAX_MOISTURE, "max": CONF_MAX_MOISTURE,
}, },

View File

@ -7,6 +7,7 @@ from homeassistant.const import (
DEVICE_CLASS_PRESSURE, DEVICE_CLASS_PRESSURE,
DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.util.dt import parse_datetime from homeassistant.util.dt import parse_datetime
@ -21,7 +22,7 @@ DEVICE_CLASS_SOUND = "sound_level"
SENSOR_TYPES = { SENSOR_TYPES = {
DEVICE_CLASS_TEMPERATURE: (None, 1, TEMP_CELSIUS), DEVICE_CLASS_TEMPERATURE: (None, 1, TEMP_CELSIUS),
DEVICE_CLASS_PRESSURE: (None, 0, "hPa"), DEVICE_CLASS_PRESSURE: (None, 0, "hPa"),
DEVICE_CLASS_HUMIDITY: (None, 1, "%"), DEVICE_CLASS_HUMIDITY: (None, 1, UNIT_PERCENTAGE),
DEVICE_CLASS_SOUND: ("mdi:ear-hearing", 1, "dBa"), DEVICE_CLASS_SOUND: ("mdi:ear-hearing", 1, "dBa"),
} }

View File

@ -17,6 +17,7 @@ from homeassistant.const import (
EVENT_STATE_CHANGED, EVENT_STATE_CHANGED,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers import entityfilter, state as state_helper from homeassistant.helpers import entityfilter, state as state_helper
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -349,7 +350,7 @@ class PrometheusMetrics:
units = { units = {
TEMP_CELSIUS: "c", TEMP_CELSIUS: "c",
TEMP_FAHRENHEIT: "c", # F should go into C metric TEMP_FAHRENHEIT: "c", # F should go into C metric
"%": "percent", UNIT_PERCENTAGE: "percent",
} }
default = unit.replace("/", "_per_") default = unit.replace("/", "_per_")
default = default.lower() default = default.lower()

View File

@ -19,6 +19,7 @@ from homeassistant.const import (
DATA_GIBIBYTES, DATA_GIBIBYTES,
DATA_RATE_MEBIBYTES_PER_SECOND, DATA_RATE_MEBIBYTES_PER_SECOND,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
from homeassistant.exceptions import PlatformNotReady from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -61,12 +62,12 @@ _SYSTEM_MON_COND = {
} }
_CPU_MON_COND = { _CPU_MON_COND = {
"cpu_temp": ["CPU Temperature", TEMP_CELSIUS, "mdi:thermometer"], "cpu_temp": ["CPU Temperature", TEMP_CELSIUS, "mdi:thermometer"],
"cpu_usage": ["CPU Usage", "%", "mdi:chip"], "cpu_usage": ["CPU Usage", UNIT_PERCENTAGE, "mdi:chip"],
} }
_MEMORY_MON_COND = { _MEMORY_MON_COND = {
"memory_free": ["Memory Available", DATA_GIBIBYTES, "mdi:memory"], "memory_free": ["Memory Available", DATA_GIBIBYTES, "mdi:memory"],
"memory_used": ["Memory Used", DATA_GIBIBYTES, "mdi:memory"], "memory_used": ["Memory Used", DATA_GIBIBYTES, "mdi:memory"],
"memory_percent_used": ["Memory Usage", "%", "mdi:memory"], "memory_percent_used": ["Memory Usage", UNIT_PERCENTAGE, "mdi:memory"],
} }
_NETWORK_MON_COND = { _NETWORK_MON_COND = {
"network_link_status": ["Network Link", None, "mdi:checkbox-marked-circle-outline"], "network_link_status": ["Network Link", None, "mdi:checkbox-marked-circle-outline"],
@ -80,7 +81,7 @@ _DRIVE_MON_COND = {
_VOLUME_MON_COND = { _VOLUME_MON_COND = {
"volume_size_used": ["Used Space", DATA_GIBIBYTES, "mdi:chart-pie"], "volume_size_used": ["Used Space", DATA_GIBIBYTES, "mdi:chart-pie"],
"volume_size_free": ["Free Space", DATA_GIBIBYTES, "mdi:chart-pie"], "volume_size_free": ["Free Space", DATA_GIBIBYTES, "mdi:chart-pie"],
"volume_percentage_used": ["Volume Used", "%", "mdi:chart-pie"], "volume_percentage_used": ["Volume Used", UNIT_PERCENTAGE, "mdi:chart-pie"],
} }
_MONITORED_CONDITIONS = ( _MONITORED_CONDITIONS = (

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_USERNAME, CONF_USERNAME,
TIME_DAYS, TIME_DAYS,
TIME_MINUTES, TIME_MINUTES,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_connect, dispatcher_send from homeassistant.helpers.dispatcher import async_dispatcher_connect, dispatcher_send
@ -58,7 +59,7 @@ ICON_MAP = {
UNIT_OF_MEASUREMENT_MAP = { UNIT_OF_MEASUREMENT_MAP = {
"auto_watering": "", "auto_watering": "",
"battery": "%", "battery": UNIT_PERCENTAGE,
"is_watering": "", "is_watering": "",
"manual_watering": "", "manual_watering": "",
"next_cycle": "", "next_cycle": "",

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_PORT, CONF_PORT,
CONF_SENSORS, CONF_SENSORS,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.discovery import load_platform from homeassistant.helpers.discovery import load_platform
@ -123,7 +124,7 @@ SENSOR_TYPES = {
"_chamber_", "_chamber_",
], ],
"current_state": ["state", None, "mdi:printer-3d", ""], "current_state": ["state", None, "mdi:printer-3d", ""],
"current_job": ["progress", "%", "mdi:file-percent", "_current_job"], "current_job": ["progress", UNIT_PERCENTAGE, "mdi:file-percent", "_current_job"],
"job_end": ["progress", None, "mdi:clock-end", "_job_end"], "job_end": ["progress", None, "mdi:clock-end", "_job_end"],
"job_start": ["progress", None, "mdi:clock-start", "_job_start"], "job_start": ["progress", None, "mdi:clock-start", "_job_start"],
} }

View File

@ -18,6 +18,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
POWER_WATT, POWER_WATT,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -47,7 +48,7 @@ DATA_TYPES = OrderedDict(
[ [
("Temperature", TEMP_CELSIUS), ("Temperature", TEMP_CELSIUS),
("Temperature2", TEMP_CELSIUS), ("Temperature2", TEMP_CELSIUS),
("Humidity", "%"), ("Humidity", UNIT_PERCENTAGE),
("Barometer", ""), ("Barometer", ""),
("Wind direction", ""), ("Wind direction", ""),
("Rain rate", ""), ("Rain rate", ""),

View File

@ -1,6 +1,7 @@
"""This component provides HA sensor support for Ring Door Bell/Chimes.""" """This component provides HA sensor support for Ring Door Bell/Chimes."""
import logging import logging
from homeassistant.const import UNIT_PERCENTAGE
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
@ -203,7 +204,7 @@ SENSOR_TYPES = {
"battery": [ "battery": [
"Battery", "Battery",
["doorbots", "authorized_doorbots", "stickup_cams"], ["doorbots", "authorized_doorbots", "stickup_cams"],
"%", UNIT_PERCENTAGE,
None, None,
None, None,
"battery", "battery",

View File

@ -7,7 +7,12 @@ from sense_hat import SenseHat
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_DISPLAY_OPTIONS, CONF_NAME, TEMP_CELSIUS from homeassistant.const import (
CONF_DISPLAY_OPTIONS,
CONF_NAME,
TEMP_CELSIUS,
UNIT_PERCENTAGE,
)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle from homeassistant.util import Throttle
@ -21,7 +26,7 @@ MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=60)
SENSOR_TYPES = { SENSOR_TYPES = {
"temperature": ["temperature", TEMP_CELSIUS], "temperature": ["temperature", TEMP_CELSIUS],
"humidity": ["humidity", "%"], "humidity": ["humidity", UNIT_PERCENTAGE],
"pressure": ["pressure", "mb"], "pressure": ["pressure", "mb"],
} }

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_NAME, CONF_NAME,
PRECISION_TENTHS, PRECISION_TENTHS,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -140,7 +141,7 @@ class SHTSensorHumidity(SHTSensor):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit of measurement.""" """Return the unit of measurement."""
return "%" return UNIT_PERCENTAGE
def update(self): def update(self):
"""Fetch humidity from the sensor.""" """Fetch humidity from the sensor."""

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_STOP,
STATE_UNKNOWN, STATE_UNKNOWN,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -82,7 +83,7 @@ class SkybeaconHumid(Entity):
@property @property
def unit_of_measurement(self): def unit_of_measurement(self):
"""Return the unit the value is expressed in.""" """Return the unit the value is expressed in."""
return "%" return UNIT_PERCENTAGE
@property @property
def device_state_attributes(self): def device_state_attributes(self):

View File

@ -2,7 +2,12 @@
from datetime import timedelta from datetime import timedelta
import logging import logging
from homeassistant.const import ENERGY_KILO_WATT_HOUR, POWER_WATT, VOLUME_CUBIC_METERS from homeassistant.const import (
ENERGY_KILO_WATT_HOUR,
POWER_WATT,
UNIT_PERCENTAGE,
VOLUME_CUBIC_METERS,
)
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from . import DATA_SMAPPEE from . import DATA_SMAPPEE
@ -21,7 +26,13 @@ SENSOR_TYPES = {
], ],
"current": ["Current", "mdi:gauge", "local", "A", "current"], "current": ["Current", "mdi:gauge", "local", "A", "current"],
"voltage": ["Voltage", "mdi:gauge", "local", "V", "voltage"], "voltage": ["Voltage", "mdi:gauge", "local", "V", "voltage"],
"active_cosfi": ["Power Factor", "mdi:gauge", "local", "%", "active_cosfi"], "active_cosfi": [
"Power Factor",
"mdi:gauge",
"local",
UNIT_PERCENTAGE,
"active_cosfi",
],
"alwayson_today": [ "alwayson_today": [
"Always On Today", "Always On Today",
"mdi:gauge", "mdi:gauge",
@ -68,14 +79,14 @@ SENSOR_TYPES = {
"Water Sensor Humidity", "Water Sensor Humidity",
"mdi:water-percent", "mdi:water-percent",
"water", "water",
"%", UNIT_PERCENTAGE,
"humidity", "humidity",
], ],
"water_sensor_battery": [ "water_sensor_battery": [
"Water Sensor Battery", "Water Sensor Battery",
"mdi:battery", "mdi:battery",
"water", "water",
"%", UNIT_PERCENTAGE,
"battery", "battery",
], ],
} }

View File

@ -16,6 +16,7 @@ from homeassistant.const import (
POWER_WATT, POWER_WATT,
TEMP_CELSIUS, TEMP_CELSIUS,
TEMP_FAHRENHEIT, TEMP_FAHRENHEIT,
UNIT_PERCENTAGE,
) )
from . import SmartThingsEntity from . import SmartThingsEntity
@ -34,8 +35,10 @@ CAPABILITY_TO_SENSORS = {
Map(Attribute.air_quality, "Air Quality", "CAQI", None) Map(Attribute.air_quality, "Air Quality", "CAQI", None)
], ],
Capability.alarm: [Map(Attribute.alarm, "Alarm", None, None)], Capability.alarm: [Map(Attribute.alarm, "Alarm", None, None)],
Capability.audio_volume: [Map(Attribute.volume, "Volume", "%", None)], Capability.audio_volume: [Map(Attribute.volume, "Volume", UNIT_PERCENTAGE, None)],
Capability.battery: [Map(Attribute.battery, "Battery", "%", DEVICE_CLASS_BATTERY)], Capability.battery: [
Map(Attribute.battery, "Battery", UNIT_PERCENTAGE, DEVICE_CLASS_BATTERY)
],
Capability.body_mass_index_measurement: [ Capability.body_mass_index_measurement: [
Map(Attribute.bmi_measurement, "Body Mass Index", "kg/m^2", None) Map(Attribute.bmi_measurement, "Body Mass Index", "kg/m^2", None)
], ],
@ -109,7 +112,7 @@ CAPABILITY_TO_SENSORS = {
Map(Attribute.illuminance, "Illuminance", "lux", DEVICE_CLASS_ILLUMINANCE) Map(Attribute.illuminance, "Illuminance", "lux", DEVICE_CLASS_ILLUMINANCE)
], ],
Capability.infrared_level: [ Capability.infrared_level: [
Map(Attribute.infrared_level, "Infrared Level", "%", None) Map(Attribute.infrared_level, "Infrared Level", UNIT_PERCENTAGE, None)
], ],
Capability.media_input_source: [ Capability.media_input_source: [
Map(Attribute.input_source, "Media Input Source", None, None) Map(Attribute.input_source, "Media Input Source", None, None)
@ -147,7 +150,7 @@ CAPABILITY_TO_SENSORS = {
Map( Map(
Attribute.humidity, Attribute.humidity,
"Relative Humidity Measurement", "Relative Humidity Measurement",
"%", UNIT_PERCENTAGE,
DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_HUMIDITY,
) )
], ],

View File

@ -1,7 +1,7 @@
"""Constants for the Solar-Log integration.""" """Constants for the Solar-Log integration."""
from datetime import timedelta from datetime import timedelta
from homeassistant.const import ENERGY_KILO_WATT_HOUR, POWER_WATT from homeassistant.const import ENERGY_KILO_WATT_HOUR, POWER_WATT, UNIT_PERCENTAGE
DOMAIN = "solarlog" DOMAIN = "solarlog"
@ -77,7 +77,7 @@ SENSOR_TYPES = {
POWER_WATT, POWER_WATT,
"mdi:solar-power", "mdi:solar-power",
], ],
"capacity": ["CAPACITY", "capacity", "%", "mdi:solar-power"], "capacity": ["CAPACITY", "capacity", UNIT_PERCENTAGE, "mdi:solar-power"],
"efficiency": ["EFFICIENCY", "efficiency", "% W/Wp", "mdi:solar-power"], "efficiency": ["EFFICIENCY", "efficiency", "% W/Wp", "mdi:solar-power"],
"power_available": [ "power_available": [
"powerAVAILABLE", "powerAVAILABLE",

View File

@ -1,6 +1,6 @@
"""Reads vehicle status from StarLine API.""" """Reads vehicle status from StarLine API."""
from homeassistant.components.sensor import DEVICE_CLASS_TEMPERATURE from homeassistant.components.sensor import DEVICE_CLASS_TEMPERATURE
from homeassistant.const import TEMP_CELSIUS from homeassistant.const import TEMP_CELSIUS, UNIT_PERCENTAGE
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
from homeassistant.helpers.icon import icon_for_battery_level, icon_for_signal_level from homeassistant.helpers.icon import icon_for_battery_level, icon_for_signal_level
@ -13,7 +13,7 @@ SENSOR_TYPES = {
"balance": ["Balance", None, None, "mdi:cash-multiple"], "balance": ["Balance", None, None, "mdi:cash-multiple"],
"ctemp": ["Interior Temperature", DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None], "ctemp": ["Interior Temperature", DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None],
"etemp": ["Engine Temperature", DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None], "etemp": ["Engine Temperature", DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS, None],
"gsm_lvl": ["GSM Signal", None, "%", None], "gsm_lvl": ["GSM Signal", None, UNIT_PERCENTAGE, None],
} }

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_MONITORED_VARIABLES, CONF_MONITORED_VARIABLES,
CONF_NAME, CONF_NAME,
DATA_GIGABYTES, DATA_GIGABYTES,
UNIT_PERCENTAGE,
) )
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -24,13 +25,11 @@ _LOGGER = logging.getLogger(__name__)
DEFAULT_NAME = "Start.ca" DEFAULT_NAME = "Start.ca"
CONF_TOTAL_BANDWIDTH = "total_bandwidth" CONF_TOTAL_BANDWIDTH = "total_bandwidth"
PERCENT = "%"
MIN_TIME_BETWEEN_UPDATES = timedelta(hours=1) MIN_TIME_BETWEEN_UPDATES = timedelta(hours=1)
REQUEST_TIMEOUT = 5 # seconds REQUEST_TIMEOUT = 5 # seconds
SENSOR_TYPES = { SENSOR_TYPES = {
"usage": ["Usage Ratio", PERCENT, "mdi:percent"], "usage": ["Usage Ratio", UNIT_PERCENTAGE, "mdi:percent"],
"usage_gb": ["Usage", DATA_GIGABYTES, "mdi:download"], "usage_gb": ["Usage", DATA_GIGABYTES, "mdi:download"],
"limit": ["Data limit", DATA_GIGABYTES, "mdi:download"], "limit": ["Data limit", DATA_GIGABYTES, "mdi:download"],
"used_download": ["Used Download", DATA_GIGABYTES, "mdi:download"], "used_download": ["Used Download", DATA_GIGABYTES, "mdi:download"],

View File

@ -4,7 +4,13 @@ from typing import Any, Dict, Optional
from surepy import SureLockStateID, SureProductID from surepy import SureLockStateID, SureProductID
from homeassistant.const import ATTR_VOLTAGE, CONF_ID, CONF_TYPE, DEVICE_CLASS_BATTERY from homeassistant.const import (
ATTR_VOLTAGE,
CONF_ID,
CONF_TYPE,
DEVICE_CLASS_BATTERY,
UNIT_PERCENTAGE,
)
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -40,10 +46,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
]: ]:
entities.append(SureBattery(entity[CONF_ID], sure_type, spc)) entities.append(SureBattery(entity[CONF_ID], sure_type, spc))
if sure_type in [ if sure_type in [SureProductID.CAT_FLAP, SureProductID.PET_FLAP]:
SureProductID.CAT_FLAP,
SureProductID.PET_FLAP,
]:
entities.append(Flap(entity[CONF_ID], sure_type, spc)) entities.append(Flap(entity[CONF_ID], sure_type, spc))
async_add_entities(entities, True) async_add_entities(entities, True)
@ -52,9 +55,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info=
class SurePetcareSensor(Entity): class SurePetcareSensor(Entity):
"""A binary sensor implementation for Sure Petcare Entities.""" """A binary sensor implementation for Sure Petcare Entities."""
def __init__( def __init__(self, _id: int, sure_type: SureProductID, spc: SurePetcareAPI):
self, _id: int, sure_type: SureProductID, spc: SurePetcareAPI,
):
"""Initialize a Sure Petcare sensor.""" """Initialize a Sure Petcare sensor."""
self._id = _id self._id = _id
@ -128,9 +129,7 @@ class Flap(SurePetcareSensor):
"""Return the state attributes of the device.""" """Return the state attributes of the device."""
attributes = None attributes = None
if self._state: if self._state:
attributes = { attributes = {"learn_mode": bool(self._state["learn_mode"])}
"learn_mode": bool(self._state["learn_mode"]),
}
return attributes return attributes
@ -182,4 +181,4 @@ class SureBattery(SurePetcareSensor):
@property @property
def unit_of_measurement(self) -> str: def unit_of_measurement(self) -> str:
"""Return the unit of measurement.""" """Return the unit of measurement."""
return "%" return UNIT_PERCENTAGE

View File

@ -6,7 +6,7 @@ from pysyncthru import SyncThru
import voluptuous as vol import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_RESOURCE from homeassistant.const import CONF_HOST, CONF_NAME, CONF_RESOURCE, UNIT_PERCENTAGE
from homeassistant.helpers import aiohttp_client from homeassistant.helpers import aiohttp_client
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -174,7 +174,7 @@ class SyncThruTonerSensor(SyncThruSensor):
super().__init__(syncthru, name) super().__init__(syncthru, name)
self._name = f"{name} Toner {color}" self._name = f"{name} Toner {color}"
self._color = color self._color = color
self._unit_of_measurement = "%" self._unit_of_measurement = UNIT_PERCENTAGE
self._id_suffix = f"_toner_{color}" self._id_suffix = f"_toner_{color}"
def update(self): def update(self):
@ -194,7 +194,7 @@ class SyncThruDrumSensor(SyncThruSensor):
super().__init__(syncthru, name) super().__init__(syncthru, name)
self._name = f"{name} Drum {color}" self._name = f"{name} Drum {color}"
self._color = color self._color = color
self._unit_of_measurement = "%" self._unit_of_measurement = UNIT_PERCENTAGE
self._id_suffix = f"_drum_{color}" self._id_suffix = f"_drum_{color}"
def update(self): def update(self):

View File

@ -21,6 +21,7 @@ from homeassistant.const import (
DATA_RATE_KILOBYTES_PER_SECOND, DATA_RATE_KILOBYTES_PER_SECOND,
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_START,
TEMP_CELSIUS, TEMP_CELSIUS,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -37,14 +38,14 @@ DEFAULT_PORT = 5001
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15) MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15)
_UTILISATION_MON_COND = { _UTILISATION_MON_COND = {
"cpu_other_load": ["CPU Load (Other)", "%", "mdi:chip"], "cpu_other_load": ["CPU Load (Other)", UNIT_PERCENTAGE, "mdi:chip"],
"cpu_user_load": ["CPU Load (User)", "%", "mdi:chip"], "cpu_user_load": ["CPU Load (User)", UNIT_PERCENTAGE, "mdi:chip"],
"cpu_system_load": ["CPU Load (System)", "%", "mdi:chip"], "cpu_system_load": ["CPU Load (System)", UNIT_PERCENTAGE, "mdi:chip"],
"cpu_total_load": ["CPU Load (Total)", "%", "mdi:chip"], "cpu_total_load": ["CPU Load (Total)", UNIT_PERCENTAGE, "mdi:chip"],
"cpu_1min_load": ["CPU Load (1 min)", "%", "mdi:chip"], "cpu_1min_load": ["CPU Load (1 min)", UNIT_PERCENTAGE, "mdi:chip"],
"cpu_5min_load": ["CPU Load (5 min)", "%", "mdi:chip"], "cpu_5min_load": ["CPU Load (5 min)", UNIT_PERCENTAGE, "mdi:chip"],
"cpu_15min_load": ["CPU Load (15 min)", "%", "mdi:chip"], "cpu_15min_load": ["CPU Load (15 min)", UNIT_PERCENTAGE, "mdi:chip"],
"memory_real_usage": ["Memory Usage (Real)", "%", "mdi:memory"], "memory_real_usage": ["Memory Usage (Real)", UNIT_PERCENTAGE, "mdi:memory"],
"memory_size": ["Memory Size", DATA_MEGABYTES, "mdi:memory"], "memory_size": ["Memory Size", DATA_MEGABYTES, "mdi:memory"],
"memory_cached": ["Memory Cached", DATA_MEGABYTES, "mdi:memory"], "memory_cached": ["Memory Cached", DATA_MEGABYTES, "mdi:memory"],
"memory_available_swap": ["Memory Available (Swap)", DATA_MEGABYTES, "mdi:memory"], "memory_available_swap": ["Memory Available (Swap)", DATA_MEGABYTES, "mdi:memory"],
@ -59,7 +60,7 @@ _STORAGE_VOL_MON_COND = {
"volume_device_type": ["Type", None, "mdi:harddisk"], "volume_device_type": ["Type", None, "mdi:harddisk"],
"volume_size_total": ["Total Size", None, "mdi:chart-pie"], "volume_size_total": ["Total Size", None, "mdi:chart-pie"],
"volume_size_used": ["Used Space", None, "mdi:chart-pie"], "volume_size_used": ["Used Space", None, "mdi:chart-pie"],
"volume_percentage_used": ["Volume Used", "%", "mdi:chart-pie"], "volume_percentage_used": ["Volume Used", UNIT_PERCENTAGE, "mdi:chart-pie"],
"volume_disk_temp_avg": ["Average Disk Temp", None, "mdi:thermometer"], "volume_disk_temp_avg": ["Average Disk Temp", None, "mdi:thermometer"],
"volume_disk_temp_max": ["Maximum Disk Temp", None, "mdi:thermometer"], "volume_disk_temp_max": ["Maximum Disk Temp", None, "mdi:thermometer"],
} }

View File

@ -15,6 +15,7 @@ from homeassistant.const import (
DATA_RATE_MEGABYTES_PER_SECOND, DATA_RATE_MEGABYTES_PER_SECOND,
STATE_OFF, STATE_OFF,
STATE_ON, STATE_ON,
UNIT_PERCENTAGE,
) )
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -29,7 +30,7 @@ CONF_ARG = "arg"
SENSOR_TYPES = { SENSOR_TYPES = {
"disk_free": ["Disk free", DATA_GIBIBYTES, "mdi:harddisk", None], "disk_free": ["Disk free", DATA_GIBIBYTES, "mdi:harddisk", None],
"disk_use": ["Disk use", DATA_GIBIBYTES, "mdi:harddisk", None], "disk_use": ["Disk use", DATA_GIBIBYTES, "mdi:harddisk", None],
"disk_use_percent": ["Disk use (percent)", "%", "mdi:harddisk", None], "disk_use_percent": ["Disk use (percent)", UNIT_PERCENTAGE, "mdi:harddisk", None],
"ipv4_address": ["IPv4 address", "", "mdi:server-network", None], "ipv4_address": ["IPv4 address", "", "mdi:server-network", None],
"ipv6_address": ["IPv6 address", "", "mdi:server-network", None], "ipv6_address": ["IPv6 address", "", "mdi:server-network", None],
"last_boot": ["Last boot", "", "mdi:clock", "timestamp"], "last_boot": ["Last boot", "", "mdi:clock", "timestamp"],
@ -38,7 +39,7 @@ SENSOR_TYPES = {
"load_5m": ["Load (5m)", " ", "mdi:memory", None], "load_5m": ["Load (5m)", " ", "mdi:memory", None],
"memory_free": ["Memory free", DATA_MEBIBYTES, "mdi:memory", None], "memory_free": ["Memory free", DATA_MEBIBYTES, "mdi:memory", None],
"memory_use": ["Memory use", DATA_MEBIBYTES, "mdi:memory", None], "memory_use": ["Memory use", DATA_MEBIBYTES, "mdi:memory", None],
"memory_use_percent": ["Memory use (percent)", "%", "mdi:memory", None], "memory_use_percent": ["Memory use (percent)", UNIT_PERCENTAGE, "mdi:memory", None],
"network_in": ["Network in", DATA_MEBIBYTES, "mdi:server-network", None], "network_in": ["Network in", DATA_MEBIBYTES, "mdi:server-network", None],
"network_out": ["Network out", DATA_MEBIBYTES, "mdi:server-network", None], "network_out": ["Network out", DATA_MEBIBYTES, "mdi:server-network", None],
"packets_in": ["Packets in", " ", "mdi:server-network", None], "packets_in": ["Packets in", " ", "mdi:server-network", None],
@ -56,10 +57,10 @@ SENSOR_TYPES = {
None, None,
], ],
"process": ["Process", " ", "mdi:memory", None], "process": ["Process", " ", "mdi:memory", None],
"processor_use": ["Processor use", "%", "mdi:memory", None], "processor_use": ["Processor use", UNIT_PERCENTAGE, "mdi:memory", None],
"swap_free": ["Swap free", DATA_MEBIBYTES, "mdi:harddisk", None], "swap_free": ["Swap free", DATA_MEBIBYTES, "mdi:harddisk", None],
"swap_use": ["Swap use", DATA_MEBIBYTES, "mdi:harddisk", None], "swap_use": ["Swap use", DATA_MEBIBYTES, "mdi:harddisk", None],
"swap_use_percent": ["Swap use (percent)", "%", "mdi:harddisk", None], "swap_use_percent": ["Swap use (percent)", UNIT_PERCENTAGE, "mdi:harddisk", None],
} }
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(

View File

@ -1,7 +1,7 @@
"""Support for Tado sensors for each zone.""" """Support for Tado sensors for each zone."""
import logging import logging
from homeassistant.const import TEMP_CELSIUS from homeassistant.const import TEMP_CELSIUS, UNIT_PERCENTAGE
from homeassistant.core import callback from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity import Entity
@ -134,9 +134,9 @@ class TadoSensor(Entity):
if self.zone_variable == "temperature": if self.zone_variable == "temperature":
return self.hass.config.units.temperature_unit return self.hass.config.units.temperature_unit
if self.zone_variable == "humidity": if self.zone_variable == "humidity":
return "%" return UNIT_PERCENTAGE
if self.zone_variable == "heating": if self.zone_variable == "heating":
return "%" return UNIT_PERCENTAGE
if self.zone_variable == "ac": if self.zone_variable == "ac":
return "" return ""

Some files were not shown because too many files have changed in this diff Show More