Beispiel #1
0
import logging

import voluptuous as vol

# Reuse data and API logic from the sensor implementation
from homeassistant.components.sensor.bom import (
    CONF_STATION, BOMCurrentData, closest_station, validate_station)
from homeassistant.components.weather import PLATFORM_SCHEMA, WeatherEntity
from homeassistant.const import (
    CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, TEMP_CELSIUS)
from homeassistant.helpers import config_validation as cv

_LOGGER = logging.getLogger(__name__)

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_NAME): cv.string,
    vol.Optional(CONF_STATION): validate_station,
})


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the BOM weather platform."""
    station = config.get(CONF_STATION) or closest_station(
        config.get(CONF_LATITUDE),
        config.get(CONF_LONGITUDE),
        hass.config.config_dir)
    if station is None:
        _LOGGER.error("Could not get BOM weather station from lat/lon")
        return False
    bom_data = BOMCurrentData(station)
    try:
        bom_data.update()
    'lightning': [37],
    'lightning-rainy': [3, 4, 38, 39, 47],
    'partlycloudy': [44],
    'pouring': [40, 45],
    'rainy': [9, 11, 12],
    'snowy': [8, 13, 14, 15, 16, 41, 42, 43],
    'snowy-rainy': [5, 6, 7, 10, 46],
    'sunny': [32, 33, 34, 25, 36],
    'windy': [24],
    'windy-variant': [],
    'exceptional': [0, 1, 2],
}


PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_WOEID): cv.string,
    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
})


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the Yahoo! weather platform."""
    from yahooweather import get_woeid, UNIT_C, UNIT_F

    unit = hass.config.units.temperature_unit
    woeid = config.get(CONF_WOEID)
    name = config.get(CONF_NAME)

    yunit = UNIT_C if unit == TEMP_CELSIUS else UNIT_F

    # If not exists a customer WOEID/calculation from Home Assistant
    if woeid is None:
Beispiel #3
0
from .AemetApi import (AemetApi, ATTR_ELEVATION, ATTR_LAST_UPDATE,
                       ATTR_STATION_NAME, ATTR_WEATHER_PRECIPITATION,
                       ATTR_WEATHER_SNOW, ATTR_WEATHER_WIND_SPEED,
                       ATTR_WEATHER_WIND_BEARING, CONF_ATTRIBUTION,
                       CONF_STATION_ID, CONF_NEIGHBORHOOD_ID,
                       ATTR_FORECAST_TEMP, ATTR_FORECAST_COND,
                       ATTR_FORECAST_PREC, ATTR_FORECAST_PREC_PROB,
                       ATTR_FORECAST_WIND_BEARING, ATTR_FORECAST_WIND_SPEED)

DEFAULT_NAME = 'AEMET'

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_NAME, default=DEFAULT_NAME):
    cv.string,
    vol.Required(CONF_API_KEY):
    cv.string,
    vol.Required(CONF_STATION_ID):
    cv.string,
    vol.Required(CONF_NEIGHBORHOOD_ID):
    cv.string
})


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the weather platform."""
    name = config.get(CONF_NAME)
    api_key = config.get(CONF_API_KEY)
    station_id = config.get(CONF_STATION_ID)
    neighborhood_id = config.get(CONF_NEIGHBORHOOD_ID)

    aemetApi = AemetApi(api_key=api_key,
                        station_id=station_id,
    'lightning': [19],
    'lightning-rainy': [20, 23],
    'partlycloudy': [2, 3],
    'pouring': [8, 11],
    'rainy': [6, 7, 9, 10, 12, 13, 14, 15],
    'snowy': [18],
    'snowy-rainy': [],
    'sunny': [1],
    'windy': [],
    'windy-variant': [],
    'exceptional': [],
}

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_NAME): cv.string,
    vol.Optional(CONF_LATITUDE): cv.latitude,
    vol.Optional(CONF_LONGITUDE): cv.longitude,
})


async def async_setup_platform(
        hass, config, async_add_entities, discovery_info=None):
    """Set up the ipma platform.

    Deprecated.
    """
    _LOGGER.warning("Loading IPMA via platform config is deprecated")

    latitude = config.get(CONF_LATITUDE, hass.config.latitude)
    longitude = config.get(CONF_LONGITUDE, hass.config.longitude)
import voluptuous as vol

from homeassistant.components.weather import WeatherEntity, PLATFORM_SCHEMA
from homeassistant.const import (
    CONF_NAME, TEMP_CELSIUS, CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE)
from homeassistant.helpers import config_validation as cv
# Reuse data and API logic from the sensor implementation
from homeassistant.components.sensor.metoffice import \
    MetOfficeCurrentData, CONF_ATTRIBUTION, CONDITION_CLASSES

_LOGGER = logging.getLogger(__name__)

REQUIREMENTS = ['datapoint==0.4.3']

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_NAME): cv.string,
    vol.Required(CONF_API_KEY): cv.string,
})


def setup_platform(hass, config, add_devices, discovery_info=None):
    """Set up the Met Office weather platform."""
    import datapoint as dp
    datapoint = dp.connection(api_key=config.get(CONF_API_KEY))

    latitude = config.get(CONF_LATITUDE, hass.config.latitude)
    longitude = config.get(CONF_LONGITUDE, hass.config.longitude)

    if None in (latitude, longitude):
        _LOGGER.error("Latitude or longitude not set in Home Assistant config")
        return False
Beispiel #6
0
from .aemet import AemetData
from .const import *

_LOGGER = logging.getLogger(__name__)

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_API_KEY):
    cv.string,
    vol.Optional(CONF_LATITUDE):
    cv.latitude,
    vol.Optional(CONF_LONGITUDE):
    cv.longitude,
    vol.Optional(CONF_ELEVATION):
    cv.small_float,
    vol.Optional(CONF_MODE, default=DEFAULT_FORECAST_MODE):
    vol.In(FORECAST_MODE),
    vol.Optional(CONF_CACHE_DIR, default=DEFAULT_CACHE_DIR):
    cv.string,
    vol.Optional(CONF_SET_WEATHER_STATION):
    cv.string,
    vol.Optional(CONF_SET_CITY):
    cv.string,
    vol.Optional(CONF_NAME, default=DEFAULT_NAME):
    cv.string,
    vol.Optional(CONF_EXPERIMENTAL, default=False):
    cv.boolean,
})


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the AEMET weather entities."""
    _LOGGER.debug("Setting up plataform %s", DEFAULT_NAME)
    'lightning-rainy': [38, 39],
    'partlycloudy': [44],
    'pouring': [40, 45],
    'rainy': [9, 11, 12],
    'snowy': [8, 13, 14, 15, 16, 41, 42, 43],
    'snowy-rainy': [5, 6, 7, 10, 46, 47],
    'sunny': [32],
    'windy': [24],
    'windy-variant': [],
    'exceptional': [0, 1, 2, 3, 4, 25, 36],
}

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_WOEID, default=None):
    cv.string,
    vol.Optional(CONF_NAME, default=DEFAULT_NAME):
    cv.string,
    vol.Optional(CONF_FORECAST, default=0):
    vol.All(vol.Coerce(int), vol.Range(min=0, max=5)),
})


def setup_platform(hass, config, add_devices, discovery_info=None):
    """Setup the Yahoo! weather platform."""
    from yahooweather import get_woeid, UNIT_C, UNIT_F

    unit = hass.config.units.temperature_unit
    woeid = config.get(CONF_WOEID)
    forecast = config.get(CONF_FORECAST)
    name = config.get(CONF_NAME)

    yunit = UNIT_C if unit == TEMP_CELSIUS else UNIT_F
Beispiel #8
0
    'cloudy': 'cloudy',
    'partly-cloudy-day': 'partlycloudy',
    'partly-cloudy-night': 'partlycloudy',
    'hail': 'hail',
    'thunderstorm': 'lightning',
    'tornado': None,
}

CONF_UNITS = 'units'

DEFAULT_NAME = 'Dark Sky'

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_API_KEY): cv.string,
    vol.Optional(CONF_LATITUDE): cv.latitude,
    vol.Optional(CONF_LONGITUDE): cv.longitude,
    vol.Optional(CONF_MODE, default='hourly'): vol.In(FORECAST_MODE),
    vol.Optional(CONF_UNITS): vol.In(['auto', 'si', 'us', 'ca', 'uk', 'uk2']),
    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
})

MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=3)


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the Dark Sky weather."""
    latitude = config.get(CONF_LATITUDE, hass.config.latitude)
    longitude = config.get(CONF_LONGITUDE, hass.config.longitude)
    name = config.get(CONF_NAME)
    mode = config.get(CONF_MODE)

    units = config.get(CONF_UNITS)
Beispiel #9
0
else:
    _LOGGER = logging.getLogger(__name__)

DEFAULT_NAME = 'gismeteo'
CONF_CITY = 'city'
FORECAST_MODE = ['hourly', 'daily']
URL = "https://services.gismeteo.ru/inform-service/inf_ios/forecast/?city={}&lang=en"
MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=300)
MMHG2HPA = 1.333223684
DIRECTIONS = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW']
ATTR_FORECAST_TEXT_CONDITION = 'text_condition'

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_NAME, default=DEFAULT_NAME):
    cv.string,
    vol.Optional(CONF_MODE, default='hourly'):
    vol.In(FORECAST_MODE),
    vol.Required(CONF_CITY):
    cv.string,
})


def dt_to_utc(dt, offset):
    local_tz = timezone(timedelta(minutes=offset))
    local_dt = datetime.fromisoformat(dt)
    local_dt_with_tz = local_dt.replace(tzinfo=local_tz)
    utc_dt = local_dt_with_tz.astimezone(timezone.utc)
    return utc_dt.isoformat()


def _condition(tod, d):
    if int(d.get('ts')) == 1 and int(d.get('pt')) == 1:
Beispiel #10
0
                                              ATTR_WEATHER_PRESSURE,
                                              ATTR_WEATHER_TEMPERATURE,
                                              ATTR_WEATHER_WIND_BEARING,
                                              ATTR_WEATHER_WIND_SPEED,
                                              PLATFORM_SCHEMA, WeatherEntity)
from homeassistant.const import (CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME,
                                 TEMP_CELSIUS)
from homeassistant.helpers import config_validation as cv

_LOGGER = logging.getLogger(__name__)

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_NAME):
    cv.string,
    vol.Optional(CONF_STATION_ID):
    cv.string,
    vol.Inclusive(CONF_LATITUDE, 'coordinates', 'Latitude and longitude must exist together'):
    cv.latitude,
    vol.Inclusive(CONF_LONGITUDE, 'coordinates', 'Latitude and longitude must exist together'):
    cv.longitude,
})


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the ZAMG weather platform."""
    name = config.get(CONF_NAME)
    latitude = config.get(CONF_LATITUDE, hass.config.latitude)
    longitude = config.get(CONF_LONGITUDE, hass.config.longitude)

    station_id = config.get(CONF_STATION_ID) or closest_station(
        latitude, longitude, hass.config.config_dir)
    if station_id not in zamg_stations(hass.config.config_dir):
Beispiel #11
0
    ATTR_FORECAST_WIND_BEARING,
    ATTR_CONDITION_CLASS,
    ATTR_WEATHER_ATTRIBUTION,
    ATTR_WEATHER_HUMIDITY,
    ATTR_FORECAST_TIME,
    PLATFORM_SCHEMA,
    WeatherEntity,
)
from homeassistant.const import CONF_NAME, TEMP_CELSIUS
from homeassistant.helpers import config_validation as cv
from .sensor import NEACurrentData

_LOGGER = logging.getLogger(__name__)

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
    {vol.Optional(CONF_NAME): cv.string}
)


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the NEA weather platform."""
    _LOGGER.debug("initialising NEA Weather2 %s", config.get(CONF_NAME))

    nea_data = NEACurrentData()
    try:
        nea_data.update()
    except ValueError as err:
        _LOGGER.error("Received error from NEA Current: %s", err)
        return False

    add_entities([NEAWeather(nea_data, config.get(CONF_NAME))], True)
Beispiel #12
0
    # 雪
    'snowy': [400, 401, 402, 403, 405, 406, 407, 408, 409, 410, 499],
    # 雨夹雪
    'snowy-rainy': [404],
    # æ™´
    'sunny': [100],
    # 风
    'windy': [200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 507, 508],
    #
    'windy-variant': [104],
    # 其他
    'exceptional': [999],
}

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_API_KEY): cv.string,
    vol.Optional(CONF_ID): cv.string,
})

MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=30)


def setup_platform(hass, config, add_entities, discovery_info=None):
    api_key = config.get(CONF_API_KEY)
    city_id = config.get(CONF_ID)

    hew = WeatherData(api_key, city_id)
    add_entities([HeWeather(hew)], True)


class HeWeather(WeatherEntity):
Beispiel #13
0
        ("cloudy", ["Mostly cloudy", "Overcast"]),
        ("partlycloudy", ["A few clouds", "Partly cloudy"]),
    ]
)

ERRORS = (aiohttp.ClientError, JSONDecodeError)

FORECAST_MODE = ["daynight", "hourly"]

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
    {
        vol.Optional(CONF_NAME): cv.string,
        vol.Inclusive(
            CONF_LATITUDE, "coordinates", "Latitude and longitude must exist together"
        ): cv.latitude,
        vol.Inclusive(
            CONF_LONGITUDE, "coordinates", "Latitude and longitude must exist together"
        ): cv.longitude,
        vol.Optional(CONF_MODE, default="daynight"): vol.In(FORECAST_MODE),
        vol.Optional(CONF_STATION): cv.string,
        vol.Required(CONF_API_KEY): cv.string,
    }
)


def convert_condition(time, weather):
    """
    Convert NWS codes to HA condition.

    Choose first condition in CONDITION_CLASSES that exists in weather code.
    If no match is found, return first condition from NWS
    """
from homeassistant.helpers.event import (
    async_call_later, async_track_utc_time_change)
import homeassistant.util.dt as dt_util

_LOGGER = logging.getLogger(__name__)

ATTRIBUTION = "Weather forecast from met.no, delivered by the Norwegian " \
              "Meteorological Institute."
DEFAULT_NAME = "Met.no"

URL = 'https://aa015h6buqvih86i1.api.met.no/weatherapi/locationforecast/1.9/'

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
    vol.Inclusive(CONF_LATITUDE, 'coordinates',
                  'Latitude and longitude must exist together'): cv.latitude,
    vol.Inclusive(CONF_LONGITUDE, 'coordinates',
                  'Latitude and longitude must exist together'): cv.longitude,
})


async def async_setup_platform(hass, config, async_add_entities,
                               discovery_info=None):
    """Set up the Met.no weather platform."""
    elevation = config.get(CONF_ELEVATION, hass.config.elevation or 0)
    latitude = config.get(CONF_LATITUDE, hass.config.latitude)
    longitude = config.get(CONF_LONGITUDE, hass.config.longitude)
    name = config.get(CONF_NAME)

    if None in (latitude, longitude):
        _LOGGER.error("Latitude or longitude not set in Home Assistant config")
Beispiel #15
0
    92: "fog",  # "Fog"
}

_LOGGER = logging.getLogger(__name__)

ATTRIBUTION = "Weather Data provided by FMI"

DEFAULT_NAME = "FMI"

FORECAST_OFFSET = [1, 2, 3, 4, 6, 8, 12, 24]  # Based on API test runs

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_LATITUDE):
    cv.latitude,
    vol.Optional(CONF_LONGITUDE):
    cv.longitude,
    vol.Optional(CONF_OFFSET, default=1):
    vol.In(FORECAST_OFFSET),
    vol.Optional(CONF_NAME, default=DEFAULT_NAME):
    cv.string,
})

MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15)


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the FMI weather."""
    latitude = config.get(CONF_LATITUDE, hass.config.latitude)
    longitude = config.get(CONF_LONGITUDE, hass.config.longitude)
    name = config.get(CONF_NAME)
    time_step = config.get(CONF_OFFSET)
Beispiel #16
0
    'lightning-rainy': [200, 201, 202, 230, 231, 232],
    'partlycloudy': [801, 802, 803],
    'pouring': [504, 314, 502, 503, 522],
    'rainy': [300, 301, 302, 310, 311, 312, 313, 500, 501, 520, 521],
    'snowy': [600, 601, 602, 611, 612, 620, 621, 622],
    'snowy-rainy': [511, 615, 616],
    'sunny': [800],
    'windy': [905, 951, 952, 953, 954, 955, 956, 957],
    'windy-variant': [958, 959, 960, 961],
    'exceptional': [711, 721, 731, 751, 761, 762, 771, 900, 901, 962, 903,
                    904],
}

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_API_KEY): cv.string,
    vol.Optional(CONF_LATITUDE): cv.latitude,
    vol.Optional(CONF_LONGITUDE): cv.longitude,
    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
})


def setup_platform(hass, config, add_devices, discovery_info=None):
    """Set up the OpenWeatherMap weather platform."""
    import pyowm

    longitude = config.get(CONF_LONGITUDE, round(hass.config.longitude, 5))
    latitude = config.get(CONF_LATITUDE, round(hass.config.latitude, 5))
    name = config.get(CONF_NAME)

    try:
        owm = pyowm.OWM(config.get(CONF_API_KEY))
    except pyowm.exceptions.api_call_error.APICallError:
Beispiel #17
0
DEFAULT_NAME = "AEMET"
_LOGGER = logging.getLogger(__name__)

FORECAST_MODE = ["hourly", "daily"]

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Required(CONF_API_KEY):
    cv.string,
    vol.Optional(CONF_LATITUDE):
    cv.latitude,
    vol.Optional(CONF_LONGITUDE):
    cv.longitude,
    vol.Optional(CONF_ELEVATION):
    cv.small_float,
    vol.Optional(CONF_MODE, default="daily"):
    vol.In(FORECAST_MODE),
    vol.Optional("cache_dir", default=DEFAULT_CACHE_DIR):
    cv.string,
    vol.Optional("weather_station"):
    cv.string,
    vol.Optional("city"):
    cv.string,
    vol.Optional(CONF_NAME, default=DEFAULT_NAME):
    cv.string,
    vol.Optional("experimental", default=False):
    cv.boolean,
})


def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the AEMET weather entities."""
    _LOGGER.debug("Setting up plataform %s", DEFAULT_NAME)
Beispiel #18
0
    'lightning': ['g'],
    'lightning-rainy': ['s'],
    'partlycloudy': ['b', 'j', 'o', 'r'],
    'pouring': ['l', 'q'],
    'rainy': ['f', 'h', 'k', 'm'],
    'snowy': ['u', 'i', 'v', 't'],
    'snowy-rainy': ['w'],
    'sunny': ['a'],
    'windy': [],
    'windy-variant': [],
    'exceptional': [],
}

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_NAME): cv.string,
    vol.Optional(CONF_LATITUDE): cv.latitude,
    vol.Optional(CONF_LONGITUDE): cv.longitude,
    vol.Optional(CONF_FORECAST, default=True): cv.boolean,
})


async def async_setup_platform(hass, config, async_add_entities,
                               discovery_info=None):
    """Set up the buienradar platform."""
    latitude = config.get(CONF_LATITUDE, hass.config.latitude)
    longitude = config.get(CONF_LONGITUDE, hass.config.longitude)

    if None in (latitude, longitude):
        _LOGGER.error("Latitude or longitude not set in Home Assistant config")
        return False

    coordinates = {CONF_LATITUDE:  float(latitude),
Beispiel #19
0
    'lightning': [37],
    'lightning-rainy': [38, 39],
    'partlycloudy': [44],
    'pouring': [40, 45],
    'rainy': [9, 11, 12],
    'snowy': [8, 13, 14, 15, 16, 41, 42, 43],
    'snowy-rainy': [5, 6, 7, 10, 46, 47],
    'sunny': [32],
    'windy': [24],
    'windy-variant': [],
    'exceptional': [0, 1, 2, 3, 4, 25, 36],
}

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
    vol.Optional(CONF_WOEID, default=None): cv.string,
    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
    vol.Optional(CONF_FORECAST, default=0):
        vol.All(vol.Coerce(int), vol.Range(min=0, max=5)),
})


def setup_platform(hass, config, add_devices, discovery_info=None):
    """Setup the Yahoo! weather platform."""
    from yahooweather import get_woeid, UNIT_C, UNIT_F

    unit = hass.config.units.temperature_unit
    woeid = config.get(CONF_WOEID)
    forecast = config.get(CONF_FORECAST)
    name = config.get(CONF_NAME)

    yunit = UNIT_C if unit == TEMP_CELSIUS else UNIT_F