1 """Support for Buienradar.nl weather service."""
5 from buienradar.constants
import (
17 ATTR_CONDITION_CLOUDY,
18 ATTR_CONDITION_EXCEPTIONAL,
21 ATTR_CONDITION_LIGHTNING,
22 ATTR_CONDITION_LIGHTNING_RAINY,
23 ATTR_CONDITION_PARTLYCLOUDY,
24 ATTR_CONDITION_POURING,
27 ATTR_CONDITION_SNOWY_RAINY,
30 ATTR_CONDITION_WINDY_VARIANT,
31 ATTR_FORECAST_CONDITION,
32 ATTR_FORECAST_NATIVE_PRECIPITATION,
33 ATTR_FORECAST_NATIVE_TEMP,
34 ATTR_FORECAST_NATIVE_TEMP_LOW,
35 ATTR_FORECAST_NATIVE_WIND_SPEED,
37 ATTR_FORECAST_WIND_BEARING,
48 UnitOfPrecipitationDepth,
56 from .
import BuienRadarConfigEntry
57 from .const
import DEFAULT_TIMEFRAME
58 from .util
import BrData
60 _LOGGER = logging.getLogger(__name__)
62 CONF_FORECAST =
"forecast"
64 DATA_CONDITION =
"buienradar_condition"
67 ATTR_CONDITION_CLOUDY: (
"c",
"p"),
68 ATTR_CONDITION_FOG: (
"d",
"n"),
69 ATTR_CONDITION_HAIL: (),
70 ATTR_CONDITION_LIGHTNING: (
"g",),
71 ATTR_CONDITION_LIGHTNING_RAINY: (
"s",),
72 ATTR_CONDITION_PARTLYCLOUDY: (
78 ATTR_CONDITION_POURING: (
"l",
"q"),
79 ATTR_CONDITION_RAINY: (
"f",
"h",
"k",
"m"),
80 ATTR_CONDITION_SNOWY: (
"u",
"i",
"v",
"t"),
81 ATTR_CONDITION_SNOWY_RAINY: (
"w",),
82 ATTR_CONDITION_SUNNY: (
"a",),
83 ATTR_CONDITION_WINDY: (),
84 ATTR_CONDITION_WINDY_VARIANT: (),
85 ATTR_CONDITION_EXCEPTIONAL: (),
89 for cond_ha, cond_codes
in CONDITION_CLASSES.items()
90 for cond_code
in cond_codes
96 entry: BuienRadarConfigEntry,
97 async_add_entities: AddEntitiesCallback,
99 """Set up the buienradar platform."""
102 latitude = config.get(CONF_LATITUDE, hass.config.latitude)
103 longitude = config.get(CONF_LONGITUDE, hass.config.longitude)
105 if None in (latitude, longitude):
106 _LOGGER.error(
"Latitude or longitude not set in Home Assistant config")
109 coordinates = {CONF_LATITUDE:
float(latitude), CONF_LONGITUDE:
float(longitude)}
112 _LOGGER.debug(
"Initializing buienradar weather: coordinates %s", coordinates)
113 entities = [
BrWeather(config, coordinates)]
116 data =
BrData(hass, coordinates, DEFAULT_TIMEFRAME, entities)
117 entry.runtime_data[Platform.WEATHER] = data
118 await data.async_update()
124 """Representation of a weather condition."""
126 _attr_native_precipitation_unit = UnitOfPrecipitationDepth.MILLIMETERS
127 _attr_native_pressure_unit = UnitOfPressure.HPA
128 _attr_native_temperature_unit = UnitOfTemperature.CELSIUS
129 _attr_native_visibility_unit = UnitOfLength.METERS
130 _attr_native_wind_speed_unit = UnitOfSpeed.METERS_PER_SECOND
131 _attr_should_poll =
False
132 _attr_supported_features = WeatherEntityFeature.FORECAST_DAILY
135 """Initialize the platform with a data instance and station name."""
140 f
"{coordinates[CONF_LATITUDE]:2.6f}{coordinates[CONF_LONGITUDE]:2.6f}"
142 self.
_forecast_forecast: list |
None =
None
152 self.
_stationname_stationname
or f
"BR {data.stationname or '(unknown station)'}"
160 if not self.
hasshass:
163 assert self.
platformplatform.config_entry
164 self.
platformplatform.config_entry.async_create_task(
169 """Return the current condition."""
170 if data.condition
and (ccode := data.condition.get(CONDCODE)):
171 return CONDITION_MAP.get(ccode)
175 """Return the forecast array."""
178 if not data.forecast:
181 for data_in
in data.forecast:
184 condcode = data_in.get(CONDITION, {}).
get(CONDCODE)
186 ATTR_FORECAST_TIME: data_in.get(DATETIME).isoformat(),
187 ATTR_FORECAST_CONDITION: CONDITION_MAP.get(condcode),
188 ATTR_FORECAST_NATIVE_TEMP_LOW: data_in.get(MIN_TEMP),
189 ATTR_FORECAST_NATIVE_TEMP: data_in.get(MAX_TEMP),
190 ATTR_FORECAST_NATIVE_PRECIPITATION: data_in.get(RAIN),
191 ATTR_FORECAST_WIND_BEARING: data_in.get(WINDAZIMUTH),
192 ATTR_FORECAST_NATIVE_WIND_SPEED: data_in.get(WINDSPEED),
195 fcdata_out.append(data_out)
200 """Return the daily forecast in native units."""
None __init__(self, config, coordinates)
list[Forecast]|None async_forecast_daily(self)
None data_updated(self, BrData data)
def _calc_condition(self, BrData data)
def _calc_forecast(self, BrData data)
None async_update_listeners(self, Iterable[Literal["daily", "hourly", "twice_daily"]]|None forecast_types)
None async_write_ha_state(self)
None async_setup_entry(HomeAssistant hass, BuienRadarConfigEntry entry, AddEntitiesCallback async_add_entities)
web.Response get(self, web.Request request, str config_key)