mirror of https://github.com/home-assistant/core
710 lines
25 KiB
Python
710 lines
25 KiB
Python
"""Support for Ambient Weather Station sensors."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import UTC, datetime
|
|
|
|
from homeassistant.components.sensor import (
|
|
SensorDeviceClass,
|
|
SensorEntity,
|
|
SensorEntityDescription,
|
|
SensorStateClass,
|
|
)
|
|
from homeassistant.const import (
|
|
ATTR_NAME,
|
|
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
|
CONCENTRATION_PARTS_PER_MILLION,
|
|
DEGREE,
|
|
LIGHT_LUX,
|
|
PERCENTAGE,
|
|
UnitOfIrradiance,
|
|
UnitOfLength,
|
|
UnitOfPrecipitationDepth,
|
|
UnitOfPressure,
|
|
UnitOfSpeed,
|
|
UnitOfTemperature,
|
|
UnitOfVolumetricFlux,
|
|
)
|
|
from homeassistant.core import HomeAssistant, callback
|
|
from homeassistant.helpers.entity import EntityDescription
|
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
|
|
|
from . import AmbientStation, AmbientStationConfigEntry
|
|
from .const import ATTR_LAST_DATA, TYPE_SOLARRADIATION, TYPE_SOLARRADIATION_LX
|
|
from .entity import AmbientWeatherEntity
|
|
|
|
TYPE_24HOURRAININ = "24hourrainin"
|
|
TYPE_AQI_PM25 = "aqi_pm25"
|
|
TYPE_AQI_PM25_24H = "aqi_pm25_24h"
|
|
TYPE_AQI_PM25_IN = "aqi_pm25_in"
|
|
TYPE_AQI_PM25_IN_24H = "aqi_pm25_in_24h"
|
|
TYPE_BAROMABSIN = "baromabsin"
|
|
TYPE_BAROMRELIN = "baromrelin"
|
|
TYPE_CO2 = "co2"
|
|
TYPE_DAILYRAININ = "dailyrainin"
|
|
TYPE_DEWPOINT = "dewPoint"
|
|
TYPE_EVENTRAININ = "eventrainin"
|
|
TYPE_FEELSLIKE = "feelsLike"
|
|
TYPE_HOURLYRAININ = "hourlyrainin"
|
|
TYPE_HUMIDITY = "humidity"
|
|
TYPE_HUMIDITY1 = "humidity1"
|
|
TYPE_HUMIDITY10 = "humidity10"
|
|
TYPE_HUMIDITY2 = "humidity2"
|
|
TYPE_HUMIDITY3 = "humidity3"
|
|
TYPE_HUMIDITY4 = "humidity4"
|
|
TYPE_HUMIDITY5 = "humidity5"
|
|
TYPE_HUMIDITY6 = "humidity6"
|
|
TYPE_HUMIDITY7 = "humidity7"
|
|
TYPE_HUMIDITY8 = "humidity8"
|
|
TYPE_HUMIDITY9 = "humidity9"
|
|
TYPE_HUMIDITYIN = "humidityin"
|
|
TYPE_LASTRAIN = "lastRain"
|
|
TYPE_LIGHTNING_PER_DAY = "lightning_day"
|
|
TYPE_LIGHTNING_PER_HOUR = "lightning_hour"
|
|
TYPE_LASTLIGHTNING_DISTANCE = "lightning_distance"
|
|
TYPE_LASTLIGHTNING = "lightning_time"
|
|
TYPE_MAXDAILYGUST = "maxdailygust"
|
|
TYPE_MONTHLYRAININ = "monthlyrainin"
|
|
TYPE_PM25 = "pm25"
|
|
TYPE_PM25_24H = "pm25_24h"
|
|
TYPE_PM25_IN = "pm25_in"
|
|
TYPE_PM25_IN_24H = "pm25_in_24h"
|
|
TYPE_SOILHUM1 = "soilhum1"
|
|
TYPE_SOILHUM10 = "soilhum10"
|
|
TYPE_SOILHUM2 = "soilhum2"
|
|
TYPE_SOILHUM3 = "soilhum3"
|
|
TYPE_SOILHUM4 = "soilhum4"
|
|
TYPE_SOILHUM5 = "soilhum5"
|
|
TYPE_SOILHUM6 = "soilhum6"
|
|
TYPE_SOILHUM7 = "soilhum7"
|
|
TYPE_SOILHUM8 = "soilhum8"
|
|
TYPE_SOILHUM9 = "soilhum9"
|
|
TYPE_SOILTEMP1F = "soiltemp1f"
|
|
TYPE_SOILTEMP10F = "soiltemp10f"
|
|
TYPE_SOILTEMP2F = "soiltemp2f"
|
|
TYPE_SOILTEMP3F = "soiltemp3f"
|
|
TYPE_SOILTEMP4F = "soiltemp4f"
|
|
TYPE_SOILTEMP5F = "soiltemp5f"
|
|
TYPE_SOILTEMP6F = "soiltemp6f"
|
|
TYPE_SOILTEMP7F = "soiltemp7f"
|
|
TYPE_SOILTEMP8F = "soiltemp8f"
|
|
TYPE_SOILTEMP9F = "soiltemp9f"
|
|
TYPE_TEMP10F = "temp10f"
|
|
TYPE_TEMP1F = "temp1f"
|
|
TYPE_TEMP2F = "temp2f"
|
|
TYPE_TEMP3F = "temp3f"
|
|
TYPE_TEMP4F = "temp4f"
|
|
TYPE_TEMP5F = "temp5f"
|
|
TYPE_TEMP6F = "temp6f"
|
|
TYPE_TEMP7F = "temp7f"
|
|
TYPE_TEMP8F = "temp8f"
|
|
TYPE_TEMP9F = "temp9f"
|
|
TYPE_TEMPF = "tempf"
|
|
TYPE_TEMPINF = "tempinf"
|
|
TYPE_TOTALRAININ = "totalrainin"
|
|
TYPE_UV = "uv"
|
|
TYPE_WEEKLYRAININ = "weeklyrainin"
|
|
TYPE_WINDDIR = "winddir"
|
|
TYPE_WINDDIR_AVG10M = "winddir_avg10m"
|
|
TYPE_WINDDIR_AVG2M = "winddir_avg2m"
|
|
TYPE_WINDGUSTDIR = "windgustdir"
|
|
TYPE_WINDGUSTMPH = "windgustmph"
|
|
TYPE_WINDSPDMPH_AVG10M = "windspdmph_avg10m"
|
|
TYPE_WINDSPDMPH_AVG2M = "windspdmph_avg2m"
|
|
TYPE_WINDSPEEDMPH = "windspeedmph"
|
|
TYPE_YEARLYRAININ = "yearlyrainin"
|
|
|
|
SENSOR_DESCRIPTIONS = (
|
|
SensorEntityDescription(
|
|
key=TYPE_24HOURRAININ,
|
|
translation_key="24_hour_rain",
|
|
native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
|
|
device_class=SensorDeviceClass.PRECIPITATION,
|
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_AQI_PM25,
|
|
translation_key="pm25_aqi",
|
|
device_class=SensorDeviceClass.AQI,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_AQI_PM25_24H,
|
|
translation_key="pm25_aqi_24h_average",
|
|
device_class=SensorDeviceClass.AQI,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_AQI_PM25_IN,
|
|
translation_key="pm25_indoor_aqi",
|
|
device_class=SensorDeviceClass.AQI,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_AQI_PM25_IN_24H,
|
|
translation_key="pm25_indoor_aqi_24h_average",
|
|
device_class=SensorDeviceClass.AQI,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_BAROMABSIN,
|
|
translation_key="absolute_pressure",
|
|
native_unit_of_measurement=UnitOfPressure.INHG,
|
|
device_class=SensorDeviceClass.PRESSURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_BAROMRELIN,
|
|
translation_key="relative_pressure",
|
|
native_unit_of_measurement=UnitOfPressure.INHG,
|
|
device_class=SensorDeviceClass.PRESSURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_CO2,
|
|
native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
|
|
device_class=SensorDeviceClass.CO2,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_DAILYRAININ,
|
|
translation_key="daily_rain",
|
|
native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
|
|
device_class=SensorDeviceClass.PRECIPITATION,
|
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_DEWPOINT,
|
|
translation_key="dew_point",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_EVENTRAININ,
|
|
translation_key="event_rain",
|
|
native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
|
|
device_class=SensorDeviceClass.PRECIPITATION,
|
|
state_class=SensorStateClass.TOTAL,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_FEELSLIKE,
|
|
translation_key="feels_like",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HOURLYRAININ,
|
|
native_unit_of_measurement=UnitOfVolumetricFlux.INCHES_PER_HOUR,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
device_class=SensorDeviceClass.PRECIPITATION_INTENSITY,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY10,
|
|
translation_key="humidity_10",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY1,
|
|
translation_key="humidity_1",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY2,
|
|
translation_key="humidity_2",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY3,
|
|
translation_key="humidity_3",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY4,
|
|
translation_key="humidity_4",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY5,
|
|
translation_key="humidity_5",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY6,
|
|
translation_key="humidity_6",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY7,
|
|
translation_key="humidity_7",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY8,
|
|
translation_key="humidity_8",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY9,
|
|
translation_key="humidity_9",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITY,
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_HUMIDITYIN,
|
|
translation_key="humidity_indoor",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_LASTRAIN,
|
|
translation_key="last_rain",
|
|
device_class=SensorDeviceClass.TIMESTAMP,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_LIGHTNING_PER_DAY,
|
|
translation_key="lightning_strikes_per_day",
|
|
native_unit_of_measurement="strikes",
|
|
state_class=SensorStateClass.TOTAL,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_LIGHTNING_PER_HOUR,
|
|
translation_key="lightning_strikes_per_hour",
|
|
native_unit_of_measurement="strikes",
|
|
state_class=SensorStateClass.TOTAL,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_LASTLIGHTNING,
|
|
translation_key="last_lightning_strike",
|
|
device_class=SensorDeviceClass.TIMESTAMP,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_LASTLIGHTNING_DISTANCE,
|
|
translation_key="last_lightning_strike_distance",
|
|
native_unit_of_measurement=UnitOfLength.MILES,
|
|
device_class=SensorDeviceClass.DISTANCE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_MAXDAILYGUST,
|
|
translation_key="max_gust",
|
|
native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
|
|
device_class=SensorDeviceClass.WIND_SPEED,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_MONTHLYRAININ,
|
|
translation_key="monthly_rain",
|
|
native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
|
|
device_class=SensorDeviceClass.PRECIPITATION,
|
|
state_class=SensorStateClass.TOTAL,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_PM25_24H,
|
|
translation_key="pm25_24h_average",
|
|
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
|
device_class=SensorDeviceClass.PM25,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_PM25_IN,
|
|
translation_key="pm25_indoor",
|
|
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
|
device_class=SensorDeviceClass.PM25,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_PM25_IN_24H,
|
|
translation_key="pm25_indoor_24h_average",
|
|
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
|
device_class=SensorDeviceClass.PM25,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_PM25,
|
|
native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
|
|
device_class=SensorDeviceClass.PM25,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM10,
|
|
translation_key="soil_humidity_10",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM1,
|
|
translation_key="soil_humidity_1",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM2,
|
|
translation_key="soil_humidity_2",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM3,
|
|
translation_key="soil_humidity_3",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM4,
|
|
translation_key="soil_humidity_4",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM5,
|
|
translation_key="soil_humidity_5",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM6,
|
|
translation_key="soil_humidity_6",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM7,
|
|
translation_key="soil_humidity_7",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM8,
|
|
translation_key="soil_humidity_8",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILHUM9,
|
|
translation_key="soil_humidity_9",
|
|
native_unit_of_measurement=PERCENTAGE,
|
|
device_class=SensorDeviceClass.HUMIDITY,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP10F,
|
|
translation_key="soil_temperature_10",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP1F,
|
|
translation_key="soil_temperature_1",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP2F,
|
|
translation_key="soil_temperature_2",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP3F,
|
|
translation_key="soil_temperature_3",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP4F,
|
|
translation_key="soil_temperature_4",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP5F,
|
|
translation_key="soil_temperature_5",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP6F,
|
|
translation_key="soil_temperature_6",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP7F,
|
|
translation_key="soil_temperature_7",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP8F,
|
|
translation_key="soil_temperature_8",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOILTEMP9F,
|
|
translation_key="soil_temperature_9",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOLARRADIATION,
|
|
native_unit_of_measurement=UnitOfIrradiance.WATTS_PER_SQUARE_METER,
|
|
device_class=SensorDeviceClass.IRRADIANCE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_SOLARRADIATION_LX,
|
|
native_unit_of_measurement=LIGHT_LUX,
|
|
device_class=SensorDeviceClass.ILLUMINANCE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP10F,
|
|
translation_key="temperature_10",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP1F,
|
|
translation_key="temperature_1",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP2F,
|
|
translation_key="temperature_2",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP3F,
|
|
translation_key="temperature_3",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP4F,
|
|
translation_key="temperature_4",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP5F,
|
|
translation_key="temperature_5",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP6F,
|
|
translation_key="temperature_6",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP7F,
|
|
translation_key="temperature_7",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP8F,
|
|
translation_key="temperature_8",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMP9F,
|
|
translation_key="temperature_9",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMPF,
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TEMPINF,
|
|
translation_key="inside_temperature",
|
|
native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
|
|
device_class=SensorDeviceClass.TEMPERATURE,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_TOTALRAININ,
|
|
translation_key="lifetime_rain",
|
|
native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
|
|
device_class=SensorDeviceClass.PRECIPITATION,
|
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_UV,
|
|
translation_key="uv_index",
|
|
native_unit_of_measurement="Index",
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WEEKLYRAININ,
|
|
translation_key="weekly_rain",
|
|
native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
|
|
device_class=SensorDeviceClass.PRECIPITATION,
|
|
state_class=SensorStateClass.TOTAL,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WINDDIR,
|
|
translation_key="wind_direction",
|
|
native_unit_of_measurement=DEGREE,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WINDDIR_AVG10M,
|
|
translation_key="wind_direction_average_10m",
|
|
native_unit_of_measurement=DEGREE,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WINDDIR_AVG2M,
|
|
translation_key="wind_direction_average_2m",
|
|
native_unit_of_measurement=DEGREE,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WINDGUSTDIR,
|
|
translation_key="wind_gust_direction",
|
|
native_unit_of_measurement=DEGREE,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WINDGUSTMPH,
|
|
translation_key="wind_gust",
|
|
native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
|
|
device_class=SensorDeviceClass.WIND_SPEED,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WINDSPDMPH_AVG10M,
|
|
translation_key="wind_average_10m",
|
|
native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
|
|
device_class=SensorDeviceClass.WIND_SPEED,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WINDSPDMPH_AVG2M,
|
|
translation_key="wind_average_2m",
|
|
native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
|
|
device_class=SensorDeviceClass.WIND_SPEED,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_WINDSPEEDMPH,
|
|
native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
|
|
device_class=SensorDeviceClass.WIND_SPEED,
|
|
state_class=SensorStateClass.MEASUREMENT,
|
|
),
|
|
SensorEntityDescription(
|
|
key=TYPE_YEARLYRAININ,
|
|
translation_key="yearly_rain",
|
|
native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
|
|
device_class=SensorDeviceClass.PRECIPITATION,
|
|
state_class=SensorStateClass.TOTAL_INCREASING,
|
|
),
|
|
)
|
|
|
|
|
|
async def async_setup_entry(
|
|
hass: HomeAssistant,
|
|
entry: AmbientStationConfigEntry,
|
|
async_add_entities: AddEntitiesCallback,
|
|
) -> None:
|
|
"""Set up Ambient PWS sensors based on a config entry."""
|
|
ambient = entry.runtime_data
|
|
|
|
async_add_entities(
|
|
AmbientWeatherSensor(ambient, mac_address, station[ATTR_NAME], description)
|
|
for mac_address, station in ambient.stations.items()
|
|
for description in SENSOR_DESCRIPTIONS
|
|
if description.key in station[ATTR_LAST_DATA]
|
|
)
|
|
|
|
|
|
class AmbientWeatherSensor(AmbientWeatherEntity, SensorEntity):
|
|
"""Define an Ambient sensor."""
|
|
|
|
def __init__(
|
|
self,
|
|
ambient: AmbientStation,
|
|
mac_address: str,
|
|
station_name: str,
|
|
description: EntityDescription,
|
|
) -> None:
|
|
"""Initialize the sensor."""
|
|
super().__init__(ambient, mac_address, station_name, description)
|
|
|
|
if description.key == TYPE_SOLARRADIATION_LX:
|
|
# Since TYPE_SOLARRADIATION and TYPE_SOLARRADIATION_LX will have the same
|
|
# name in the UI, we influence the entity ID of TYPE_SOLARRADIATION_LX here
|
|
# to differentiate them:
|
|
self.entity_id = f"sensor.{station_name}_solar_rad_lx"
|
|
|
|
@callback
|
|
def update_from_latest_data(self) -> None:
|
|
"""Fetch new state data for the sensor."""
|
|
key = self.entity_description.key
|
|
raw = self._ambient.stations[self._mac_address][ATTR_LAST_DATA][key]
|
|
if key == TYPE_LASTRAIN:
|
|
self._attr_native_value = datetime.strptime(raw, "%Y-%m-%dT%H:%M:%S.%f%z")
|
|
elif key == TYPE_LASTLIGHTNING:
|
|
self._attr_native_value = datetime.fromtimestamp(
|
|
raw / 1000, tz=UTC
|
|
) # Ambient uses millisecond epoch
|
|
else:
|
|
self._attr_native_value = raw
|