예제 #1
0
 def wind_speed(self):
     """Return the wind speed."""
     if self.hass.config.units.is_metric and self._wind_speed:
         return round(
             distance_convert(self._wind_speed, LENGTH_MILES,
                              LENGTH_KILOMETERS), 4)
     return self._wind_speed
예제 #2
0
 def visibility(self):
     """Return the visibility."""
     if self.hass.config.units.is_metric and self._visibility:
         return round(
             distance_convert(self._visibility, LENGTH_MILES,
                              LENGTH_KILOMETERS), 4)
     return self._visibility
예제 #3
0
파일: weather.py 프로젝트: vog31/core
 def visibility(self):
     """Return the visibility."""
     visibility = self._get_cc_value(
         self.coordinator.data[CURRENT], CC_ATTR_VISIBILITY
     )
     if self.hass.config.units.is_metric and visibility:
         return distance_convert(visibility, LENGTH_MILES, LENGTH_KILOMETERS)
     return visibility
예제 #4
0
파일: weather.py 프로젝트: vog31/core
 def wind_speed(self):
     """Return the wind speed."""
     wind_speed = self._get_cc_value(
         self.coordinator.data[CURRENT], CC_ATTR_WIND_SPEED
     )
     if self.hass.config.units.is_metric and wind_speed:
         return distance_convert(wind_speed, LENGTH_MILES, LENGTH_KILOMETERS)
     return wind_speed
예제 #5
0
    def _forecast_dict(
        self,
        forecast_dt: datetime,
        use_datetime: bool,
        condition: str,
        precipitation: float | None,
        precipitation_probability: float | None,
        temp: float | None,
        temp_low: float | None,
        wind_direction: float | None,
        wind_speed: float | None,
    ) -> dict[str, Any]:
        """Return formatted Forecast dict from ClimaCell forecast data."""
        if use_datetime:
            translated_condition = self._translate_condition(
                condition, is_up(self.hass, forecast_dt)
            )
        else:
            translated_condition = self._translate_condition(condition, True)

        if self.hass.config.units.is_metric:
            if precipitation:
                precipitation = round(
                    distance_convert(precipitation / 12, LENGTH_FEET, LENGTH_METERS)
                    * 1000,
                    4,
                )
            if wind_speed:
                wind_speed = round(
                    distance_convert(wind_speed, LENGTH_MILES, LENGTH_KILOMETERS), 4
                )

        data = {
            ATTR_FORECAST_TIME: forecast_dt.isoformat(),
            ATTR_FORECAST_CONDITION: translated_condition,
            ATTR_FORECAST_PRECIPITATION: precipitation,
            ATTR_FORECAST_PRECIPITATION_PROBABILITY: precipitation_probability,
            ATTR_FORECAST_TEMP: temp,
            ATTR_FORECAST_TEMP_LOW: temp_low,
            ATTR_FORECAST_WIND_BEARING: wind_direction,
            ATTR_FORECAST_WIND_SPEED: wind_speed,
        }

        return {k: v for k, v in data.items() if v is not None}
예제 #6
0
파일: weather.py 프로젝트: vog31/core
def _forecast_dict(
    hass: HomeAssistantType,
    forecast_dt: datetime,
    use_datetime: bool,
    condition: str,
    precipitation: Optional[float],
    precipitation_probability: Optional[float],
    temp: Optional[float],
    temp_low: Optional[float],
    wind_direction: Optional[float],
    wind_speed: Optional[float],
) -> Dict[str, Any]:
    """Return formatted Forecast dict from ClimaCell forecast data."""
    if use_datetime:
        translated_condition = _translate_condition(condition, is_up(hass, forecast_dt))
    else:
        translated_condition = _translate_condition(condition, True)

    if hass.config.units.is_metric:
        if precipitation:
            precipitation = (
                distance_convert(precipitation / 12, LENGTH_FEET, LENGTH_METERS) * 1000
            )
        if temp:
            temp = temp_convert(temp, TEMP_FAHRENHEIT, TEMP_CELSIUS)
        if temp_low:
            temp_low = temp_convert(temp_low, TEMP_FAHRENHEIT, TEMP_CELSIUS)
        if wind_speed:
            wind_speed = distance_convert(wind_speed, LENGTH_MILES, LENGTH_KILOMETERS)

    data = {
        ATTR_FORECAST_TIME: forecast_dt.isoformat(),
        ATTR_FORECAST_CONDITION: translated_condition,
        ATTR_FORECAST_PRECIPITATION: precipitation,
        ATTR_FORECAST_PRECIPITATION_PROBABILITY: precipitation_probability,
        ATTR_FORECAST_TEMP: temp,
        ATTR_FORECAST_TEMP_LOW: temp_low,
        ATTR_FORECAST_WIND_BEARING: wind_direction,
        ATTR_FORECAST_WIND_SPEED: wind_speed,
    }

    return {k: v for k, v in data.items() if v is not None}
예제 #7
0
 def extra_state_attributes(self) -> Mapping[str, Any] | None:
     """Return additional state attributes."""
     wind_gust = self.wind_gust
     if wind_gust and self.hass.config.units.is_metric:
         wind_gust = round(
             distance_convert(self.wind_gust, LENGTH_MILES,
                              LENGTH_KILOMETERS), 4)
     cloud_cover = self.cloud_cover
     return {
         ATTR_CLOUD_COVER: cloud_cover,
         ATTR_WIND_GUST: wind_gust,
         ATTR_PRECIPITATION_TYPE: self.precipitation_type,
     }
예제 #8
0
     CONF_UNIT_SYSTEM_IMPERIAL: IRRADIATION_BTUS_PER_HOUR_SQUARE_FOOT,
     CONF_UNIT_SYSTEM_METRIC: IRRADIATION_WATTS_PER_SQUARE_METER,
     ATTR_METRIC_CONVERSION: 3.15459,
     ATTR_IS_METRIC_CHECK: True,
 },
 {
     ATTR_FIELD:
     CC_ATTR_CLOUD_BASE,
     ATTR_NAME:
     "Cloud Base",
     CONF_UNIT_SYSTEM_IMPERIAL:
     LENGTH_MILES,
     CONF_UNIT_SYSTEM_METRIC:
     LENGTH_KILOMETERS,
     ATTR_METRIC_CONVERSION:
     lambda val: distance_convert(val, LENGTH_MILES, LENGTH_KILOMETERS),
     ATTR_IS_METRIC_CHECK:
     True,
 },
 {
     ATTR_FIELD:
     CC_ATTR_CLOUD_CEILING,
     ATTR_NAME:
     "Cloud Ceiling",
     CONF_UNIT_SYSTEM_IMPERIAL:
     LENGTH_MILES,
     CONF_UNIT_SYSTEM_METRIC:
     LENGTH_KILOMETERS,
     ATTR_METRIC_CONVERSION:
     lambda val: distance_convert(val, LENGTH_MILES, LENGTH_KILOMETERS),
     ATTR_IS_METRIC_CHECK:
예제 #9
0
 # Data comes in as BTUs/(hr * ft^2)
 # https://www.theunitconverter.com/watt-square-meter-to-btu-hour-square-foot-conversion/
 TomorrowioSensorEntityDescription(
     key=TMRW_ATTR_SOLAR_GHI,
     name="Global Horizontal Irradiance",
     unit_imperial=IRRADIATION_BTUS_PER_HOUR_SQUARE_FOOT,
     unit_metric=IRRADIATION_WATTS_PER_SQUARE_METER,
     imperial_conversion=(1 / 3.15459),
 ),
 # Data comes in as miles
 TomorrowioSensorEntityDescription(
     key=TMRW_ATTR_CLOUD_BASE,
     name="Cloud Base",
     unit_imperial=LENGTH_MILES,
     unit_metric=LENGTH_KILOMETERS,
     imperial_conversion=lambda val: distance_convert(
         val, LENGTH_KILOMETERS, LENGTH_MILES),
 ),
 # Data comes in as miles
 TomorrowioSensorEntityDescription(
     key=TMRW_ATTR_CLOUD_CEILING,
     name="Cloud Ceiling",
     unit_imperial=LENGTH_MILES,
     unit_metric=LENGTH_KILOMETERS,
     imperial_conversion=lambda val: distance_convert(
         val, LENGTH_KILOMETERS, LENGTH_MILES),
 ),
 TomorrowioSensorEntityDescription(
     key=TMRW_ATTR_CLOUD_COVER,
     name="Cloud Cover",
     native_unit_of_measurement=PERCENTAGE,
 ),
예제 #10
0
 # https://www.theunitconverter.com/watt-square-meter-to-btu-hour-square-foot-conversion/
 TomorrowioSensorEntityDescription(
     key=TMRW_ATTR_SOLAR_GHI,
     name="Global Horizontal Irradiance",
     unit_imperial=IRRADIATION_BTUS_PER_HOUR_SQUARE_FOOT,
     unit_metric=IRRADIATION_WATTS_PER_SQUARE_METER,
     metric_conversion=3.15459,
 ),
 # Data comes in as miles
 TomorrowioSensorEntityDescription(
     key=TMRW_ATTR_CLOUD_BASE,
     name="Cloud Base",
     unit_imperial=LENGTH_MILES,
     unit_metric=LENGTH_KILOMETERS,
     metric_conversion=lambda val: distance_convert(
         val, LENGTH_MILES, LENGTH_KILOMETERS
     ),
 ),
 # Data comes in as miles
 TomorrowioSensorEntityDescription(
     key=TMRW_ATTR_CLOUD_CEILING,
     name="Cloud Ceiling",
     unit_imperial=LENGTH_MILES,
     unit_metric=LENGTH_KILOMETERS,
     metric_conversion=lambda val: distance_convert(
         val, LENGTH_MILES, LENGTH_KILOMETERS
     ),
 ),
 TomorrowioSensorEntityDescription(
     key=TMRW_ATTR_CLOUD_COVER,
     name="Cloud Cover",