Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Constants for weather."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Callable
6 from enum import IntFlag
7 from typing import TYPE_CHECKING, Final
8 
9 from homeassistant.const import (
10  UnitOfLength,
11  UnitOfPrecipitationDepth,
12  UnitOfPressure,
13  UnitOfSpeed,
14  UnitOfTemperature,
15 )
16 from homeassistant.util.hass_dict import HassKey
18  DistanceConverter,
19  PressureConverter,
20  SpeedConverter,
21  TemperatureConverter,
22 )
23 
24 if TYPE_CHECKING:
25  from homeassistant.helpers.entity_component import EntityComponent
26 
27  from . import WeatherEntity
28 
29 
30 class WeatherEntityFeature(IntFlag):
31  """Supported features of the update entity."""
32 
33  FORECAST_DAILY = 1
34  FORECAST_HOURLY = 2
35  FORECAST_TWICE_DAILY = 4
36 
37 
38 ATTR_WEATHER_HUMIDITY = "humidity"
39 ATTR_WEATHER_OZONE = "ozone"
40 ATTR_WEATHER_DEW_POINT = "dew_point"
41 ATTR_WEATHER_PRESSURE = "pressure"
42 ATTR_WEATHER_PRESSURE_UNIT = "pressure_unit"
43 ATTR_WEATHER_APPARENT_TEMPERATURE = "apparent_temperature"
44 ATTR_WEATHER_TEMPERATURE = "temperature"
45 ATTR_WEATHER_TEMPERATURE_UNIT = "temperature_unit"
46 ATTR_WEATHER_VISIBILITY = "visibility"
47 ATTR_WEATHER_VISIBILITY_UNIT = "visibility_unit"
48 ATTR_WEATHER_WIND_BEARING = "wind_bearing"
49 ATTR_WEATHER_WIND_GUST_SPEED = "wind_gust_speed"
50 ATTR_WEATHER_WIND_SPEED = "wind_speed"
51 ATTR_WEATHER_WIND_SPEED_UNIT = "wind_speed_unit"
52 ATTR_WEATHER_PRECIPITATION_UNIT = "precipitation_unit"
53 ATTR_WEATHER_CLOUD_COVERAGE = "cloud_coverage"
54 ATTR_WEATHER_UV_INDEX = "uv_index"
55 
56 DOMAIN: Final = "weather"
57 DATA_COMPONENT: HassKey[EntityComponent[WeatherEntity]] = HassKey(DOMAIN)
58 
59 INTENT_GET_WEATHER = "HassGetWeather"
60 
61 VALID_UNITS_PRESSURE: set[str] = {
62  UnitOfPressure.HPA,
63  UnitOfPressure.MBAR,
64  UnitOfPressure.INHG,
65  UnitOfPressure.MMHG,
66 }
67 VALID_UNITS_TEMPERATURE: set[str] = {
68  UnitOfTemperature.CELSIUS,
69  UnitOfTemperature.FAHRENHEIT,
70 }
71 VALID_UNITS_PRECIPITATION: set[str] = {
72  UnitOfPrecipitationDepth.MILLIMETERS,
73  UnitOfPrecipitationDepth.INCHES,
74 }
75 VALID_UNITS_VISIBILITY: set[str] = {
76  UnitOfLength.KILOMETERS,
77  UnitOfLength.MILES,
78 }
79 VALID_UNITS_WIND_SPEED: set[str] = {
80  UnitOfSpeed.FEET_PER_SECOND,
81  UnitOfSpeed.KILOMETERS_PER_HOUR,
82  UnitOfSpeed.KNOTS,
83  UnitOfSpeed.METERS_PER_SECOND,
84  UnitOfSpeed.MILES_PER_HOUR,
85 }
86 
87 UNIT_CONVERSIONS: dict[str, Callable[[float, str, str], float]] = {
88  ATTR_WEATHER_PRESSURE_UNIT: PressureConverter.convert,
89  ATTR_WEATHER_TEMPERATURE_UNIT: TemperatureConverter.convert,
90  ATTR_WEATHER_VISIBILITY_UNIT: DistanceConverter.convert,
91  ATTR_WEATHER_PRECIPITATION_UNIT: DistanceConverter.convert,
92  ATTR_WEATHER_WIND_SPEED_UNIT: SpeedConverter.convert,
93 }
94 
95 VALID_UNITS: dict[str, set[str]] = {
96  ATTR_WEATHER_PRESSURE_UNIT: VALID_UNITS_PRESSURE,
97  ATTR_WEATHER_TEMPERATURE_UNIT: VALID_UNITS_TEMPERATURE,
98  ATTR_WEATHER_VISIBILITY_UNIT: VALID_UNITS_VISIBILITY,
99  ATTR_WEATHER_PRECIPITATION_UNIT: VALID_UNITS_PRECIPITATION,
100  ATTR_WEATHER_WIND_SPEED_UNIT: VALID_UNITS_WIND_SPEED,
101 }