130 lines
3.3 KiB
Python
130 lines
3.3 KiB
Python
|
"""
|
||
|
Weather component that handles meteorological data for your location.
|
||
|
|
||
|
For more details about this component, please refer to the documentation at
|
||
|
https://home-assistant.io/components/weather/
|
||
|
"""
|
||
|
import logging
|
||
|
|
||
|
from homeassistant.helpers.entity_component import EntityComponent
|
||
|
from homeassistant.util.temperature import convert as convert_temperature
|
||
|
from homeassistant.helpers.config_validation import PLATFORM_SCHEMA # noqa
|
||
|
from homeassistant.helpers.entity import Entity
|
||
|
|
||
|
_LOGGER = logging.getLogger(__name__)
|
||
|
|
||
|
DEPENDENCIES = []
|
||
|
DOMAIN = 'weather'
|
||
|
|
||
|
ENTITY_ID_FORMAT = DOMAIN + '.{}'
|
||
|
|
||
|
ATTR_CONDITION_CLASS = 'condition_class'
|
||
|
ATTR_WEATHER_ATTRIBUTION = 'attribution'
|
||
|
ATTR_WEATHER_HUMIDITY = 'humidity'
|
||
|
ATTR_WEATHER_OZONE = 'ozone'
|
||
|
ATTR_WEATHER_PRESSURE = 'pressure'
|
||
|
ATTR_WEATHER_TEMPERATURE = 'temperature'
|
||
|
ATTR_WEATHER_WIND_BEARING = 'wind_bearing'
|
||
|
ATTR_WEATHER_WIND_SPEED = 'wind_speed'
|
||
|
|
||
|
|
||
|
def setup(hass, config):
|
||
|
"""Setup the weather component."""
|
||
|
component = EntityComponent(_LOGGER, DOMAIN, hass)
|
||
|
component.setup(config)
|
||
|
|
||
|
return True
|
||
|
|
||
|
|
||
|
# pylint: disable=no-member, no-self-use, too-many-return-statements
|
||
|
class WeatherEntity(Entity):
|
||
|
"""ABC for a weather data."""
|
||
|
|
||
|
@property
|
||
|
def temperature(self):
|
||
|
"""Return the platform temperature."""
|
||
|
raise NotImplementedError()
|
||
|
|
||
|
@property
|
||
|
def temperature_unit(self):
|
||
|
"""Return the unit of measurement."""
|
||
|
raise NotImplementedError()
|
||
|
|
||
|
@property
|
||
|
def pressure(self):
|
||
|
"""Return the pressure."""
|
||
|
return None
|
||
|
|
||
|
@property
|
||
|
def humidity(self):
|
||
|
"""Return the humidity."""
|
||
|
raise NotImplementedError()
|
||
|
|
||
|
@property
|
||
|
def wind_speed(self):
|
||
|
"""Return the wind speed."""
|
||
|
return None
|
||
|
|
||
|
@property
|
||
|
def wind_bearing(self):
|
||
|
"""Return the wind bearing."""
|
||
|
return None
|
||
|
|
||
|
@property
|
||
|
def ozone(self):
|
||
|
"""Return the ozone level."""
|
||
|
return None
|
||
|
|
||
|
@property
|
||
|
def attribution(self):
|
||
|
"""Return the attribution."""
|
||
|
return None
|
||
|
|
||
|
@property
|
||
|
def state_attributes(self):
|
||
|
"""Return the state attributes."""
|
||
|
data = {
|
||
|
ATTR_WEATHER_TEMPERATURE:
|
||
|
convert_temperature(
|
||
|
self.temperature, self.temperature_unit,
|
||
|
self.hass.config.units.temperature_unit),
|
||
|
ATTR_WEATHER_HUMIDITY: self.humidity,
|
||
|
}
|
||
|
|
||
|
ozone = self.ozone
|
||
|
if ozone is not None:
|
||
|
data[ATTR_WEATHER_OZONE] = ozone
|
||
|
|
||
|
pressure = self.pressure
|
||
|
if pressure is not None:
|
||
|
data[ATTR_WEATHER_PRESSURE] = pressure
|
||
|
|
||
|
wind_bearing = self.wind_bearing
|
||
|
if wind_bearing is not None:
|
||
|
data[ATTR_WEATHER_WIND_BEARING] = wind_bearing
|
||
|
|
||
|
wind_speed = self.wind_speed
|
||
|
if wind_speed is not None:
|
||
|
data[ATTR_WEATHER_WIND_SPEED] = wind_speed
|
||
|
|
||
|
attribution = self.attribution
|
||
|
if attribution is not None:
|
||
|
data[ATTR_WEATHER_ATTRIBUTION] = attribution
|
||
|
|
||
|
return data
|
||
|
|
||
|
@property
|
||
|
def state(self):
|
||
|
"""Return the current state."""
|
||
|
return self.condition
|
||
|
|
||
|
@property
|
||
|
def condition(self):
|
||
|
"""Return the current condition."""
|
||
|
raise NotImplementedError()
|
||
|
|
||
|
@property
|
||
|
def unit_of_measurement(self):
|
||
|
"""Return the unit of measurement."""
|
||
|
return None
|