121 lines
4.6 KiB
Python
121 lines
4.6 KiB
Python
"""Constants for Met Office Integration."""
|
|
|
|
from datetime import timedelta
|
|
|
|
from homeassistant.components.weather import (
|
|
ATTR_CONDITION_CLEAR_NIGHT,
|
|
ATTR_CONDITION_CLOUDY,
|
|
ATTR_CONDITION_EXCEPTIONAL,
|
|
ATTR_CONDITION_FOG,
|
|
ATTR_CONDITION_HAIL,
|
|
ATTR_CONDITION_LIGHTNING,
|
|
ATTR_CONDITION_LIGHTNING_RAINY,
|
|
ATTR_CONDITION_PARTLYCLOUDY,
|
|
ATTR_CONDITION_POURING,
|
|
ATTR_CONDITION_RAINY,
|
|
ATTR_CONDITION_SNOWY,
|
|
ATTR_CONDITION_SNOWY_RAINY,
|
|
ATTR_CONDITION_SUNNY,
|
|
ATTR_CONDITION_WINDY,
|
|
ATTR_CONDITION_WINDY_VARIANT,
|
|
ATTR_FORECAST_CONDITION,
|
|
ATTR_FORECAST_NATIVE_APPARENT_TEMP,
|
|
ATTR_FORECAST_NATIVE_PRESSURE,
|
|
ATTR_FORECAST_NATIVE_TEMP,
|
|
ATTR_FORECAST_NATIVE_TEMP_LOW,
|
|
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED,
|
|
ATTR_FORECAST_NATIVE_WIND_SPEED,
|
|
ATTR_FORECAST_PRECIPITATION,
|
|
ATTR_FORECAST_PRECIPITATION_PROBABILITY,
|
|
ATTR_FORECAST_UV_INDEX,
|
|
ATTR_FORECAST_WIND_BEARING,
|
|
)
|
|
|
|
DOMAIN = "metoffice"
|
|
|
|
DEFAULT_NAME = "Met Office"
|
|
ATTRIBUTION = "Data provided by the Met Office"
|
|
|
|
DEFAULT_SCAN_INTERVAL = timedelta(minutes=15)
|
|
|
|
METOFFICE_COORDINATES = "metoffice_coordinates"
|
|
METOFFICE_HOURLY_COORDINATOR = "metoffice_hourly_coordinator"
|
|
METOFFICE_DAILY_COORDINATOR = "metoffice_daily_coordinator"
|
|
METOFFICE_TWICE_DAILY_COORDINATOR = "metoffice_twice_daily_coordinator"
|
|
METOFFICE_MONITORED_CONDITIONS = "metoffice_monitored_conditions"
|
|
METOFFICE_NAME = "metoffice_name"
|
|
|
|
CONDITION_CLASSES: dict[str, list[int]] = {
|
|
ATTR_CONDITION_CLEAR_NIGHT: [0],
|
|
ATTR_CONDITION_CLOUDY: [7, 8],
|
|
ATTR_CONDITION_FOG: [5, 6],
|
|
ATTR_CONDITION_HAIL: [19, 20, 21],
|
|
ATTR_CONDITION_LIGHTNING: [30],
|
|
ATTR_CONDITION_LIGHTNING_RAINY: [28, 29],
|
|
ATTR_CONDITION_PARTLYCLOUDY: [2, 3],
|
|
ATTR_CONDITION_POURING: [13, 14, 15],
|
|
ATTR_CONDITION_RAINY: [9, 10, 11, 12],
|
|
ATTR_CONDITION_SNOWY: [22, 23, 24, 25, 26, 27],
|
|
ATTR_CONDITION_SNOWY_RAINY: [16, 17, 18],
|
|
ATTR_CONDITION_SUNNY: [1],
|
|
ATTR_CONDITION_WINDY: [],
|
|
ATTR_CONDITION_WINDY_VARIANT: [],
|
|
ATTR_CONDITION_EXCEPTIONAL: [],
|
|
}
|
|
CONDITION_MAP = {
|
|
cond_code: cond_ha
|
|
for cond_ha, cond_codes in CONDITION_CLASSES.items()
|
|
for cond_code in cond_codes
|
|
}
|
|
|
|
HOURLY_FORECAST_ATTRIBUTE_MAP: dict[str, str] = {
|
|
ATTR_FORECAST_CONDITION: "significantWeatherCode",
|
|
ATTR_FORECAST_NATIVE_APPARENT_TEMP: "feelsLikeTemperature",
|
|
ATTR_FORECAST_NATIVE_PRESSURE: "mslp",
|
|
ATTR_FORECAST_NATIVE_TEMP: "screenTemperature",
|
|
ATTR_FORECAST_PRECIPITATION: "totalPrecipAmount",
|
|
ATTR_FORECAST_PRECIPITATION_PROBABILITY: "probOfPrecipitation",
|
|
ATTR_FORECAST_UV_INDEX: "uvIndex",
|
|
ATTR_FORECAST_WIND_BEARING: "windDirectionFrom10m",
|
|
ATTR_FORECAST_NATIVE_WIND_SPEED: "windSpeed10m",
|
|
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED: "windGustSpeed10m",
|
|
}
|
|
|
|
DAILY_FORECAST_ATTRIBUTE_MAP: dict[str, str] = {
|
|
ATTR_FORECAST_CONDITION: "daySignificantWeatherCode",
|
|
ATTR_FORECAST_NATIVE_APPARENT_TEMP: "dayMaxFeelsLikeTemp",
|
|
ATTR_FORECAST_NATIVE_PRESSURE: "middayMslp",
|
|
ATTR_FORECAST_NATIVE_TEMP: "dayMaxScreenTemperature",
|
|
ATTR_FORECAST_NATIVE_TEMP_LOW: "nightMinScreenTemperature",
|
|
ATTR_FORECAST_PRECIPITATION_PROBABILITY: "dayProbabilityOfPrecipitation",
|
|
ATTR_FORECAST_UV_INDEX: "maxUvIndex",
|
|
ATTR_FORECAST_WIND_BEARING: "midday10MWindDirection",
|
|
ATTR_FORECAST_NATIVE_WIND_SPEED: "midday10MWindSpeed",
|
|
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED: "midday10MWindGust",
|
|
}
|
|
|
|
DAY_FORECAST_ATTRIBUTE_MAP: dict[str, str] = {
|
|
ATTR_FORECAST_CONDITION: "daySignificantWeatherCode",
|
|
ATTR_FORECAST_NATIVE_APPARENT_TEMP: "dayMaxFeelsLikeTemp",
|
|
ATTR_FORECAST_NATIVE_PRESSURE: "middayMslp",
|
|
ATTR_FORECAST_NATIVE_TEMP: "dayUpperBoundMaxTemp",
|
|
ATTR_FORECAST_NATIVE_TEMP_LOW: "dayLowerBoundMaxTemp",
|
|
ATTR_FORECAST_PRECIPITATION_PROBABILITY: "dayProbabilityOfPrecipitation",
|
|
ATTR_FORECAST_UV_INDEX: "maxUvIndex",
|
|
ATTR_FORECAST_WIND_BEARING: "midday10MWindDirection",
|
|
ATTR_FORECAST_NATIVE_WIND_SPEED: "midday10MWindSpeed",
|
|
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED: "midday10MWindGust",
|
|
}
|
|
|
|
NIGHT_FORECAST_ATTRIBUTE_MAP: dict[str, str] = {
|
|
ATTR_FORECAST_CONDITION: "nightSignificantWeatherCode",
|
|
ATTR_FORECAST_NATIVE_APPARENT_TEMP: "nightMinFeelsLikeTemp",
|
|
ATTR_FORECAST_NATIVE_PRESSURE: "midnightMslp",
|
|
ATTR_FORECAST_NATIVE_TEMP: "nightUpperBoundMinTemp",
|
|
ATTR_FORECAST_NATIVE_TEMP_LOW: "nightLowerBoundMinTemp",
|
|
ATTR_FORECAST_PRECIPITATION_PROBABILITY: "nightProbabilityOfPrecipitation",
|
|
ATTR_FORECAST_WIND_BEARING: "midnight10MWindDirection",
|
|
ATTR_FORECAST_NATIVE_WIND_SPEED: "midnight10MWindSpeed",
|
|
ATTR_FORECAST_NATIVE_WIND_GUST_SPEED: "midnight10MWindGust",
|
|
}
|