1 """Constants for weather."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from enum
import IntFlag
7 from typing
import TYPE_CHECKING, Final
11 UnitOfPrecipitationDepth,
27 from .
import WeatherEntity
31 """Supported features of the update entity."""
35 FORECAST_TWICE_DAILY = 4
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"
56 DOMAIN: Final =
"weather"
57 DATA_COMPONENT: HassKey[EntityComponent[WeatherEntity]] =
HassKey(DOMAIN)
59 INTENT_GET_WEATHER =
"HassGetWeather"
61 VALID_UNITS_PRESSURE: set[str] = {
67 VALID_UNITS_TEMPERATURE: set[str] = {
68 UnitOfTemperature.CELSIUS,
69 UnitOfTemperature.FAHRENHEIT,
71 VALID_UNITS_PRECIPITATION: set[str] = {
72 UnitOfPrecipitationDepth.MILLIMETERS,
73 UnitOfPrecipitationDepth.INCHES,
75 VALID_UNITS_VISIBILITY: set[str] = {
76 UnitOfLength.KILOMETERS,
79 VALID_UNITS_WIND_SPEED: set[str] = {
80 UnitOfSpeed.FEET_PER_SECOND,
81 UnitOfSpeed.KILOMETERS_PER_HOUR,
83 UnitOfSpeed.METERS_PER_SECOND,
84 UnitOfSpeed.MILES_PER_HOUR,
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,
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,