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:
parent
8dd80e0e3c
commit
a85808e325
81 changed files with 480 additions and 287 deletions
|
@ -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:
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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, "%"],
|
||||
|
|
|
@ -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"],
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -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"],
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"],
|
||||
],
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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}"
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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": "%",
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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"],
|
||||
|
|
|
@ -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",
|
||||
"%",
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"],
|
||||
|
|
|
@ -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
|
||||
),
|
||||
}
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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": "#",
|
||||
|
|
|
@ -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]:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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", ""],
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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": "m³",
|
||||
"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",
|
||||
|
|
|
@ -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],
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
),
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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],
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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 {}"],
|
||||
|
|
|
@ -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,
|
||||
),
|
||||
}
|
||||
|
||||
|
|
|
@ -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"],
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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],
|
||||
}
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
"%",
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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"],
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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__(
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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})
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Add table
Reference in a new issue