Source code for lories.components.weather.provider

# -*- coding: utf-8 -*-
"""
lories.components.weather.provider
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This module provides the :class:`lories.components.weather.provider.WeatherProvider`, used as
reference to calculate e.g. photovoltaic installations generated power. The provided
environmental data contains temperatures and horizontal solar irradiation, which can be used,
to calculate the effective irradiance on defined, tilted photovoltaic systems.

"""

from __future__ import annotations

from typing import Optional

from lories.components.weather import Weather, WeatherForecast
from lories.typing import Configurations, ContextArgument


# noinspection SpellCheckingInspection
[docs] class WeatherProvider(Weather): __forecast: WeatherForecast # noinspection PyTypeChecker def __init__( self, context: ContextArgument, configs: Optional[Configurations] = None, **kwargs, ) -> None: super().__init__(context=context, configs=configs, **kwargs) forecast_configs = configs.get_member(WeatherForecast.TYPE, ensure_exists=True) forecast_configs.set("key", "forecast", replace=False) self.__forecast = WeatherForecast(self, forecast_configs) def _at_configure(self, configs: Configurations) -> None: super()._at_configure(configs) if self.__forecast.is_enabled(): self.__forecast.configure(configs.get_member(WeatherForecast.TYPE, ensure_exists=True)) def _on_configure(self, configs: Configurations) -> None: super()._on_configure(configs) if self.__forecast.is_enabled() and len(self.__forecast.data) == 0: self.__forecast.configs.enabled = False def activate(self) -> None: super().activate() if self.__forecast.is_enabled(): self.__forecast.activate() def deactivate(self) -> None: super().deactivate() if self.__forecast.is_active(): self.__forecast.deactivate() @property def forecast(self) -> WeatherForecast: return self.__forecast