Add and use time related constants (#32065)

* Add and use time related constants

* Sort time constants and reuse them in data rate constants

* Fix greeneyemonitor import

* Fix greeneyemonitor import V2

* Fix failing here_travel_time test

* Add TIME_MONTHS and TIME_YEARS

* Use TIME_MINUTES in opentherm_gw and isy994

* Add and use TIME_MILLISECONDS

* Change inconsistent ones

* Add TIME_MICROSECONDS and TIME_WEEKS

* Use constants in apcupsd and travisci

* Fix import error in upnp sensor.py

* Fix isy994 sensor.py using TIME_YEARS

* Fix dyson tests

* Use TIME_SECONDS in more places

* Use TIME_DAYS in google wifi
This commit is contained in:
springstan 2020-02-23 21:09:24 +01:00 committed by GitHub
parent 8dd80e0e3c
commit a85808e325
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
81 changed files with 480 additions and 287 deletions

View file

@ -11,6 +11,7 @@ from homeassistant.components.adguard.const import (
DOMAIN,
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import TIME_MILLISECONDS
from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.typing import HomeAssistantType
@ -206,7 +207,7 @@ class AdGuardHomeAverageProcessingTimeSensor(AdGuardHomeSensor):
"AdGuard Average Processing Speed",
"mdi:speedometer",
"average_speed",
"ms",
TIME_MILLISECONDS,
)
async def _adguard_update(self) -> None:

View file

@ -6,7 +6,13 @@ import voluptuous as vol
from homeassistant.components import apcupsd
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_RESOURCES, POWER_WATT, TEMP_CELSIUS
from homeassistant.const import (
CONF_RESOURCES,
POWER_WATT,
TEMP_CELSIUS,
TIME_MINUTES,
TIME_SECONDS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -84,8 +90,8 @@ SENSOR_TYPES = {
SPECIFIC_UNITS = {"ITEMP": TEMP_CELSIUS}
INFERRED_UNITS = {
" Minutes": "min",
" Seconds": "sec",
" Minutes": TIME_MINUTES,
" Seconds": TIME_SECONDS,
" Percent": "%",
" Volts": "V",
" Ampere": "A",

View file

@ -6,7 +6,13 @@ from blockchain import exchangerates, statistics
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, CONF_CURRENCY, CONF_DISPLAY_OPTIONS
from homeassistant.const import (
ATTR_ATTRIBUTION,
CONF_CURRENCY,
CONF_DISPLAY_OPTIONS,
TIME_MINUTES,
TIME_SECONDS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -27,9 +33,9 @@ OPTION_TYPES = {
"btc_mined": ["Mined", "BTC"],
"trade_volume_usd": ["Trade volume", "USD"],
"difficulty": ["Difficulty", None],
"minutes_between_blocks": ["Time between Blocks", "min"],
"minutes_between_blocks": ["Time between Blocks", TIME_MINUTES],
"number_of_transactions": ["No. of Transactions", None],
"hash_rate": ["Hash rate", "PH/s"],
"hash_rate": ["Hash rate", f"PH/{TIME_SECONDS}"],
"timestamp": ["Timestamp", None],
"mined_blocks": ["Mined Blocks", None],
"blocks_size": ["Block size", None],

View file

@ -6,7 +6,7 @@ from bizkaibus.bizkaibus import BizkaibusData
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_NAME
from homeassistant.const import CONF_NAME, TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -62,7 +62,7 @@ class BizkaibusSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit of measurement of the sensor."""
return "minutes"
return TIME_MINUTES
def update(self):
"""Get the latest data from the webservice."""

View file

@ -7,6 +7,7 @@ from homeassistant.const import (
CONF_UNIT_SYSTEM_IMPERIAL,
LENGTH_KILOMETERS,
LENGTH_MILES,
TIME_HOURS,
VOLUME_GALLONS,
VOLUME_LITERS,
)
@ -24,7 +25,7 @@ ATTR_TO_HA_METRIC = {
"remaining_range_fuel": ["mdi:map-marker-distance", LENGTH_KILOMETERS],
"max_range_electric": ["mdi:map-marker-distance", LENGTH_KILOMETERS],
"remaining_fuel": ["mdi:gas-station", VOLUME_LITERS],
"charging_time_remaining": ["mdi:update", "h"],
"charging_time_remaining": ["mdi:update", TIME_HOURS],
"charging_status": ["mdi:battery-charging", None],
# No icon as this is dealt with directly as a special case in icon()
"charging_level_hv": [None, "%"],
@ -37,7 +38,7 @@ ATTR_TO_HA_IMPERIAL = {
"remaining_range_fuel": ["mdi:map-marker-distance", LENGTH_MILES],
"max_range_electric": ["mdi:map-marker-distance", LENGTH_MILES],
"remaining_fuel": ["mdi:gas-station", VOLUME_GALLONS],
"charging_time_remaining": ["mdi:update", "h"],
"charging_time_remaining": ["mdi:update", TIME_HOURS],
"charging_status": ["mdi:battery-charging", None],
# No icon as this is dealt with directly as a special case in icon()
"charging_level_hv": [None, "%"],

View file

@ -20,6 +20,7 @@ from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
TEMP_CELSIUS,
TIME_HOURS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -59,7 +60,7 @@ SENSOR_TYPES = {
"cloud_type_id": ["Cloud Type ID", None],
"cloud_type": ["Cloud Type", None],
"delta_t": ["Delta Temp C", TEMP_CELSIUS],
"gust_kmh": ["Wind Gust kmh", "km/h"],
"gust_kmh": ["Wind Gust kmh", f"km/{TIME_HOURS}"],
"gust_kt": ["Wind Gust kt", "kt"],
"air_temp": ["Air Temp C", TEMP_CELSIUS],
"dewpt": ["Dew Point C", TEMP_CELSIUS],
@ -76,7 +77,7 @@ SENSOR_TYPES = {
"vis_km": ["Visability km", "km"],
"weather": ["Weather", None],
"wind_dir": ["Wind Direction", None],
"wind_spd_kmh": ["Wind Speed kmh", "km/h"],
"wind_spd_kmh": ["Wind Speed kmh", f"km/{TIME_HOURS}"],
"wind_spd_kt": ["Wind Speed kt", "kt"],
}

View file

@ -1,4 +1,6 @@
"""Constants for Brother integration."""
from homeassistant.const import TIME_DAYS
ATTR_BELT_UNIT_REMAINING_LIFE = "belt_unit_remaining_life"
ATTR_BLACK_INK_REMAINING = "black_ink_remaining"
ATTR_BLACK_TONER_REMAINING = "black_toner_remaining"
@ -28,7 +30,6 @@ ATTR_YELLOW_TONER_REMAINING = "yellow_toner_remaining"
DOMAIN = "brother"
UNIT_PAGES = "p"
UNIT_DAYS = "days"
UNIT_PERCENT = "%"
PRINTER_TYPES = ["laser", "ink"]
@ -127,6 +128,6 @@ SENSOR_TYPES = {
ATTR_UPTIME: {
ATTR_ICON: "mdi:timer",
ATTR_LABEL: ATTR_UPTIME.title(),
ATTR_UNIT: UNIT_DAYS,
ATTR_UNIT: TIME_DAYS,
},
}

View file

@ -28,6 +28,7 @@ from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
TEMP_CELSIUS,
TIME_HOURS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -67,18 +68,18 @@ SENSOR_TYPES = {
"humidity": ["Humidity", "%", "mdi:water-percent"],
"temperature": ["Temperature", TEMP_CELSIUS, "mdi:thermometer"],
"groundtemperature": ["Ground temperature", TEMP_CELSIUS, "mdi:thermometer"],
"windspeed": ["Wind speed", "km/h", "mdi:weather-windy"],
"windspeed": ["Wind speed", f"km/{TIME_HOURS}", "mdi:weather-windy"],
"windforce": ["Wind force", "Bft", "mdi:weather-windy"],
"winddirection": ["Wind direction", None, "mdi:compass-outline"],
"windazimuth": ["Wind direction azimuth", "°", "mdi:compass-outline"],
"pressure": ["Pressure", "hPa", "mdi:gauge"],
"visibility": ["Visibility", "km", None],
"windgust": ["Wind gust", "km/h", "mdi:weather-windy"],
"precipitation": ["Precipitation", "mm/h", "mdi:weather-pouring"],
"windgust": ["Wind gust", f"km/{TIME_HOURS}", "mdi:weather-windy"],
"precipitation": ["Precipitation", f"mm/{TIME_HOURS}", "mdi:weather-pouring"],
"irradiance": ["Irradiance", "W/m2", "mdi:sunglasses"],
"precipitation_forecast_average": [
"Precipitation forecast average",
"mm/h",
f"mm/{TIME_HOURS}",
"mdi:weather-pouring",
],
"precipitation_forecast_total": [
@ -132,11 +133,11 @@ SENSOR_TYPES = {
"windforce_3d": ["Wind force 3d", "Bft", "mdi:weather-windy"],
"windforce_4d": ["Wind force 4d", "Bft", "mdi:weather-windy"],
"windforce_5d": ["Wind force 5d", "Bft", "mdi:weather-windy"],
"windspeed_1d": ["Wind speed 1d", "km/h", "mdi:weather-windy"],
"windspeed_2d": ["Wind speed 2d", "km/h", "mdi:weather-windy"],
"windspeed_3d": ["Wind speed 3d", "km/h", "mdi:weather-windy"],
"windspeed_4d": ["Wind speed 4d", "km/h", "mdi:weather-windy"],
"windspeed_5d": ["Wind speed 5d", "km/h", "mdi:weather-windy"],
"windspeed_1d": ["Wind speed 1d", f"km/{TIME_HOURS}", "mdi:weather-windy"],
"windspeed_2d": ["Wind speed 2d", f"km/{TIME_HOURS}", "mdi:weather-windy"],
"windspeed_3d": ["Wind speed 3d", f"km/{TIME_HOURS}", "mdi:weather-windy"],
"windspeed_4d": ["Wind speed 4d", f"km/{TIME_HOURS}", "mdi:weather-windy"],
"windspeed_5d": ["Wind speed 5d", f"km/{TIME_HOURS}", "mdi:weather-windy"],
"winddirection_1d": ["Wind direction 1d", None, "mdi:compass-outline"],
"winddirection_2d": ["Wind direction 2d", None, "mdi:compass-outline"],
"winddirection_3d": ["Wind direction 3d", None, "mdi:compass-outline"],

View file

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_NAME,
CONF_PORT,
EVENT_HOMEASSISTANT_START,
TIME_DAYS,
)
from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv
@ -85,7 +86,7 @@ class SSLCertificate(Entity):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "days"
return TIME_DAYS
@property
def state(self):

View file

@ -31,6 +31,8 @@ from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE,
POWER_WATT,
TEMP_CELSIUS,
TIME_DAYS,
TIME_HOURS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_connect
@ -156,14 +158,14 @@ SENSOR_TYPES = {
ATTR_AIR_FLOW_SUPPLY: {
ATTR_DEVICE_CLASS: None,
ATTR_LABEL: "Supply airflow",
ATTR_UNIT: "m³/h",
ATTR_UNIT: f"m³/{TIME_HOURS}",
ATTR_ICON: "mdi:fan",
ATTR_ID: SENSOR_FAN_SUPPLY_FLOW,
},
ATTR_AIR_FLOW_EXHAUST: {
ATTR_DEVICE_CLASS: None,
ATTR_LABEL: "Exhaust airflow",
ATTR_UNIT: "m³/h",
ATTR_UNIT: f"m³/{TIME_HOURS}",
ATTR_ICON: "mdi:fan",
ATTR_ID: SENSOR_FAN_EXHAUST_FLOW,
},
@ -177,7 +179,7 @@ SENSOR_TYPES = {
ATTR_DAYS_TO_REPLACE_FILTER: {
ATTR_DEVICE_CLASS: None,
ATTR_LABEL: "Days to replace filter",
ATTR_UNIT: "days",
ATTR_UNIT: TIME_DAYS,
ATTR_ICON: "mdi:calendar",
ATTR_ID: SENSOR_DAYS_TO_REPLACE_FILTER,
},
@ -194,7 +196,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
vol.Optional(CONF_RESOURCES, default=[]): vol.All(
cv.ensure_list, [vol.In(SENSOR_TYPES)]
),
)
}
)
@ -229,7 +231,7 @@ class ComfoConnectSensor(Entity):
async def async_added_to_hass(self):
"""Register for sensor updates."""
_LOGGER.debug(
"Registering for sensor %s (%d)", self._sensor_type, self._sensor_id,
"Registering for sensor %s (%d)", self._sensor_type, self._sensor_id
)
async_dispatcher_connect(
self.hass,

View file

@ -15,6 +15,8 @@ from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
CONF_SCAN_INTERVAL,
TIME_HOURS,
TIME_SECONDS,
UNIT_UV_INDEX,
)
import homeassistant.helpers.config_validation as cv
@ -99,11 +101,11 @@ SENSOR_TYPES = {
],
"precip_intensity": [
"Precip Intensity",
"mm/h",
f"mm/{TIME_HOURS}",
"in",
"mm/h",
"mm/h",
"mm/h",
f"mm/{TIME_HOURS}",
f"mm/{TIME_HOURS}",
f"mm/{TIME_HOURS}",
"mdi:weather-rainy",
["currently", "minutely", "hourly", "daily"],
],
@ -159,9 +161,9 @@ SENSOR_TYPES = {
],
"wind_speed": [
"Wind Speed",
"m/s",
f"m/{TIME_SECONDS}",
"mph",
"km/h",
f"km/{TIME_HOURS}",
"mph",
"mph",
"mdi:weather-windy",
@ -179,9 +181,9 @@ SENSOR_TYPES = {
],
"wind_gust": [
"Wind Gust",
"m/s",
f"m/{TIME_SECONDS}",
"mph",
"km/h",
f"km/{TIME_HOURS}",
"mph",
"mph",
"mdi:weather-windy-variant",
@ -319,11 +321,11 @@ SENSOR_TYPES = {
],
"precip_intensity_max": [
"Daily Max Precip Intensity",
"mm/h",
f"mm/{TIME_HOURS}",
"in",
"mm/h",
"mm/h",
"mm/h",
f"mm/{TIME_HOURS}",
f"mm/{TIME_HOURS}",
f"mm/{TIME_HOURS}",
"mdi:thermometer",
["daily"],
],

View file

@ -11,6 +11,10 @@ from homeassistant.const import (
CONF_SOURCE,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
TIME_DAYS,
TIME_HOURS,
TIME_MINUTES,
TIME_SECONDS,
)
from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv
@ -42,7 +46,12 @@ UNIT_PREFIXES = {
}
# SI Time prefixes
UNIT_TIME = {"s": 1, "min": 60, "h": 60 * 60, "d": 24 * 60 * 60}
UNIT_TIME = {
TIME_SECONDS: 1,
TIME_MINUTES: 60,
TIME_HOURS: 60 * 60,
TIME_DAYS: 24 * 60 * 60,
}
ICON = "mdi:chart-line"
@ -55,7 +64,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
vol.Required(CONF_SOURCE): cv.entity_id,
vol.Optional(CONF_ROUND_DIGITS, default=DEFAULT_ROUND): vol.Coerce(int),
vol.Optional(CONF_UNIT_PREFIX, default=None): vol.In(UNIT_PREFIXES),
vol.Optional(CONF_UNIT_TIME, default="h"): vol.In(UNIT_TIME),
vol.Optional(CONF_UNIT_TIME, default=TIME_HOURS): vol.In(UNIT_TIME),
vol.Optional(CONF_UNIT): cv.string,
vol.Optional(CONF_TIME_WINDOW, default=DEFAULT_TIME_WINDOW): cv.time_period,
}

View file

@ -9,7 +9,12 @@ import serial
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_HOST, CONF_PORT, EVENT_HOMEASSISTANT_STOP
from homeassistant.const import (
CONF_HOST,
CONF_PORT,
EVENT_HOMEASSISTANT_STOP,
TIME_HOURS,
)
from homeassistant.core import CoreState
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -303,4 +308,4 @@ class DerivativeDSMREntity(DSMREntity):
"""Return the unit of measurement of this entity, per hour, if any."""
unit = self.get_dsmr_object_attr("unit")
if unit:
return unit + "/h"
return f"{unit}/{TIME_HOURS}"

View file

@ -11,7 +11,7 @@ import requests
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
import homeassistant.util.dt as dt_util
@ -109,7 +109,7 @@ class DublinPublicTransportSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
@property
def icon(self):

View file

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

View file

@ -17,6 +17,7 @@ from homeassistant.const import (
CONF_PASSWORD,
CONF_USERNAME,
DATA_GIGABITS,
TIME_DAYS,
)
from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.config_validation as cv
@ -26,7 +27,6 @@ from homeassistant.util import Throttle
_LOGGER = logging.getLogger(__name__)
PRICE = "CAD"
DAYS = "days"
PERCENT = "%"
DEFAULT_NAME = "EBox"
@ -39,7 +39,7 @@ SENSOR_TYPES = {
"usage": ["Usage", PERCENT, "mdi:percent"],
"balance": ["Balance", PRICE, "mdi:square-inc-cash"],
"limit": ["Data limit", DATA_GIGABITS, "mdi:download"],
"days_left": ["Days left", DAYS, "mdi:calendar-today"],
"days_left": ["Days left", TIME_DAYS, "mdi:calendar-today"],
"before_offpeak_download": [
"Download before offpeak",
DATA_GIGABITS,

View file

@ -1,8 +1,12 @@
"""Constants for ebus component."""
from homeassistant.const import ENERGY_KILO_WATT_HOUR, PRESSURE_BAR, TEMP_CELSIUS
from homeassistant.const import (
ENERGY_KILO_WATT_HOUR,
PRESSURE_BAR,
TEMP_CELSIUS,
TIME_SECONDS,
)
DOMAIN = "ebusd"
TIME_SECONDS = "seconds"
# SensorTypes from ebusdpy module :
# 0='decimal', 1='time-schedule', 2='switch', 3='string', 4='value;status'

View file

@ -12,6 +12,7 @@ from homeassistant.const import (
CONF_LONGITUDE,
CONF_NAME,
CONF_SHOW_ON_MAP,
TIME_MINUTES,
)
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
@ -183,7 +184,7 @@ class EnturPublicTransportSensor(Entity):
@property
def unit_of_measurement(self) -> str:
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
@property
def icon(self) -> str:

View file

@ -18,6 +18,7 @@ from homeassistant.const import (
CONF_PASSWORD,
CONF_USERNAME,
DATA_KILOBITS,
TIME_MINUTES,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -27,7 +28,6 @@ _LOGGER = logging.getLogger(__name__)
PRICE = "CAD"
MESSAGES = "messages"
MINUTES = "minutes"
DEFAULT_NAME = "Fido"
@ -49,12 +49,12 @@ SENSOR_TYPES = {
"text_int_used": ["International text used", MESSAGES, "mdi:message-alert"],
"text_int_limit": ["International text limit", MESSAGES, "mdi:message-alert"],
"text_int_remaining": ["International remaining", MESSAGES, "mdi:message-alert"],
"talk_used": ["Talk used", MINUTES, "mdi:cellphone"],
"talk_limit": ["Talk limit", MINUTES, "mdi:cellphone"],
"talk_remaining": ["Talk remaining", MINUTES, "mdi:cellphone"],
"other_talk_used": ["Other Talk used", MINUTES, "mdi:cellphone"],
"other_talk_limit": ["Other Talk limit", MINUTES, "mdi:cellphone"],
"other_talk_remaining": ["Other Talk remaining", MINUTES, "mdi:cellphone"],
"talk_used": ["Talk used", TIME_MINUTES, "mdi:cellphone"],
"talk_limit": ["Talk limit", TIME_MINUTES, "mdi:cellphone"],
"talk_remaining": ["Talk remaining", TIME_MINUTES, "mdi:cellphone"],
"other_talk_used": ["Other Talk used", TIME_MINUTES, "mdi:cellphone"],
"other_talk_limit": ["Other Talk limit", TIME_MINUTES, "mdi:cellphone"],
"other_talk_remaining": ["Other Talk remaining", TIME_MINUTES, "mdi:cellphone"],
}
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(

View file

@ -11,7 +11,12 @@ import voluptuous as vol
from homeassistant.components.http import HomeAssistantView
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, CONF_UNIT_SYSTEM
from homeassistant.const import (
ATTR_ATTRIBUTION,
CONF_UNIT_SYSTEM,
TIME_MILLISECONDS,
TIME_MINUTES,
)
from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -48,14 +53,14 @@ FITBIT_RESOURCES_LIST = {
"activities/elevation": ["Elevation", "", "walk"],
"activities/floors": ["Floors", "floors", "walk"],
"activities/heart": ["Resting Heart Rate", "bpm", "heart-pulse"],
"activities/minutesFairlyActive": ["Minutes Fairly Active", "minutes", "walk"],
"activities/minutesLightlyActive": ["Minutes Lightly Active", "minutes", "walk"],
"activities/minutesFairlyActive": ["Minutes Fairly Active", TIME_MINUTES, "walk"],
"activities/minutesLightlyActive": ["Minutes Lightly Active", TIME_MINUTES, "walk"],
"activities/minutesSedentary": [
"Minutes Sedentary",
"minutes",
TIME_MINUTES,
"seat-recline-normal",
],
"activities/minutesVeryActive": ["Minutes Very Active", "minutes", "run"],
"activities/minutesVeryActive": ["Minutes Very Active", TIME_MINUTES, "run"],
"activities/steps": ["Steps", "steps", "walk"],
"activities/tracker/activityCalories": ["Tracker Activity Calories", "cal", "fire"],
"activities/tracker/calories": ["Tracker Calories", "cal", "fire"],
@ -64,22 +69,22 @@ FITBIT_RESOURCES_LIST = {
"activities/tracker/floors": ["Tracker Floors", "floors", "walk"],
"activities/tracker/minutesFairlyActive": [
"Tracker Minutes Fairly Active",
"minutes",
TIME_MINUTES,
"walk",
],
"activities/tracker/minutesLightlyActive": [
"Tracker Minutes Lightly Active",
"minutes",
TIME_MINUTES,
"walk",
],
"activities/tracker/minutesSedentary": [
"Tracker Minutes Sedentary",
"minutes",
TIME_MINUTES,
"seat-recline-normal",
],
"activities/tracker/minutesVeryActive": [
"Tracker Minutes Very Active",
"minutes",
TIME_MINUTES,
"run",
],
"activities/tracker/steps": ["Tracker Steps", "steps", "walk"],
@ -89,17 +94,21 @@ FITBIT_RESOURCES_LIST = {
"devices/battery": ["Battery", None, None],
"sleep/awakeningsCount": ["Awakenings Count", "times awaken", "sleep"],
"sleep/efficiency": ["Sleep Efficiency", "%", "sleep"],
"sleep/minutesAfterWakeup": ["Minutes After Wakeup", "minutes", "sleep"],
"sleep/minutesAsleep": ["Sleep Minutes Asleep", "minutes", "sleep"],
"sleep/minutesAwake": ["Sleep Minutes Awake", "minutes", "sleep"],
"sleep/minutesToFallAsleep": ["Sleep Minutes to Fall Asleep", "minutes", "sleep"],
"sleep/minutesAfterWakeup": ["Minutes After Wakeup", TIME_MINUTES, "sleep"],
"sleep/minutesAsleep": ["Sleep Minutes Asleep", TIME_MINUTES, "sleep"],
"sleep/minutesAwake": ["Sleep Minutes Awake", TIME_MINUTES, "sleep"],
"sleep/minutesToFallAsleep": [
"Sleep Minutes to Fall Asleep",
TIME_MINUTES,
"sleep",
],
"sleep/startTime": ["Sleep Start Time", None, "clock"],
"sleep/timeInBed": ["Sleep Time in Bed", "minutes", "hotel"],
"sleep/timeInBed": ["Sleep Time in Bed", TIME_MINUTES, "hotel"],
}
FITBIT_MEASUREMENTS = {
"en_US": {
"duration": "ms",
"duration": TIME_MILLISECONDS,
"distance": "mi",
"elevation": "ft",
"height": "in",
@ -110,7 +119,7 @@ FITBIT_MEASUREMENTS = {
"battery": "",
},
"en_GB": {
"duration": "milliseconds",
"duration": TIME_MILLISECONDS,
"distance": "kilometers",
"elevation": "meters",
"height": "centimeters",
@ -121,7 +130,7 @@ FITBIT_MEASUREMENTS = {
"battery": "",
},
"metric": {
"duration": "milliseconds",
"duration": TIME_MILLISECONDS,
"distance": "kilometers",
"elevation": "meters",
"height": "centimeters",

View file

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_TOKEN,
CONF_USERNAME,
TEMP_CELSIUS,
TIME_SECONDS,
)
from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -30,7 +31,7 @@ ATTR_VOLATILE_ORGANIC_COMPOUNDS = "VOC"
ATTR_FOOBOT_INDEX = "index"
SENSOR_TYPES = {
"time": [ATTR_TIME, "s"],
"time": [ATTR_TIME, TIME_SECONDS],
"pm": [ATTR_PM2_5, "µg/m3", "mdi:cloud"],
"tmp": [ATTR_TEMPERATURE, TEMP_CELSIUS, "mdi:thermometer"],
"hum": [ATTR_HUMIDITY, "%", "mdi:water-percent"],

View file

@ -1,5 +1,5 @@
"""Constants for the Garmin Connect integration."""
from homeassistant.const import DEVICE_CLASS_TIMESTAMP
from homeassistant.const import DEVICE_CLASS_TIMESTAMP, TIME_MINUTES
DOMAIN = "garmin_connect"
ATTRIBUTION = "Data provided by garmin.com"
@ -52,20 +52,32 @@ GARMIN_ENTITY_LIST = {
False,
],
"wellnessKilocalories": ["Wellness KiloCalories", "kcal", "mdi:food", None, False],
"highlyActiveSeconds": ["Highly Active Time", "min", "mdi:fire", None, False],
"activeSeconds": ["Active Time", "min", "mdi:fire", None, True],
"sedentarySeconds": ["Sedentary Time", "min", "mdi:seat", None, True],
"sleepingSeconds": ["Sleeping Time", "min", "mdi:sleep", None, True],
"measurableAwakeDuration": ["Awake Duration", "min", "mdi:sleep", None, True],
"measurableAsleepDuration": ["Sleep Duration", "min", "mdi:sleep", None, True],
"floorsAscendedInMeters": ["Floors Ascended Mtr", "m", "mdi:stairs", None, False],
"floorsDescendedInMeters": [
"Floors Descended Mtr",
"m",
"mdi:stairs",
"highlyActiveSeconds": [
"Highly Active Time",
TIME_MINUTES,
"mdi:fire",
None,
False,
],
"activeSeconds": ["Active Time", TIME_MINUTES, "mdi:fire", None, True],
"sedentarySeconds": ["Sedentary Time", TIME_MINUTES, "mdi:seat", None, True],
"sleepingSeconds": ["Sleeping Time", TIME_MINUTES, "mdi:sleep", None, True],
"measurableAwakeDuration": [
"Awake Duration",
TIME_MINUTES,
"mdi:sleep",
None,
True,
],
"measurableAsleepDuration": [
"Sleep Duration",
TIME_MINUTES,
"mdi:sleep",
None,
True,
],
"floorsAscendedInMeters": ["Floors Ascended Mtr", "m", "mdi:stairs", None, False],
"floorsDescendedInMeters": ["Floors Descended Mtr", "m", "mdi:stairs", None, False],
"floorsAscended": ["Floors Ascended", "floors", "mdi:stairs", None, True],
"floorsDescended": ["Floors Descended", "floors", "mdi:stairs", None, True],
"userFloorsAscendedGoal": [
@ -97,46 +109,52 @@ GARMIN_ENTITY_LIST = {
"averageStressLevel": ["Avg Stress Level", "", "mdi:flash-alert", None, True],
"maxStressLevel": ["Max Stress Level", "", "mdi:flash-alert", None, True],
"stressQualifier": ["Stress Qualifier", "", "mdi:flash-alert", None, False],
"stressDuration": ["Stress Duration", "min", "mdi:flash-alert", None, False],
"stressDuration": ["Stress Duration", TIME_MINUTES, "mdi:flash-alert", None, False],
"restStressDuration": [
"Rest Stress Duration",
"min",
TIME_MINUTES,
"mdi:flash-alert",
None,
True,
],
"activityStressDuration": [
"Activity Stress Duration",
"min",
TIME_MINUTES,
"mdi:flash-alert",
None,
True,
],
"uncategorizedStressDuration": [
"Uncat. Stress Duration",
"min",
TIME_MINUTES,
"mdi:flash-alert",
None,
True,
],
"totalStressDuration": [
"Total Stress Duration",
"min",
TIME_MINUTES,
"mdi:flash-alert",
None,
True,
],
"lowStressDuration": [
"Low Stress Duration",
TIME_MINUTES,
"mdi:flash-alert",
None,
True,
],
"lowStressDuration": ["Low Stress Duration", "min", "mdi:flash-alert", None, True],
"mediumStressDuration": [
"Medium Stress Duration",
"min",
TIME_MINUTES,
"mdi:flash-alert",
None,
True,
],
"highStressDuration": [
"High Stress Duration",
"min",
TIME_MINUTES,
"mdi:flash-alert",
None,
True,
@ -186,19 +204,25 @@ GARMIN_ENTITY_LIST = {
],
"moderateIntensityMinutes": [
"Moderate Intensity",
"min",
TIME_MINUTES,
"mdi:flash-alert",
None,
False,
],
"vigorousIntensityMinutes": [
"Vigorous Intensity",
"min",
TIME_MINUTES,
"mdi:run-fast",
None,
False,
],
"intensityMinutesGoal": [
"Intensity Goal",
TIME_MINUTES,
"mdi:run-fast",
None,
False,
],
"intensityMinutesGoal": ["Intensity Goal", "min", "mdi:run-fast", None, False],
"bodyBatteryChargedValue": [
"Body Battery Charged",
"%",

View file

@ -14,6 +14,7 @@ from homeassistant.const import (
CONF_MODE,
CONF_NAME,
EVENT_HOMEASSISTANT_START,
TIME_MINUTES,
)
from homeassistant.helpers import location
import homeassistant.helpers.config_validation as cv
@ -188,7 +189,7 @@ class GoogleTravelTimeSensor(Entity):
self._hass = hass
self._name = name
self._options = options
self._unit_of_measurement = "min"
self._unit_of_measurement = TIME_MINUTES
self._matrix = None
self.valid_api_connection = True

View file

@ -11,6 +11,7 @@ from homeassistant.const import (
CONF_MONITORED_CONDITIONS,
CONF_NAME,
STATE_UNKNOWN,
TIME_DAYS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -39,7 +40,7 @@ MONITORED_CONDITIONS = {
"mdi:checkbox-marked-circle-outline",
],
ATTR_NEW_VERSION: [["software", "updateNewVersion"], None, "mdi:update"],
ATTR_UPTIME: [["system", "uptime"], "days", "mdi:timelapse"],
ATTR_UPTIME: [["system", "uptime"], TIME_DAYS, "mdi:timelapse"],
ATTR_LAST_RESTART: [["system", "uptime"], None, "mdi:restart"],
ATTR_LOCAL_IP: [["wan", "localIpAddress"], None, "mdi:access-point-network"],
ATTR_STATUS: [["wan", "online"], None, "mdi:google"],

View file

@ -9,6 +9,9 @@ from homeassistant.const import (
CONF_PORT,
CONF_TEMPERATURE_UNIT,
EVENT_HOMEASSISTANT_STOP,
TIME_HOURS,
TIME_MINUTES,
TIME_SECONDS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.discovery import async_load_platform
@ -40,10 +43,6 @@ SENSOR_TYPE_VOLTAGE = "voltage_sensor"
TEMPERATURE_UNIT_CELSIUS = "C"
TIME_UNIT_SECOND = "s"
TIME_UNIT_MINUTE = "min"
TIME_UNIT_HOUR = "h"
TEMPERATURE_SENSOR_SCHEMA = vol.Schema(
{vol.Required(CONF_NUMBER): vol.Range(1, 8), vol.Required(CONF_NAME): cv.string}
)
@ -69,8 +68,8 @@ PULSE_COUNTER_SCHEMA = vol.Schema(
vol.Required(CONF_NAME): cv.string,
vol.Required(CONF_COUNTED_QUANTITY): cv.string,
vol.Optional(CONF_COUNTED_QUANTITY_PER_PULSE, default=1.0): vol.Coerce(float),
vol.Optional(CONF_TIME_UNIT, default=TIME_UNIT_SECOND): vol.Any(
TIME_UNIT_SECOND, TIME_UNIT_MINUTE, TIME_UNIT_HOUR
vol.Optional(CONF_TIME_UNIT, default=TIME_SECONDS): vol.Any(
TIME_SECONDS, TIME_MINUTES, TIME_HOURS
),
}
)

View file

@ -1,7 +1,14 @@
"""Support for the sensors in a GreenEye Monitor."""
import logging
from homeassistant.const import CONF_NAME, CONF_TEMPERATURE_UNIT, POWER_WATT
from homeassistant.const import (
CONF_NAME,
CONF_TEMPERATURE_UNIT,
POWER_WATT,
TIME_HOURS,
TIME_MINUTES,
TIME_SECONDS,
)
from homeassistant.helpers.entity import Entity
from . import (
@ -17,9 +24,6 @@ from . import (
SENSOR_TYPE_PULSE_COUNTER,
SENSOR_TYPE_TEMPERATURE,
SENSOR_TYPE_VOLTAGE,
TIME_UNIT_HOUR,
TIME_UNIT_MINUTE,
TIME_UNIT_SECOND,
)
_LOGGER = logging.getLogger(__name__)
@ -235,11 +239,11 @@ class PulseCounter(GEMSensor):
@property
def _seconds_per_time_unit(self):
"""Return the number of seconds in the given display time unit."""
if self._time_unit == TIME_UNIT_SECOND:
if self._time_unit == TIME_SECONDS:
return 1
if self._time_unit == TIME_UNIT_MINUTE:
if self._time_unit == TIME_MINUTES:
return 60
if self._time_unit == TIME_UNIT_HOUR:
if self._time_unit == TIME_HOURS:
return 3600
@property

View file

@ -18,6 +18,7 @@ from homeassistant.const import (
CONF_UNIT_SYSTEM_IMPERIAL,
CONF_UNIT_SYSTEM_METRIC,
EVENT_HOMEASSISTANT_START,
TIME_MINUTES,
)
from homeassistant.core import HomeAssistant, State, callback
from homeassistant.helpers import location
@ -85,8 +86,6 @@ ATTR_DURATION_IN_TRAFFIC = "duration_in_traffic"
ATTR_ORIGIN_NAME = "origin_name"
ATTR_DESTINATION_NAME = "destination_name"
UNIT_OF_MEASUREMENT = "min"
SCAN_INTERVAL = timedelta(minutes=5)
NO_ROUTE_ERROR_MESSAGE = "HERE could not find a route based on the input"
@ -209,7 +208,7 @@ class HERETravelTimeSensor(Entity):
self._origin_entity_id = origin_entity_id
self._destination_entity_id = destination_entity_id
self._here_data = here_data
self._unit_of_measurement = UNIT_OF_MEASUREMENT
self._unit_of_measurement = TIME_MINUTES
self._attrs = {
ATTR_UNIT_SYSTEM: self._here_data.units,
ATTR_MODE: self._here_data.travel_mode,

View file

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

View file

@ -8,6 +8,7 @@ from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE,
ENERGY_WATT_HOUR,
POWER_WATT,
TIME_HOURS,
)
from .const import ATTR_DISCOVER_DEVICES
@ -47,7 +48,7 @@ HM_UNIT_HA_CAST = {
"LOWEST_ILLUMINATION": "lx",
"HIGHEST_ILLUMINATION": "lx",
"RAIN_COUNTER": "mm",
"WIND_SPEED": "km/h",
"WIND_SPEED": f"km/{TIME_HOURS}",
"WIND_DIRECTION": "°",
"WIND_DIRECTION_RANGE": "°",
"SUNSHINEDURATION": "#",

View file

@ -32,6 +32,7 @@ from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE,
POWER_WATT,
TEMP_CELSIUS,
TIME_HOURS,
)
from homeassistant.helpers.typing import HomeAssistantType
@ -332,7 +333,7 @@ class HomematicipWindspeedSensor(HomematicipGenericDevice):
@property
def unit_of_measurement(self) -> str:
"""Return the unit this state is expressed in."""
return "km/h"
return f"km/{TIME_HOURS}"
@property
def device_state_attributes(self) -> Dict[str, Any]:

View file

@ -8,8 +8,6 @@ DEFAULT_NOTIFY_SERVICE_NAME = DOMAIN
UPDATE_SIGNAL = f"{DOMAIN}_update"
UPDATE_OPTIONS_SIGNAL = f"{DOMAIN}_options_update"
UNIT_SECONDS = "s"
CONNECTION_TIMEOUT = 10
NOTIFY_SUPPRESS_TIMEOUT = 30

View file

@ -10,7 +10,7 @@ from homeassistant.components.sensor import (
DEVICE_CLASS_SIGNAL_STRENGTH,
DOMAIN as SENSOR_DOMAIN,
)
from homeassistant.const import CONF_URL, DATA_BYTES, STATE_UNKNOWN
from homeassistant.const import CONF_URL, DATA_BYTES, STATE_UNKNOWN, TIME_SECONDS
from . import HuaweiLteBaseEntity
from .const import (
@ -18,7 +18,6 @@ from .const import (
KEY_DEVICE_INFORMATION,
KEY_DEVICE_SIGNAL,
KEY_MONITORING_TRAFFIC_STATISTICS,
UNIT_SECONDS,
)
_LOGGER = logging.getLogger(__name__)
@ -122,7 +121,7 @@ SENSOR_META = {
exclude=re.compile(r"^showtraffic$", re.IGNORECASE)
),
(KEY_MONITORING_TRAFFIC_STATISTICS, "CurrentConnectTime"): dict(
name="Current connection duration", unit=UNIT_SECONDS, icon="mdi:timer"
name="Current connection duration", unit=TIME_SECONDS, icon="mdi:timer"
),
(KEY_MONITORING_TRAFFIC_STATISTICS, "CurrentDownload"): dict(
name="Current connection download", unit=DATA_BYTES, icon="mdi:download"
@ -131,7 +130,7 @@ SENSOR_META = {
name="Current connection upload", unit=DATA_BYTES, icon="mdi:upload"
),
(KEY_MONITORING_TRAFFIC_STATISTICS, "TotalConnectTime"): dict(
name="Total connected duration", unit=UNIT_SECONDS, icon="mdi:timer"
name="Total connected duration", unit=TIME_SECONDS, icon="mdi:timer"
),
(KEY_MONITORING_TRAFFIC_STATISTICS, "TotalDownload"): dict(
name="Total download", unit=DATA_BYTES, icon="mdi:download"

View file

@ -6,7 +6,12 @@ from hydrawiser.core import Hydrawiser
from requests.exceptions import ConnectTimeout, HTTPError
import voluptuous as vol
from homeassistant.const import ATTR_ATTRIBUTION, CONF_ACCESS_TOKEN, CONF_SCAN_INTERVAL
from homeassistant.const import (
ATTR_ATTRIBUTION,
CONF_ACCESS_TOKEN,
CONF_SCAN_INTERVAL,
TIME_MINUTES,
)
from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_connect, dispatcher_send
@ -40,7 +45,7 @@ DEVICE_MAP = {
"manual_watering": ["Manual Watering", "mdi:water-pump", "", ""],
"next_cycle": ["Next Cycle", "mdi:calendar-clock", "", ""],
"status": ["Status", "", "connectivity", ""],
"watering_time": ["Watering Time", "mdi:water-pump", "", "min"],
"watering_time": ["Watering Time", "mdi:water-pump", "", TIME_MINUTES],
"rain_sensor": ["Rain Sensor", "", "moisture", ""],
}

View file

@ -10,6 +10,10 @@ from homeassistant.const import (
CONF_NAME,
STATE_UNAVAILABLE,
STATE_UNKNOWN,
TIME_DAYS,
TIME_HOURS,
TIME_MINUTES,
TIME_SECONDS,
)
from homeassistant.core import callback
import homeassistant.helpers.config_validation as cv
@ -38,7 +42,12 @@ INTEGRATION_METHOD = [TRAPEZOIDAL_METHOD, LEFT_METHOD, RIGHT_METHOD]
UNIT_PREFIXES = {None: 1, "k": 10 ** 3, "G": 10 ** 6, "T": 10 ** 9}
# SI Time prefixes
UNIT_TIME = {"s": 1, "min": 60, "h": 60 * 60, "d": 24 * 60 * 60}
UNIT_TIME = {
TIME_SECONDS: 1,
TIME_MINUTES: 60,
TIME_HOURS: 60 * 60,
TIME_DAYS: 24 * 60 * 60,
}
ICON = "mdi:chart-histogram"
@ -50,7 +59,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
vol.Required(CONF_SOURCE_SENSOR): cv.entity_id,
vol.Optional(CONF_ROUND_DIGITS, default=DEFAULT_ROUND): vol.Coerce(int),
vol.Optional(CONF_UNIT_PREFIX, default=None): vol.In(UNIT_PREFIXES),
vol.Optional(CONF_UNIT_TIME, default="h"): vol.In(UNIT_TIME),
vol.Optional(CONF_UNIT_TIME, default=TIME_HOURS): vol.In(UNIT_TIME),
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
vol.Optional(CONF_METHOD, default=TRAPEZOIDAL_METHOD): vol.In(
INTEGRATION_METHOD

View file

@ -6,7 +6,7 @@ from pyirishrail.pyirishrail import IrishRailRTPI
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -118,7 +118,7 @@ class IrishRailTransportSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
@property
def icon(self):

View file

@ -3,7 +3,19 @@ import logging
from typing import Callable
from homeassistant.components.sensor import DOMAIN
from homeassistant.const import POWER_WATT, TEMP_CELSIUS, TEMP_FAHRENHEIT, UNIT_UV_INDEX
from homeassistant.const import (
POWER_WATT,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
TIME_DAYS,
TIME_HOURS,
TIME_MILLISECONDS,
TIME_MINUTES,
TIME_MONTHS,
TIME_SECONDS,
TIME_YEARS,
UNIT_UV_INDEX,
)
from homeassistant.helpers.typing import ConfigType
from . import ISY994_NODES, ISY994_WEATHER, ISYDevice
@ -12,22 +24,22 @@ _LOGGER = logging.getLogger(__name__)
UOM_FRIENDLY_NAME = {
"1": "amp",
"3": "btu/h",
"3": f"btu/{TIME_HOURS}",
"4": TEMP_CELSIUS,
"5": "cm",
"6": "ft³",
"7": "ft³/min",
"7": f"ft³/{TIME_MINUTES}",
"8": "",
"9": "day",
"10": "days",
"9": TIME_DAYS,
"10": TIME_DAYS,
"12": "dB",
"13": "dB A",
"14": "°",
"16": "macroseismic",
"17": TEMP_FAHRENHEIT,
"18": "ft",
"19": "hour",
"20": "hours",
"19": TIME_HOURS,
"20": TIME_HOURS,
"21": "abs. humidity (%)",
"22": "rel. humidity (%)",
"23": "inHg",
@ -47,24 +59,24 @@ UOM_FRIENDLY_NAME = {
"37": "mercalli",
"38": "m",
"39": "m³/hr",
"40": "m/s",
"40": f"m/{TIME_SECONDS}",
"41": "mA",
"42": "ms",
"42": TIME_MILLISECONDS,
"43": "mV",
"44": "min",
"45": "min",
"44": TIME_MINUTES,
"45": TIME_MINUTES,
"46": "mm/hr",
"47": "month",
"47": TIME_MONTHS,
"48": "MPH",
"49": "m/s",
"49": f"m/{TIME_SECONDS}",
"50": "ohm",
"51": "%",
"52": "lb",
"53": "power factor",
"54": "ppm",
"55": "pulse count",
"57": "s",
"58": "s",
"57": TIME_SECONDS,
"58": TIME_SECONDS,
"59": "seimens/m",
"60": "body wave magnitude scale",
"61": "Ricter scale",
@ -79,7 +91,7 @@ UOM_FRIENDLY_NAME = {
"74": "W/m²",
"75": "weekday",
"76": "Wind Direction (°)",
"77": "year",
"77": TIME_YEARS,
"82": "mm",
"83": "km",
"85": "ohm",

View file

@ -1,7 +1,7 @@
"""Support for monitoring juicenet/juicepoint/juicebox based EVSE sensors."""
import logging
from homeassistant.const import ENERGY_WATT_HOUR, POWER_WATT, TEMP_CELSIUS
from homeassistant.const import ENERGY_WATT_HOUR, POWER_WATT, TEMP_CELSIUS, TIME_SECONDS
from homeassistant.helpers.entity import Entity
from . import DOMAIN, JuicenetDevice
@ -14,7 +14,7 @@ SENSOR_TYPES = {
"voltage": ["Voltage", "V"],
"amps": ["Amps", "A"],
"watts": ["Watts", POWER_WATT],
"charge_time": ["Charge time", "s"],
"charge_time": ["Charge time", TIME_SECONDS],
"energy_added": ["Energy added", ENERGY_WATT_HOUR],
}

View file

@ -7,6 +7,7 @@ from homeassistant.const import (
CONF_BRIGHTNESS,
CONF_STATE,
CONF_UNIT_OF_MEASUREMENT,
TIME_SECONDS,
)
import homeassistant.helpers.config_validation as cv
@ -281,7 +282,7 @@ class SendKeys(LcnServiceCall):
vol.Upper, vol.In(SENDKEYCOMMANDS)
),
vol.Optional(CONF_TIME, default=0): vol.All(int, vol.Range(min=0)),
vol.Optional(CONF_TIME_UNIT, default="s"): vol.All(
vol.Optional(CONF_TIME_UNIT, default=TIME_SECONDS): vol.All(
vol.Upper, vol.In(TIME_UNITS)
),
}
@ -324,7 +325,7 @@ class LockKeys(LcnServiceCall):
),
vol.Required(CONF_STATE): is_key_lock_states_string,
vol.Optional(CONF_TIME, default=0): vol.All(int, vol.Range(min=0)),
vol.Optional(CONF_TIME_UNIT, default="s"): vol.All(
vol.Optional(CONF_TIME_UNIT, default=TIME_SECONDS): vol.All(
vol.Upper, vol.In(TIME_UNITS)
),
}

View file

@ -8,6 +8,7 @@ from lyft_rides.errors import APIError
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
@ -88,7 +89,7 @@ class LyftSensor(Entity):
if "lyft" not in self._name.lower():
self._name = f"Lyft{self._name}"
if self._sensortype == "time":
self._unit_of_measurement = "min"
self._unit_of_measurement = TIME_MINUTES
elif self._sensortype == "price":
estimate = self._product["estimate"]
if estimate is not None:

View file

@ -1,6 +1,6 @@
"""Meteo-France component constants."""
from homeassistant.const import TEMP_CELSIUS
from homeassistant.const import TEMP_CELSIUS, TIME_HOURS, TIME_MINUTES
DOMAIN = "meteo_france"
PLATFORMS = ["sensor", "weather"]
@ -47,13 +47,13 @@ SENSOR_TYPES = {
},
"wind_speed": {
SENSOR_TYPE_NAME: "Wind Speed",
SENSOR_TYPE_UNIT: "km/h",
SENSOR_TYPE_UNIT: f"km/{TIME_HOURS}",
SENSOR_TYPE_ICON: "mdi:weather-windy",
SENSOR_TYPE_CLASS: None,
},
"next_rain": {
SENSOR_TYPE_NAME: "Next rain",
SENSOR_TYPE_UNIT: "min",
SENSOR_TYPE_UNIT: TIME_MINUTES,
SENSOR_TYPE_ICON: "mdi:weather-rainy",
SENSOR_TYPE_CLASS: None,
},

View file

@ -30,7 +30,6 @@ SCAN_INTERVAL = 60
SIGNAL_NAME_PREFIX = f"signal_{DOMAIN}"
UNIT_LATENCY_TIME = "ms"
UNIT_PLAYERS_MAX = "players"
UNIT_PLAYERS_ONLINE = "players"
UNIT_PROTOCOL_VERSION = None

View file

@ -4,6 +4,7 @@ import logging
from typing import Any, Dict
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import TIME_MILLISECONDS
from homeassistant.helpers.typing import HomeAssistantType
from . import MinecraftServer, MinecraftServerEntity
@ -20,7 +21,6 @@ from .const import (
NAME_PLAYERS_ONLINE,
NAME_PROTOCOL_VERSION,
NAME_VERSION,
UNIT_LATENCY_TIME,
UNIT_PLAYERS_MAX,
UNIT_PLAYERS_ONLINE,
UNIT_PROTOCOL_VERSION,
@ -121,7 +121,7 @@ class MinecraftServerLatencyTimeSensor(MinecraftServerSensorEntity):
server=server,
type_name=NAME_LATENCY_TIME,
icon=ICON_LATENCY_TIME,
unit=UNIT_LATENCY_TIME,
unit=TIME_MILLISECONDS,
)
async def async_update(self) -> None:

View file

@ -7,7 +7,7 @@ import MVGLive
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -131,7 +131,7 @@ class MVGLiveSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
def update(self):
"""Get the latest data and update the state."""

View file

@ -9,6 +9,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS,
TIME_HOURS,
)
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
@ -66,10 +67,10 @@ SENSOR_TYPES = {
"max_temp": ["Max Temp.", TEMP_CELSIUS, "mdi:thermometer", None],
"windangle": ["Angle", "", "mdi:compass", None],
"windangle_value": ["Angle Value", "º", "mdi:compass", None],
"windstrength": ["Wind Strength", "km/h", "mdi:weather-windy", None],
"windstrength": ["Wind Strength", f"km/{TIME_HOURS}", "mdi:weather-windy", None],
"gustangle": ["Gust Angle", "", "mdi:compass", None],
"gustangle_value": ["Gust Angle Value", "º", "mdi:compass", None],
"guststrength": ["Gust Strength", "km/h", "mdi:weather-windy", None],
"guststrength": ["Gust Strength", f"km/{TIME_HOURS}", "mdi:weather-windy", None],
"reachable": ["Reachability", "", "mdi:signal", None],
"rf_status": ["Radio", "", "mdi:signal", None],
"rf_status_lvl": ["Radio_lvl", "", "mdi:signal", None],

View file

@ -11,6 +11,7 @@ from homeassistant.const import (
ATTR_LONGITUDE,
CONF_NAME,
CONF_SHOW_ON_MAP,
TIME_MINUTES,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -184,7 +185,7 @@ class NMBSSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit of measurement."""
return "min"
return TIME_MINUTES
@property
def icon(self):

View file

@ -18,6 +18,7 @@ from homeassistant.const import (
POWER_WATT,
STATE_UNKNOWN,
TEMP_CELSIUS,
TIME_SECONDS,
)
from homeassistant.exceptions import PlatformNotReady
import homeassistant.helpers.config_validation as cv
@ -53,13 +54,13 @@ SENSOR_TYPES = {
"ups.load": ["Load", "%", "mdi:gauge"],
"ups.load.high": ["Overload Setting", "%", "mdi:gauge"],
"ups.id": ["System identifier", "", "mdi:information-outline"],
"ups.delay.start": ["Load Restart Delay", "s", "mdi:timer"],
"ups.delay.reboot": ["UPS Reboot Delay", "s", "mdi:timer"],
"ups.delay.shutdown": ["UPS Shutdown Delay", "s", "mdi:timer"],
"ups.timer.start": ["Load Start Timer", "s", "mdi:timer"],
"ups.timer.reboot": ["Load Reboot Timer", "s", "mdi:timer"],
"ups.timer.shutdown": ["Load Shutdown Timer", "s", "mdi:timer"],
"ups.test.interval": ["Self-Test Interval", "s", "mdi:timer"],
"ups.delay.start": ["Load Restart Delay", TIME_SECONDS, "mdi:timer"],
"ups.delay.reboot": ["UPS Reboot Delay", TIME_SECONDS, "mdi:timer"],
"ups.delay.shutdown": ["UPS Shutdown Delay", TIME_SECONDS, "mdi:timer"],
"ups.timer.start": ["Load Start Timer", TIME_SECONDS, "mdi:timer"],
"ups.timer.reboot": ["Load Reboot Timer", TIME_SECONDS, "mdi:timer"],
"ups.timer.shutdown": ["Load Shutdown Timer", TIME_SECONDS, "mdi:timer"],
"ups.test.interval": ["Self-Test Interval", TIME_SECONDS, "mdi:timer"],
"ups.test.result": ["Self-Test Result", "", "mdi:information-outline"],
"ups.test.date": ["Self-Test Date", "", "mdi:calendar"],
"ups.display.language": ["Language", "", "mdi:information-outline"],
@ -89,9 +90,13 @@ SENSOR_TYPES = {
"battery.current": ["Battery Current", "A", "mdi:flash"],
"battery.current.total": ["Total Battery Current", "A", "mdi:flash"],
"battery.temperature": ["Battery Temperature", TEMP_CELSIUS, "mdi:thermometer"],
"battery.runtime": ["Battery Runtime", "s", "mdi:timer"],
"battery.runtime.low": ["Low Battery Runtime", "s", "mdi:timer"],
"battery.runtime.restart": ["Minimum Battery Runtime to Start", "s", "mdi:timer"],
"battery.runtime": ["Battery Runtime", TIME_SECONDS, "mdi:timer"],
"battery.runtime.low": ["Low Battery Runtime", TIME_SECONDS, "mdi:timer"],
"battery.runtime.restart": [
"Minimum Battery Runtime to Start",
TIME_SECONDS,
"mdi:timer",
],
"battery.alarm.threshold": [
"Battery Alarm Threshold",
"",
@ -189,8 +194,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
data.update(no_throttle=True)
except data.pynuterror as err:
_LOGGER.error(
"Failure while testing NUT status retrieval. Cannot continue setup: %s",
err,
"Failure while testing NUT status retrieval. Cannot continue setup: %s", err
)
raise PlatformNotReady

View file

@ -1,7 +1,11 @@
"""Monitor the NZBGet API."""
import logging
from homeassistant.const import DATA_MEGABYTES, DATA_RATE_MEGABYTES_PER_SECOND
from homeassistant.const import (
DATA_MEGABYTES,
DATA_RATE_MEGABYTES_PER_SECOND,
TIME_MINUTES,
)
from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.helpers.entity import Entity
@ -26,7 +30,7 @@ SENSOR_TYPES = {
"post_job_count": ["PostJobCount", "Post Processing Jobs", "Jobs"],
"post_paused": ["PostPaused", "Post Processing Paused", None],
"remaining_size": ["RemainingSizeMB", "Queue Size", DATA_MEGABYTES],
"uptime": ["UpTimeSec", "Uptime", "min"],
"uptime": ["UpTimeSec", "Uptime", TIME_MINUTES],
}

View file

@ -19,6 +19,7 @@ from homeassistant.const import (
CONF_SSL,
CONTENT_TYPE_JSON,
TEMP_CELSIUS,
TIME_SECONDS,
)
from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv
@ -71,8 +72,14 @@ SENSOR_TYPES = {
"Temperatures": ["printer", "temperature", "*", TEMP_CELSIUS],
"Current State": ["printer", "state", "text", None, "mdi:printer-3d"],
"Job Percentage": ["job", "progress", "completion", "%", "mdi:file-percent"],
"Time Remaining": ["job", "progress", "printTimeLeft", "seconds", "mdi:clock-end"],
"Time Elapsed": ["job", "progress", "printTime", "seconds", "mdi:clock-start"],
"Time Remaining": [
"job",
"progress",
"printTimeLeft",
TIME_SECONDS,
"mdi:clock-end",
],
"Time Elapsed": ["job", "progress", "printTime", TIME_SECONDS, "mdi:clock-start"],
}
SENSOR_SCHEMA = vol.Schema(

View file

@ -11,6 +11,7 @@ from homeassistant.const import (
CONF_MONITORED_VARIABLES,
ENERGY_KILO_WATT_HOUR,
TEMP_CELSIUS,
TIME_MINUTES,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -19,7 +20,7 @@ _LOGGER = logging.getLogger(__name__)
SENSOR_TYPES = {
"status": ["Charging Status", None],
"charge_time": ["Charge Time Elapsed", "minutes"],
"charge_time": ["Charge Time Elapsed", TIME_MINUTES],
"ambient_temp": ["Ambient Temperature", TEMP_CELSIUS],
"ir_temp": ["IR Temperature", TEMP_CELSIUS],
"rtc_temp": ["RTC Temperature", TEMP_CELSIUS],

View file

@ -1,7 +1,12 @@
"""Constants for the opentherm_gw integration."""
import pyotgw.vars as gw_vars
from homeassistant.const import DEVICE_CLASS_TEMPERATURE, TEMP_CELSIUS
from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS,
TIME_HOURS,
TIME_MINUTES,
)
ATTR_GW_ID = "gateway_id"
ATTR_LEVEL = "level"
@ -31,9 +36,8 @@ SERVICE_SET_OAT = "set_outside_temperature"
SERVICE_SET_SB_TEMP = "set_setback_temperature"
UNIT_BAR = "bar"
UNIT_HOUR = "h"
UNIT_KW = "kW"
UNIT_L_MIN = "L/min"
UNIT_L_MIN = f"L/{TIME_MINUTES}"
UNIT_PERCENT = "%"
BINARY_SENSOR_INFO = {
@ -237,10 +241,10 @@ SENSOR_INFO = {
gw_vars.DATA_CH_PUMP_STARTS: [None, None, "Central Heating Pump Starts {}"],
gw_vars.DATA_DHW_PUMP_STARTS: [None, None, "Hot Water Pump Starts {}"],
gw_vars.DATA_DHW_BURNER_STARTS: [None, None, "Hot Water Burner Starts {}"],
gw_vars.DATA_TOTAL_BURNER_HOURS: [None, UNIT_HOUR, "Total Burner Hours {}"],
gw_vars.DATA_CH_PUMP_HOURS: [None, UNIT_HOUR, "Central Heating Pump Hours {}"],
gw_vars.DATA_DHW_PUMP_HOURS: [None, UNIT_HOUR, "Hot Water Pump Hours {}"],
gw_vars.DATA_DHW_BURNER_HOURS: [None, UNIT_HOUR, "Hot Water Burner Hours {}"],
gw_vars.DATA_TOTAL_BURNER_HOURS: [None, TIME_HOURS, "Total Burner Hours {}"],
gw_vars.DATA_CH_PUMP_HOURS: [None, TIME_HOURS, "Central Heating Pump Hours {}"],
gw_vars.DATA_DHW_PUMP_HOURS: [None, TIME_HOURS, "Hot Water Pump Hours {}"],
gw_vars.DATA_DHW_BURNER_HOURS: [None, TIME_HOURS, "Hot Water Burner Hours {}"],
gw_vars.DATA_MASTER_OT_VERSION: [None, None, "Thermostat OpenTherm Version {}"],
gw_vars.DATA_SLAVE_OT_VERSION: [None, None, "Boiler OpenTherm Version {}"],
gw_vars.DATA_MASTER_PRODUCT_TYPE: [None, None, "Thermostat Product Type {}"],

View file

@ -1,6 +1,7 @@
"""Support for OpenUV sensors."""
import logging
from homeassistant.const import TIME_MINUTES
from homeassistant.core import callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.util.dt import as_local, parse_datetime
@ -50,32 +51,32 @@ SENSORS = {
TYPE_SAFE_EXPOSURE_TIME_1: (
"Skin Type 1 Safe Exposure Time",
"mdi:timer",
"minutes",
TIME_MINUTES,
),
TYPE_SAFE_EXPOSURE_TIME_2: (
"Skin Type 2 Safe Exposure Time",
"mdi:timer",
"minutes",
TIME_MINUTES,
),
TYPE_SAFE_EXPOSURE_TIME_3: (
"Skin Type 3 Safe Exposure Time",
"mdi:timer",
"minutes",
TIME_MINUTES,
),
TYPE_SAFE_EXPOSURE_TIME_4: (
"Skin Type 4 Safe Exposure Time",
"mdi:timer",
"minutes",
TIME_MINUTES,
),
TYPE_SAFE_EXPOSURE_TIME_5: (
"Skin Type 5 Safe Exposure Time",
"mdi:timer",
"minutes",
TIME_MINUTES,
),
TYPE_SAFE_EXPOSURE_TIME_6: (
"Skin Type 6 Safe Exposure Time",
"mdi:timer",
"minutes",
TIME_MINUTES,
),
}

View file

@ -14,6 +14,7 @@ from homeassistant.const import (
CONF_NAME,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
TIME_SECONDS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -33,7 +34,7 @@ MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=120)
SENSOR_TYPES = {
"weather": ["Condition", None],
"temperature": ["Temperature", None],
"wind_speed": ["Wind speed", "m/s"],
"wind_speed": ["Wind speed", f"m/{TIME_SECONDS}"],
"wind_bearing": ["Wind bearing", "°"],
"humidity": ["Humidity", "%"],
"pressure": ["Pressure", "mbar"],

View file

@ -11,6 +11,8 @@ from homeassistant.const import (
CONF_PASSWORD,
CONF_SCAN_INTERVAL,
CONF_USERNAME,
TIME_DAYS,
TIME_MINUTES,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.dispatcher import async_dispatcher_connect, dispatcher_send
@ -60,9 +62,9 @@ UNIT_OF_MEASUREMENT_MAP = {
"is_watering": "",
"manual_watering": "",
"next_cycle": "",
"rain_delay": "days",
"rain_delay": TIME_DAYS,
"status": "",
"watering_time": "min",
"watering_time": TIME_MINUTES,
}
BINARY_SENSORS = ["is_watering", "status"]

View file

@ -12,7 +12,7 @@ import rjpl
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
import homeassistant.util.dt as dt_util
@ -130,7 +130,7 @@ class RejseplanenTransportSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
@property
def icon(self):

View file

@ -8,7 +8,7 @@ from RMVtransport.rmvtransport import RMVtransportApiConnectionError
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, TIME_MINUTES
from homeassistant.exceptions import PlatformNotReady
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
@ -177,7 +177,7 @@ class RMVDepartureSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
async def async_update(self):
"""Get the latest data and update the state."""

View file

@ -22,6 +22,7 @@ from homeassistant.const import (
POWER_WATT,
TEMP_CELSIUS,
TEMP_FAHRENHEIT,
TIME_HOURS,
)
from homeassistant.core import CALLBACK_TYPE, callback
from homeassistant.exceptions import PlatformNotReady
@ -34,13 +35,11 @@ _LOGGER = logging.getLogger(__name__)
MIN_INTERVAL = 5
MAX_INTERVAL = 300
UNIT_OF_MEASUREMENT_HOURS = "h"
INVERTER_TYPES = ["ethernet", "wifi"]
SAJ_UNIT_MAPPINGS = {
"": None,
"h": UNIT_OF_MEASUREMENT_HOURS,
"h": TIME_HOURS,
"kg": MASS_KILOGRAMS,
"kWh": ENERGY_KILO_WATT_HOUR,
"W": POWER_WATT,

View file

@ -1,12 +1,12 @@
"""Consts used by Speedtest.net."""
from homeassistant.const import DATA_RATE_MEGABITS_PER_SECOND
from homeassistant.const import DATA_RATE_MEGABITS_PER_SECOND, TIME_MILLISECONDS
DOMAIN = "speedtestdotnet"
DATA_UPDATED = f"{DOMAIN}_data_updated"
SENSOR_TYPES = {
"ping": ["Ping", "ms"],
"ping": ["Ping", TIME_MILLISECONDS],
"download": ["Download", DATA_RATE_MEGABITS_PER_SECOND],
"upload": ["Upload", DATA_RATE_MEGABITS_PER_SECOND],
}

View file

@ -8,6 +8,8 @@ from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE,
POWER_WATT,
TEMP_CELSIUS,
TIME_HOURS,
TIME_SECONDS,
)
from homeassistant.helpers.dispatcher import async_dispatcher_connect
@ -36,11 +38,11 @@ SENSOR_TYPES = {
DEVICE_CLASS_TEMPERATURE,
],
SENSOR_TYPE_HUMIDITY: ["Humidity", "%", None, DEVICE_CLASS_HUMIDITY],
SENSOR_TYPE_RAINRATE: ["Rain rate", "mm/h", "mdi:water", None],
SENSOR_TYPE_RAINRATE: ["Rain rate", f"mm/{TIME_HOURS}", "mdi:water", None],
SENSOR_TYPE_RAINTOTAL: ["Rain total", "mm", "mdi:water", None],
SENSOR_TYPE_WINDDIRECTION: ["Wind direction", "", "", None],
SENSOR_TYPE_WINDAVERAGE: ["Wind average", "m/s", "", None],
SENSOR_TYPE_WINDGUST: ["Wind gust", "m/s", "", None],
SENSOR_TYPE_WINDAVERAGE: ["Wind average", f"m/{TIME_SECONDS}", "", None],
SENSOR_TYPE_WINDGUST: ["Wind gust", f"m/{TIME_SECONDS}", "", None],
SENSOR_TYPE_UV: ["UV", "UV", "", None],
SENSOR_TYPE_WATT: ["Power", POWER_WATT, "", None],
SENSOR_TYPE_LUMINANCE: ["Luminance", "lx", None, DEVICE_CLASS_ILLUMINANCE],

View file

@ -7,7 +7,7 @@ from tmb import IBus
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME
from homeassistant.const import ATTR_ATTRIBUTION, CONF_NAME, TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
@ -72,7 +72,7 @@ class TMBSensor(Entity):
self._stop = stop
self._line = line.upper()
self._name = name
self._unit = "minutes"
self._unit = TIME_MINUTES
self._state = None
@property

View file

@ -17,6 +17,7 @@ from homeassistant.const import (
DEVICE_CLASS_HUMIDITY,
DEVICE_CLASS_TEMPERATURE,
TEMP_CELSIUS,
TIME_SECONDS,
)
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
@ -71,7 +72,13 @@ SENSOR_TYPES = {
"mdi:flag-triangle",
None,
],
"wind_speed": ["Wind speed", "m/s", "windforce", "mdi:weather-windy", None],
"wind_speed": [
"Wind speed",
f"m/{TIME_SECONDS}",
"windforce",
"mdi:weather-windy",
None,
],
"humidity": [
"Humidity",
"%",

View file

@ -6,7 +6,13 @@ from TransportNSW import TransportNSW
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION, ATTR_MODE, CONF_API_KEY, CONF_NAME
from homeassistant.const import (
ATTR_ATTRIBUTION,
ATTR_MODE,
CONF_API_KEY,
CONF_NAME,
TIME_MINUTES,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -101,7 +107,7 @@ class TransportNSWSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
@property
def icon(self):

View file

@ -12,6 +12,7 @@ from homeassistant.const import (
CONF_API_KEY,
CONF_MONITORED_CONDITIONS,
CONF_SCAN_INTERVAL,
TIME_SECONDS,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -30,7 +31,7 @@ SCAN_INTERVAL = timedelta(seconds=30)
# sensor_type [ description, unit, icon ]
SENSOR_TYPES = {
"last_build_id": ["Last Build ID", "", "mdi:account-card-details"],
"last_build_duration": ["Last Build Duration", "sec", "mdi:timelapse"],
"last_build_duration": ["Last Build Duration", TIME_SECONDS, "mdi:timelapse"],
"last_build_finished_at": ["Last Build Finished At", "", "mdi:timetable"],
"last_build_started_at": ["Last Build Started At", "", "mdi:timetable"],
"last_build_state": ["Last Build State", "", "mdi:github-circle"],

View file

@ -7,7 +7,7 @@ import requests
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_MODE
from homeassistant.const import CONF_MODE, TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
from homeassistant.util import Throttle
@ -119,7 +119,7 @@ class UkTransportSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
@property
def icon(self):

View file

@ -1,6 +1,7 @@
"""Support for UPnP/IGD Sensors."""
import logging
from homeassistant.const import TIME_SECONDS
from homeassistant.core import callback
from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.dispatcher import async_dispatcher_connect
@ -192,7 +193,7 @@ class PerSecondUPnPIGDSensor(UpnpSensor):
@property
def unit_of_measurement(self) -> str:
"""Return the unit of measurement of this entity, if any."""
return f"{self.unit}/s"
return f"{self.unit}/{TIME_SECONDS}"
def _is_overflowed(self, new_value) -> bool:
"""Check if value has overflowed."""

View file

@ -7,7 +7,7 @@ import async_timeout
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import ATTR_ATTRIBUTION
from homeassistant.const import ATTR_ATTRIBUTION, TIME_MINUTES
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -177,5 +177,5 @@ class ViaggiaTrenoSensor(Entity):
self._unit = ""
else:
self._state = res.get("ritardo")
self._unit = "min"
self._unit = TIME_MINUTES
self._icon = ICON

View file

@ -16,6 +16,7 @@ from homeassistant.const import (
CONF_UNIT_SYSTEM_IMPERIAL,
CONF_UNIT_SYSTEM_METRIC,
EVENT_HOMEASSISTANT_START,
TIME_MINUTES,
)
from homeassistant.helpers import location
import homeassistant.helpers.config_validation as cv
@ -167,7 +168,7 @@ class WazeTravelTime(Entity):
@property
def unit_of_measurement(self):
"""Return the unit of measurement."""
return "min"
return TIME_MINUTES
@property
def icon(self):

View file

@ -6,7 +6,7 @@ import voluptuous as vol
import whois
from homeassistant.components.sensor import PLATFORM_SCHEMA
from homeassistant.const import CONF_NAME
from homeassistant.const import CONF_NAME, TIME_DAYS
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -75,7 +75,7 @@ class WhoisSensor(Entity):
@property
def unit_of_measurement(self):
"""Return the unit of measurement to present the value in."""
return "days"
return TIME_DAYS
@property
def state(self):

View file

@ -61,10 +61,9 @@ MEAS_WEIGHT_KG = "weight_kg"
UOM_BEATS_PER_MINUTE = "bpm"
UOM_BREATHS_PER_MINUTE = "br/m"
UOM_FREQUENCY = "times"
UOM_METERS_PER_SECOND = "m/s"
UOM_METERS_PER_SECOND = f"m/{const.TIME_SECONDS}"
UOM_MMHG = "mmhg"
UOM_PERCENT = "%"
UOM_LENGTH_M = const.LENGTH_METERS
UOM_MASS_KG = const.MASS_KILOGRAMS
UOM_SECONDS = "seconds"
UOM_TEMP_C = const.TEMP_CELSIUS

View file

@ -13,6 +13,7 @@ from withings_api.common import (
)
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import TIME_SECONDS
from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_entry_oauth2_flow
from homeassistant.helpers.entity import Entity
@ -197,28 +198,28 @@ WITHINGS_ATTRIBUTES = [
const.MEAS_SLEEP_WAKEUP_DURATION_SECONDS,
GetSleepSummaryField.WAKEUP_DURATION.value,
"Wakeup time",
const.UOM_SECONDS,
TIME_SECONDS,
"mdi:sleep-off",
),
WithingsSleepSummaryAttribute(
const.MEAS_SLEEP_LIGHT_DURATION_SECONDS,
GetSleepSummaryField.LIGHT_SLEEP_DURATION.value,
"Light sleep",
const.UOM_SECONDS,
TIME_SECONDS,
"mdi:sleep",
),
WithingsSleepSummaryAttribute(
const.MEAS_SLEEP_DEEP_DURATION_SECONDS,
GetSleepSummaryField.DEEP_SLEEP_DURATION.value,
"Deep sleep",
const.UOM_SECONDS,
TIME_SECONDS,
"mdi:sleep",
),
WithingsSleepSummaryAttribute(
const.MEAS_SLEEP_REM_DURATION_SECONDS,
GetSleepSummaryField.REM_SLEEP_DURATION.value,
"REM sleep",
const.UOM_SECONDS,
TIME_SECONDS,
"mdi:sleep",
),
WithingsSleepSummaryAttribute(
@ -232,14 +233,14 @@ WITHINGS_ATTRIBUTES = [
const.MEAS_SLEEP_TOSLEEP_DURATION_SECONDS,
GetSleepSummaryField.DURATION_TO_SLEEP.value,
"Time to sleep",
const.UOM_SECONDS,
TIME_SECONDS,
"mdi:sleep",
),
WithingsSleepSummaryAttribute(
const.MEAS_SLEEP_TOWAKEUP_DURATION_SECONDS,
GetSleepSummaryField.DURATION_TO_WAKEUP.value,
"Time to wakeup",
const.UOM_SECONDS,
TIME_SECONDS,
"mdi:sleep-off",
),
WithingsSleepSummaryAttribute(

View file

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_API_KEY,
CONF_ID,
CONF_NAME,
TIME_MINUTES,
)
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.entity import Entity
@ -137,7 +138,7 @@ class WashingtonStateTravelTimeSensor(WashingtonStateTransportSensor):
@property
def unit_of_measurement(self):
"""Return the unit this state is expressed in."""
return "min"
return TIME_MINUTES
def _parse_wsdot_timestamp(timestamp):

View file

@ -22,6 +22,7 @@ from homeassistant.const import (
DEVICE_CLASS_TEMPERATURE,
PRESSURE_HPA,
TEMP_CELSIUS,
TIME_SECONDS,
)
from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv
@ -41,8 +42,8 @@ SENSOR_TYPES = {
"symbol": ["Symbol", None, None],
"precipitation": ["Precipitation", "mm", None],
"temperature": ["Temperature", TEMP_CELSIUS, DEVICE_CLASS_TEMPERATURE],
"windSpeed": ["Wind speed", "m/s", None],
"windGust": ["Wind gust", "m/s", None],
"windSpeed": ["Wind speed", f"m/{TIME_SECONDS}", None],
"windGust": ["Wind gust", f"m/{TIME_SECONDS}", None],
"pressure": ["Pressure", PRESSURE_HPA, DEVICE_CLASS_PRESSURE],
"windDirection": ["Wind direction", "°", None],
"humidity": ["Humidity", "%", DEVICE_CLASS_HUMIDITY],

View file

@ -17,6 +17,7 @@ from homeassistant.const import (
CONF_LONGITUDE,
CONF_MONITORED_CONDITIONS,
CONF_NAME,
TIME_HOURS,
__version__,
)
import homeassistant.helpers.config_validation as cv
@ -39,9 +40,14 @@ SENSOR_TYPES = {
"pressure": ("Pressure", "hPa", "LDstat hPa", float),
"pressure_sealevel": ("Pressure at Sea Level", "hPa", "LDred hPa", float),
"humidity": ("Humidity", "%", "RF %", int),
"wind_speed": ("Wind Speed", "km/h", "WG km/h", float),
"wind_speed": ("Wind Speed", f"km/{TIME_HOURS}", f"WG km/{TIME_HOURS}", float),
"wind_bearing": ("Wind Bearing", "°", "WR °", int),
"wind_max_speed": ("Top Wind Speed", "km/h", "WSG km/h", float),
"wind_max_speed": (
"Top Wind Speed",
f"km/{TIME_HOURS}",
f"WSG km/{TIME_HOURS}",
float,
),
"wind_max_bearing": ("Top Wind Bearing", "°", "WSR °", int),
"sun_last_hour": ("Sun Last Hour", "%", "SO %", int),
"temperature": ("Temperature", "°C", "T °C", float),

View file

@ -3,6 +3,7 @@ import logging
import zigpy.zcl.clusters.smartenergy as smartenergy
from homeassistant.const import TIME_HOURS, TIME_SECONDS
from homeassistant.core import callback
from .. import registries, typing as zha_typing
@ -76,18 +77,18 @@ class Metering(AttributeListeningChannel):
unit_of_measure_map = {
0x00: "kW",
0x01: "m³/h",
0x02: "ft³/h",
0x03: "ccf/h",
0x04: "US gal/h",
0x05: "IMP gal/h",
0x06: "BTU/h",
0x07: "l/h",
0x01: f"m³/{TIME_HOURS}",
0x02: f"ft³/{TIME_HOURS}",
0x03: f"ccf/{TIME_HOURS}",
0x04: f"US gal/{TIME_HOURS}",
0x05: f"IMP gal/{TIME_HOURS}",
0x06: f"BTU/{TIME_HOURS}",
0x07: f"l/{TIME_HOURS}",
0x08: "kPa",
0x09: "kPa",
0x0A: "mcf/h",
0x0A: f"mcf/{TIME_HOURS}",
0x0B: "unitless",
0x0C: "MJ/s",
0x0C: f"MJ/{TIME_SECONDS}",
}
def __init__(

View file

@ -343,6 +343,17 @@ ENERGY_WATT_HOUR = "Wh"
TEMP_CELSIUS = "°C"
TEMP_FAHRENHEIT = "°F"
# Time units
TIME_MICROSECONDS = "μs"
TIME_MILLISECONDS = "ms"
TIME_SECONDS = "s"
TIME_MINUTES = "min"
TIME_HOURS = "h"
TIME_DAYS = "d"
TIME_WEEKS = "w"
TIME_MONTHS = "m"
TIME_YEARS = "y"
# Length units
LENGTH_CENTIMETERS: str = "cm"
LENGTH_METERS: str = "m"
@ -400,17 +411,17 @@ DATA_PEBIBYTES = "PiB"
DATA_EXBIBYTES = "EiB"
DATA_ZEBIBYTES = "ZiB"
DATA_YOBIBYTES = "YiB"
DATA_RATE_BITS_PER_SECOND = f"{DATA_BITS}/s"
DATA_RATE_KILOBITS_PER_SECOND = f"{DATA_KILOBITS}/s"
DATA_RATE_MEGABITS_PER_SECOND = f"{DATA_MEGABITS}/s"
DATA_RATE_GIGABITS_PER_SECOND = f"{DATA_GIGABITS}/s"
DATA_RATE_BYTES_PER_SECOND = f"{DATA_BYTES}/s"
DATA_RATE_KILOBYTES_PER_SECOND = f"{DATA_KILOBYTES}/s"
DATA_RATE_MEGABYTES_PER_SECOND = f"{DATA_MEGABYTES}/s"
DATA_RATE_GIGABYTES_PER_SECOND = f"{DATA_GIGABYTES}/s"
DATA_RATE_KIBIBYTES_PER_SECOND = f"{DATA_KIBIBYTES}/s"
DATA_RATE_MEBIBYTES_PER_SECOND = f"{DATA_MEBIBYTES}/s"
DATA_RATE_GIBIBYTES_PER_SECOND = f"{DATA_GIBIBYTES}/s"
DATA_RATE_BITS_PER_SECOND = f"{DATA_BITS}/{TIME_SECONDS}"
DATA_RATE_KILOBITS_PER_SECOND = f"{DATA_KILOBITS}/{TIME_SECONDS}"
DATA_RATE_MEGABITS_PER_SECOND = f"{DATA_MEGABITS}/{TIME_SECONDS}"
DATA_RATE_GIGABITS_PER_SECOND = f"{DATA_GIGABITS}/{TIME_SECONDS}"
DATA_RATE_BYTES_PER_SECOND = f"{DATA_BYTES}/{TIME_SECONDS}"
DATA_RATE_KILOBYTES_PER_SECOND = f"{DATA_KILOBYTES}/{TIME_SECONDS}"
DATA_RATE_MEGABYTES_PER_SECOND = f"{DATA_MEGABYTES}/{TIME_SECONDS}"
DATA_RATE_GIGABYTES_PER_SECOND = f"{DATA_GIGABYTES}/{TIME_SECONDS}"
DATA_RATE_KIBIBYTES_PER_SECOND = f"{DATA_KIBIBYTES}/{TIME_SECONDS}"
DATA_RATE_MEBIBYTES_PER_SECOND = f"{DATA_MEBIBYTES}/{TIME_SECONDS}"
DATA_RATE_GIBIBYTES_PER_SECOND = f"{DATA_GIBIBYTES}/{TIME_SECONDS}"
# #### SERVICES ####
SERVICE_HOMEASSISTANT_STOP = "stop"

View file

@ -2,6 +2,7 @@
from datetime import timedelta
from unittest.mock import patch
from homeassistant.const import TIME_HOURS, TIME_MINUTES, TIME_SECONDS
from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util
@ -79,7 +80,7 @@ async def test_dataSet1(hass):
"""Test derivative sensor state."""
await setup_tests(
hass,
{"unit_time": "s"},
{"unit_time": TIME_SECONDS},
times=[20, 30, 40, 50],
values=[10, 30, 5, 0],
expected_state=-0.5,
@ -89,30 +90,46 @@ async def test_dataSet1(hass):
async def test_dataSet2(hass):
"""Test derivative sensor state."""
await setup_tests(
hass, {"unit_time": "s"}, times=[20, 30], values=[5, 0], expected_state=-0.5
hass,
{"unit_time": TIME_SECONDS},
times=[20, 30],
values=[5, 0],
expected_state=-0.5,
)
async def test_dataSet3(hass):
"""Test derivative sensor state."""
state = await setup_tests(
hass, {"unit_time": "s"}, times=[20, 30], values=[5, 10], expected_state=0.5
hass,
{"unit_time": TIME_SECONDS},
times=[20, 30],
values=[5, 10],
expected_state=0.5,
)
assert state.attributes.get("unit_of_measurement") == "/s"
assert state.attributes.get("unit_of_measurement") == f"/{TIME_SECONDS}"
async def test_dataSet4(hass):
"""Test derivative sensor state."""
await setup_tests(
hass, {"unit_time": "s"}, times=[20, 30], values=[5, 5], expected_state=0
hass,
{"unit_time": TIME_SECONDS},
times=[20, 30],
values=[5, 5],
expected_state=0,
)
async def test_dataSet5(hass):
"""Test derivative sensor state."""
await setup_tests(
hass, {"unit_time": "s"}, times=[20, 30], values=[10, -10], expected_state=-2
hass,
{"unit_time": TIME_SECONDS},
times=[20, 30],
values=[10, -10],
expected_state=-2,
)
@ -137,7 +154,12 @@ async def test_data_moving_average_for_discrete_sensor(hass):
times = list(range(0, 1800 + 30, 30))
config, entity_id = await _setup_sensor(
hass, {"time_window": {"seconds": time_window}, "unit_time": "min", "round": 1}
hass,
{
"time_window": {"seconds": time_window},
"unit_time": TIME_MINUTES,
"round": 1,
},
) # two minute window
for time, value in zip(times, temperature_values):
@ -186,7 +208,7 @@ async def test_prefix(hass):
# Testing a power sensor at 1000 Watts for 1hour = 0kW/h
assert round(float(state.state), config["sensor"]["round"]) == 0.0
assert state.attributes.get("unit_of_measurement") == "kW/h"
assert state.attributes.get("unit_of_measurement") == f"kW/{TIME_HOURS}"
async def test_suffix(hass):
@ -198,7 +220,7 @@ async def test_suffix(hass):
"source": "sensor.bytes_per_second",
"round": 2,
"unit_prefix": "k",
"unit_time": "s",
"unit_time": TIME_SECONDS,
}
}

View file

@ -15,6 +15,7 @@ import pytest
from homeassistant.bootstrap import async_setup_component
from homeassistant.components.dsmr.sensor import DerivativeDSMREntity
from homeassistant.const import TIME_HOURS
from tests.common import assert_setup_component
@ -140,7 +141,7 @@ async def test_derivative():
abs(entity.state - 0.033) < 0.00001
), "state should be hourly usage calculated from first and second update"
assert entity.unit_of_measurement == "m3/h"
assert entity.unit_of_measurement == f"m3/{TIME_HOURS}"
async def test_v4_meter(hass, mock_connection_factory):
@ -240,9 +241,7 @@ async def test_belgian_meter_low(hass, mock_connection_factory):
config = {"platform": "dsmr", "dsmr_version": "5B"}
telegram = {
ELECTRICITY_ACTIVE_TARIFF: CosemObject([{"value": "0002", "unit": ""}]),
}
telegram = {ELECTRICITY_ACTIVE_TARIFF: CosemObject([{"value": "0002", "unit": ""}])}
with assert_setup_component(1):
await async_setup_component(hass, "sensor", {"sensor": config})

View file

@ -8,7 +8,7 @@ from libpurecool.dyson_pure_cool_link import DysonPureCoolLink
from homeassistant.components import dyson as dyson_parent
from homeassistant.components.dyson import sensor as dyson
from homeassistant.const import STATE_OFF, TEMP_CELSIUS, TEMP_FAHRENHEIT
from homeassistant.const import STATE_OFF, TEMP_CELSIUS, TEMP_FAHRENHEIT, TIME_HOURS
from homeassistant.helpers import discovery
from homeassistant.setup import async_setup_component
@ -123,7 +123,7 @@ class DysonTest(unittest.TestCase):
sensor.entity_id = "sensor.dyson_1"
assert not sensor.should_poll
assert sensor.state is None
assert sensor.unit_of_measurement == "hours"
assert sensor.unit_of_measurement == TIME_HOURS
assert sensor.name == "Device_name Filter Life"
assert sensor.entity_id == "sensor.dyson_1"
sensor.on_message("message")
@ -135,7 +135,7 @@ class DysonTest(unittest.TestCase):
sensor.entity_id = "sensor.dyson_1"
assert not sensor.should_poll
assert sensor.state == 100
assert sensor.unit_of_measurement == "hours"
assert sensor.unit_of_measurement == TIME_HOURS
assert sensor.name == "Device_name Filter Life"
assert sensor.entity_id == "sensor.dyson_1"
sensor.on_message("message")

View file

@ -28,6 +28,7 @@ from homeassistant.components.here_travel_time.sensor import (
ROUTE_MODE_FASTEST,
ROUTE_MODE_SHORTEST,
SCAN_INTERVAL,
TIME_MINUTES,
TRAFFIC_MODE_DISABLED,
TRAFFIC_MODE_ENABLED,
TRAVEL_MODE_BICYCLE,
@ -36,7 +37,6 @@ from homeassistant.components.here_travel_time.sensor import (
TRAVEL_MODE_PUBLIC,
TRAVEL_MODE_PUBLIC_TIME_TABLE,
TRAVEL_MODE_TRUCK,
UNIT_OF_MEASUREMENT,
)
from homeassistant.const import ATTR_ICON, EVENT_HOMEASSISTANT_START
from homeassistant.setup import async_setup_component
@ -83,7 +83,7 @@ def _build_mock_url(origin, destination, modes, api_key, departure):
def _assert_truck_sensor(sensor):
"""Assert that states and attributes are correct for truck_response."""
assert sensor.state == "14"
assert sensor.attributes.get("unit_of_measurement") == UNIT_OF_MEASUREMENT
assert sensor.attributes.get("unit_of_measurement") == TIME_MINUTES
assert sensor.attributes.get(ATTR_ATTRIBUTION) is None
assert sensor.attributes.get(ATTR_DURATION) == 13.533333333333333
@ -177,7 +177,7 @@ async def test_car(hass, requests_mock_car_disabled_response):
sensor = hass.states.get("sensor.test")
assert sensor.state == "30"
assert sensor.attributes.get("unit_of_measurement") == UNIT_OF_MEASUREMENT
assert sensor.attributes.get("unit_of_measurement") == TIME_MINUTES
assert sensor.attributes.get(ATTR_ATTRIBUTION) is None
assert sensor.attributes.get(ATTR_DURATION) == 30.05
assert sensor.attributes.get(ATTR_DISTANCE) == 23.903
@ -381,7 +381,7 @@ async def test_public_transport(hass, requests_mock_credentials_check):
sensor = hass.states.get("sensor.test")
assert sensor.state == "89"
assert sensor.attributes.get("unit_of_measurement") == UNIT_OF_MEASUREMENT
assert sensor.attributes.get("unit_of_measurement") == TIME_MINUTES
assert sensor.attributes.get(ATTR_ATTRIBUTION) is None
assert sensor.attributes.get(ATTR_DURATION) == 89.16666666666667
@ -431,7 +431,7 @@ async def test_public_transport_time_table(hass, requests_mock_credentials_check
sensor = hass.states.get("sensor.test")
assert sensor.state == "80"
assert sensor.attributes.get("unit_of_measurement") == UNIT_OF_MEASUREMENT
assert sensor.attributes.get("unit_of_measurement") == TIME_MINUTES
assert sensor.attributes.get(ATTR_ATTRIBUTION) is None
assert sensor.attributes.get(ATTR_DURATION) == 79.73333333333333
@ -481,7 +481,7 @@ async def test_pedestrian(hass, requests_mock_credentials_check):
sensor = hass.states.get("sensor.test")
assert sensor.state == "211"
assert sensor.attributes.get("unit_of_measurement") == UNIT_OF_MEASUREMENT
assert sensor.attributes.get("unit_of_measurement") == TIME_MINUTES
assert sensor.attributes.get(ATTR_ATTRIBUTION) is None
assert sensor.attributes.get(ATTR_DURATION) == 210.51666666666668
@ -532,7 +532,7 @@ async def test_bicycle(hass, requests_mock_credentials_check):
sensor = hass.states.get("sensor.test")
assert sensor.state == "55"
assert sensor.attributes.get("unit_of_measurement") == UNIT_OF_MEASUREMENT
assert sensor.attributes.get("unit_of_measurement") == TIME_MINUTES
assert sensor.attributes.get(ATTR_ATTRIBUTION) is None
assert sensor.attributes.get(ATTR_DURATION) == 54.86666666666667

View file

@ -20,6 +20,7 @@ from homeassistant.components.homematicip_cloud.sensor import (
ATTR_TEMPERATURE_OFFSET,
ATTR_WIND_DIRECTION,
ATTR_WIND_DIRECTION_VARIATION,
TIME_HOURS,
)
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.const import ATTR_UNIT_OF_MEASUREMENT, POWER_WATT, TEMP_CELSIUS
@ -284,7 +285,7 @@ async def test_hmip_windspeed_sensor(hass, default_mock_hap_factory):
)
assert ha_state.state == "2.6"
assert ha_state.attributes[ATTR_UNIT_OF_MEASUREMENT] == "km/h"
assert ha_state.attributes[ATTR_UNIT_OF_MEASUREMENT] == f"km/{TIME_HOURS}"
await async_manipulate_test_data(hass, hmip_device, "windSpeed", 9.4)
ha_state = hass.states.get(entity_id)
assert ha_state.state == "9.4"

View file

@ -2,6 +2,7 @@
from datetime import timedelta
from unittest.mock import patch
from homeassistant.const import TIME_SECONDS
from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util
@ -181,7 +182,7 @@ async def test_suffix(hass):
"source": "sensor.bytes_per_second",
"round": 2,
"unit_prefix": "k",
"unit_time": "s",
"unit_time": TIME_SECONDS,
}
}

View file

@ -3,6 +3,7 @@ from datetime import datetime
from unittest.mock import patch
from homeassistant.bootstrap import async_setup_component
from homeassistant.const import TIME_SECONDS
import homeassistant.util.dt as dt_util
from tests.common import assert_setup_component, load_fixture
@ -70,7 +71,7 @@ async def test_custom_setup(hass, aioclient_mock):
assert state.state == "0.0"
state = hass.states.get("sensor.yr_wind_speed")
assert state.attributes.get("unit_of_measurement") == "m/s"
assert state.attributes.get("unit_of_measurement") == f"m/{TIME_SECONDS}"
assert state.state == "3.5"
@ -116,5 +117,5 @@ async def test_forecast_setup(hass, aioclient_mock):
assert state.state == "0.0"
state = hass.states.get("sensor.yr_wind_speed")
assert state.attributes.get("unit_of_measurement") == "m/s"
assert state.attributes.get("unit_of_measurement") == f"m/{TIME_SECONDS}"
assert state.state == "3.6"