Home Assistant Unofficial Reference 2024.12.1
sensor.py
Go to the documentation of this file.
1 """Support for Ambient Weather Station sensors."""
2 
3 from __future__ import annotations
4 
5 from datetime import UTC, datetime
6 
8  SensorDeviceClass,
9  SensorEntity,
10  SensorEntityDescription,
11  SensorStateClass,
12 )
13 from homeassistant.const import (
14  ATTR_NAME,
15  CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
16  CONCENTRATION_PARTS_PER_MILLION,
17  DEGREE,
18  LIGHT_LUX,
19  PERCENTAGE,
20  UnitOfIrradiance,
21  UnitOfLength,
22  UnitOfPrecipitationDepth,
23  UnitOfPressure,
24  UnitOfSpeed,
25  UnitOfTemperature,
26  UnitOfVolumetricFlux,
27 )
28 from homeassistant.core import HomeAssistant, callback
29 from homeassistant.helpers.entity import EntityDescription
30 from homeassistant.helpers.entity_platform import AddEntitiesCallback
31 
32 from . import AmbientStation, AmbientStationConfigEntry
33 from .const import ATTR_LAST_DATA, TYPE_SOLARRADIATION, TYPE_SOLARRADIATION_LX
34 from .entity import AmbientWeatherEntity
35 
36 TYPE_24HOURRAININ = "24hourrainin"
37 TYPE_AQI_PM25 = "aqi_pm25"
38 TYPE_AQI_PM25_24H = "aqi_pm25_24h"
39 TYPE_AQI_PM25_IN = "aqi_pm25_in"
40 TYPE_AQI_PM25_IN_24H = "aqi_pm25_in_24h"
41 TYPE_BAROMABSIN = "baromabsin"
42 TYPE_BAROMRELIN = "baromrelin"
43 TYPE_CO2 = "co2"
44 TYPE_DAILYRAININ = "dailyrainin"
45 TYPE_DEWPOINT = "dewPoint"
46 TYPE_EVENTRAININ = "eventrainin"
47 TYPE_FEELSLIKE = "feelsLike"
48 TYPE_HOURLYRAININ = "hourlyrainin"
49 TYPE_HUMIDITY = "humidity"
50 TYPE_HUMIDITY1 = "humidity1"
51 TYPE_HUMIDITY10 = "humidity10"
52 TYPE_HUMIDITY2 = "humidity2"
53 TYPE_HUMIDITY3 = "humidity3"
54 TYPE_HUMIDITY4 = "humidity4"
55 TYPE_HUMIDITY5 = "humidity5"
56 TYPE_HUMIDITY6 = "humidity6"
57 TYPE_HUMIDITY7 = "humidity7"
58 TYPE_HUMIDITY8 = "humidity8"
59 TYPE_HUMIDITY9 = "humidity9"
60 TYPE_HUMIDITYIN = "humidityin"
61 TYPE_LASTRAIN = "lastRain"
62 TYPE_LIGHTNING_PER_DAY = "lightning_day"
63 TYPE_LIGHTNING_PER_HOUR = "lightning_hour"
64 TYPE_LASTLIGHTNING_DISTANCE = "lightning_distance"
65 TYPE_LASTLIGHTNING = "lightning_time"
66 TYPE_MAXDAILYGUST = "maxdailygust"
67 TYPE_MONTHLYRAININ = "monthlyrainin"
68 TYPE_PM25 = "pm25"
69 TYPE_PM25_24H = "pm25_24h"
70 TYPE_PM25_IN = "pm25_in"
71 TYPE_PM25_IN_24H = "pm25_in_24h"
72 TYPE_SOILHUM1 = "soilhum1"
73 TYPE_SOILHUM10 = "soilhum10"
74 TYPE_SOILHUM2 = "soilhum2"
75 TYPE_SOILHUM3 = "soilhum3"
76 TYPE_SOILHUM4 = "soilhum4"
77 TYPE_SOILHUM5 = "soilhum5"
78 TYPE_SOILHUM6 = "soilhum6"
79 TYPE_SOILHUM7 = "soilhum7"
80 TYPE_SOILHUM8 = "soilhum8"
81 TYPE_SOILHUM9 = "soilhum9"
82 TYPE_SOILTEMP1F = "soiltemp1f"
83 TYPE_SOILTEMP10F = "soiltemp10f"
84 TYPE_SOILTEMP2F = "soiltemp2f"
85 TYPE_SOILTEMP3F = "soiltemp3f"
86 TYPE_SOILTEMP4F = "soiltemp4f"
87 TYPE_SOILTEMP5F = "soiltemp5f"
88 TYPE_SOILTEMP6F = "soiltemp6f"
89 TYPE_SOILTEMP7F = "soiltemp7f"
90 TYPE_SOILTEMP8F = "soiltemp8f"
91 TYPE_SOILTEMP9F = "soiltemp9f"
92 TYPE_TEMP10F = "temp10f"
93 TYPE_TEMP1F = "temp1f"
94 TYPE_TEMP2F = "temp2f"
95 TYPE_TEMP3F = "temp3f"
96 TYPE_TEMP4F = "temp4f"
97 TYPE_TEMP5F = "temp5f"
98 TYPE_TEMP6F = "temp6f"
99 TYPE_TEMP7F = "temp7f"
100 TYPE_TEMP8F = "temp8f"
101 TYPE_TEMP9F = "temp9f"
102 TYPE_TEMPF = "tempf"
103 TYPE_TEMPINF = "tempinf"
104 TYPE_TOTALRAININ = "totalrainin"
105 TYPE_UV = "uv"
106 TYPE_WEEKLYRAININ = "weeklyrainin"
107 TYPE_WINDDIR = "winddir"
108 TYPE_WINDDIR_AVG10M = "winddir_avg10m"
109 TYPE_WINDDIR_AVG2M = "winddir_avg2m"
110 TYPE_WINDGUSTDIR = "windgustdir"
111 TYPE_WINDGUSTMPH = "windgustmph"
112 TYPE_WINDSPDMPH_AVG10M = "windspdmph_avg10m"
113 TYPE_WINDSPDMPH_AVG2M = "windspdmph_avg2m"
114 TYPE_WINDSPEEDMPH = "windspeedmph"
115 TYPE_YEARLYRAININ = "yearlyrainin"
116 
117 SENSOR_DESCRIPTIONS = (
119  key=TYPE_24HOURRAININ,
120  translation_key="24_hour_rain",
121  native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
122  device_class=SensorDeviceClass.PRECIPITATION,
123  state_class=SensorStateClass.TOTAL_INCREASING,
124  ),
126  key=TYPE_AQI_PM25,
127  translation_key="pm25_aqi",
128  device_class=SensorDeviceClass.AQI,
129  state_class=SensorStateClass.MEASUREMENT,
130  ),
132  key=TYPE_AQI_PM25_24H,
133  translation_key="pm25_aqi_24h_average",
134  device_class=SensorDeviceClass.AQI,
135  ),
137  key=TYPE_AQI_PM25_IN,
138  translation_key="pm25_indoor_aqi",
139  device_class=SensorDeviceClass.AQI,
140  state_class=SensorStateClass.MEASUREMENT,
141  ),
143  key=TYPE_AQI_PM25_IN_24H,
144  translation_key="pm25_indoor_aqi_24h_average",
145  device_class=SensorDeviceClass.AQI,
146  ),
148  key=TYPE_BAROMABSIN,
149  translation_key="absolute_pressure",
150  native_unit_of_measurement=UnitOfPressure.INHG,
151  device_class=SensorDeviceClass.PRESSURE,
152  state_class=SensorStateClass.MEASUREMENT,
153  ),
155  key=TYPE_BAROMRELIN,
156  translation_key="relative_pressure",
157  native_unit_of_measurement=UnitOfPressure.INHG,
158  device_class=SensorDeviceClass.PRESSURE,
159  state_class=SensorStateClass.MEASUREMENT,
160  ),
162  key=TYPE_CO2,
163  native_unit_of_measurement=CONCENTRATION_PARTS_PER_MILLION,
164  device_class=SensorDeviceClass.CO2,
165  state_class=SensorStateClass.MEASUREMENT,
166  ),
168  key=TYPE_DAILYRAININ,
169  translation_key="daily_rain",
170  native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
171  device_class=SensorDeviceClass.PRECIPITATION,
172  state_class=SensorStateClass.TOTAL_INCREASING,
173  ),
175  key=TYPE_DEWPOINT,
176  translation_key="dew_point",
177  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
178  device_class=SensorDeviceClass.TEMPERATURE,
179  state_class=SensorStateClass.MEASUREMENT,
180  ),
182  key=TYPE_EVENTRAININ,
183  translation_key="event_rain",
184  native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
185  device_class=SensorDeviceClass.PRECIPITATION,
186  state_class=SensorStateClass.TOTAL,
187  ),
189  key=TYPE_FEELSLIKE,
190  translation_key="feels_like",
191  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
192  device_class=SensorDeviceClass.TEMPERATURE,
193  state_class=SensorStateClass.MEASUREMENT,
194  ),
196  key=TYPE_HOURLYRAININ,
197  native_unit_of_measurement=UnitOfVolumetricFlux.INCHES_PER_HOUR,
198  state_class=SensorStateClass.MEASUREMENT,
199  device_class=SensorDeviceClass.PRECIPITATION_INTENSITY,
200  ),
202  key=TYPE_HUMIDITY10,
203  translation_key="humidity_10",
204  native_unit_of_measurement=PERCENTAGE,
205  device_class=SensorDeviceClass.HUMIDITY,
206  state_class=SensorStateClass.MEASUREMENT,
207  ),
209  key=TYPE_HUMIDITY1,
210  translation_key="humidity_1",
211  native_unit_of_measurement=PERCENTAGE,
212  device_class=SensorDeviceClass.HUMIDITY,
213  state_class=SensorStateClass.MEASUREMENT,
214  ),
216  key=TYPE_HUMIDITY2,
217  translation_key="humidity_2",
218  native_unit_of_measurement=PERCENTAGE,
219  device_class=SensorDeviceClass.HUMIDITY,
220  state_class=SensorStateClass.MEASUREMENT,
221  ),
223  key=TYPE_HUMIDITY3,
224  translation_key="humidity_3",
225  native_unit_of_measurement=PERCENTAGE,
226  device_class=SensorDeviceClass.HUMIDITY,
227  state_class=SensorStateClass.MEASUREMENT,
228  ),
230  key=TYPE_HUMIDITY4,
231  translation_key="humidity_4",
232  native_unit_of_measurement=PERCENTAGE,
233  device_class=SensorDeviceClass.HUMIDITY,
234  state_class=SensorStateClass.MEASUREMENT,
235  ),
237  key=TYPE_HUMIDITY5,
238  translation_key="humidity_5",
239  native_unit_of_measurement=PERCENTAGE,
240  device_class=SensorDeviceClass.HUMIDITY,
241  state_class=SensorStateClass.MEASUREMENT,
242  ),
244  key=TYPE_HUMIDITY6,
245  translation_key="humidity_6",
246  native_unit_of_measurement=PERCENTAGE,
247  device_class=SensorDeviceClass.HUMIDITY,
248  state_class=SensorStateClass.MEASUREMENT,
249  ),
251  key=TYPE_HUMIDITY7,
252  translation_key="humidity_7",
253  native_unit_of_measurement=PERCENTAGE,
254  device_class=SensorDeviceClass.HUMIDITY,
255  state_class=SensorStateClass.MEASUREMENT,
256  ),
258  key=TYPE_HUMIDITY8,
259  translation_key="humidity_8",
260  native_unit_of_measurement=PERCENTAGE,
261  device_class=SensorDeviceClass.HUMIDITY,
262  state_class=SensorStateClass.MEASUREMENT,
263  ),
265  key=TYPE_HUMIDITY9,
266  translation_key="humidity_9",
267  native_unit_of_measurement=PERCENTAGE,
268  device_class=SensorDeviceClass.HUMIDITY,
269  state_class=SensorStateClass.MEASUREMENT,
270  ),
272  key=TYPE_HUMIDITY,
273  native_unit_of_measurement=PERCENTAGE,
274  device_class=SensorDeviceClass.HUMIDITY,
275  state_class=SensorStateClass.MEASUREMENT,
276  ),
278  key=TYPE_HUMIDITYIN,
279  translation_key="humidity_indoor",
280  native_unit_of_measurement=PERCENTAGE,
281  device_class=SensorDeviceClass.HUMIDITY,
282  state_class=SensorStateClass.MEASUREMENT,
283  ),
285  key=TYPE_LASTRAIN,
286  translation_key="last_rain",
287  device_class=SensorDeviceClass.TIMESTAMP,
288  ),
290  key=TYPE_LIGHTNING_PER_DAY,
291  translation_key="lightning_strikes_per_day",
292  native_unit_of_measurement="strikes",
293  state_class=SensorStateClass.TOTAL,
294  ),
296  key=TYPE_LIGHTNING_PER_HOUR,
297  translation_key="lightning_strikes_per_hour",
298  native_unit_of_measurement="strikes",
299  state_class=SensorStateClass.TOTAL,
300  ),
302  key=TYPE_LASTLIGHTNING,
303  translation_key="last_lightning_strike",
304  device_class=SensorDeviceClass.TIMESTAMP,
305  ),
307  key=TYPE_LASTLIGHTNING_DISTANCE,
308  translation_key="last_lightning_strike_distance",
309  native_unit_of_measurement=UnitOfLength.MILES,
310  device_class=SensorDeviceClass.DISTANCE,
311  state_class=SensorStateClass.MEASUREMENT,
312  ),
314  key=TYPE_MAXDAILYGUST,
315  translation_key="max_gust",
316  native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
317  device_class=SensorDeviceClass.WIND_SPEED,
318  state_class=SensorStateClass.MEASUREMENT,
319  ),
321  key=TYPE_MONTHLYRAININ,
322  translation_key="monthly_rain",
323  native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
324  device_class=SensorDeviceClass.PRECIPITATION,
325  state_class=SensorStateClass.TOTAL,
326  ),
328  key=TYPE_PM25_24H,
329  translation_key="pm25_24h_average",
330  native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
331  device_class=SensorDeviceClass.PM25,
332  ),
334  key=TYPE_PM25_IN,
335  translation_key="pm25_indoor",
336  native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
337  device_class=SensorDeviceClass.PM25,
338  state_class=SensorStateClass.MEASUREMENT,
339  ),
341  key=TYPE_PM25_IN_24H,
342  translation_key="pm25_indoor_24h_average",
343  native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
344  device_class=SensorDeviceClass.PM25,
345  ),
347  key=TYPE_PM25,
348  native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
349  device_class=SensorDeviceClass.PM25,
350  state_class=SensorStateClass.MEASUREMENT,
351  ),
353  key=TYPE_SOILHUM10,
354  translation_key="soil_humidity_10",
355  native_unit_of_measurement=PERCENTAGE,
356  device_class=SensorDeviceClass.HUMIDITY,
357  state_class=SensorStateClass.MEASUREMENT,
358  ),
360  key=TYPE_SOILHUM1,
361  translation_key="soil_humidity_1",
362  native_unit_of_measurement=PERCENTAGE,
363  device_class=SensorDeviceClass.HUMIDITY,
364  state_class=SensorStateClass.MEASUREMENT,
365  ),
367  key=TYPE_SOILHUM2,
368  translation_key="soil_humidity_2",
369  native_unit_of_measurement=PERCENTAGE,
370  device_class=SensorDeviceClass.HUMIDITY,
371  state_class=SensorStateClass.MEASUREMENT,
372  ),
374  key=TYPE_SOILHUM3,
375  translation_key="soil_humidity_3",
376  native_unit_of_measurement=PERCENTAGE,
377  device_class=SensorDeviceClass.HUMIDITY,
378  state_class=SensorStateClass.MEASUREMENT,
379  ),
381  key=TYPE_SOILHUM4,
382  translation_key="soil_humidity_4",
383  native_unit_of_measurement=PERCENTAGE,
384  device_class=SensorDeviceClass.HUMIDITY,
385  state_class=SensorStateClass.MEASUREMENT,
386  ),
388  key=TYPE_SOILHUM5,
389  translation_key="soil_humidity_5",
390  native_unit_of_measurement=PERCENTAGE,
391  device_class=SensorDeviceClass.HUMIDITY,
392  state_class=SensorStateClass.MEASUREMENT,
393  ),
395  key=TYPE_SOILHUM6,
396  translation_key="soil_humidity_6",
397  native_unit_of_measurement=PERCENTAGE,
398  device_class=SensorDeviceClass.HUMIDITY,
399  state_class=SensorStateClass.MEASUREMENT,
400  ),
402  key=TYPE_SOILHUM7,
403  translation_key="soil_humidity_7",
404  native_unit_of_measurement=PERCENTAGE,
405  device_class=SensorDeviceClass.HUMIDITY,
406  state_class=SensorStateClass.MEASUREMENT,
407  ),
409  key=TYPE_SOILHUM8,
410  translation_key="soil_humidity_8",
411  native_unit_of_measurement=PERCENTAGE,
412  device_class=SensorDeviceClass.HUMIDITY,
413  state_class=SensorStateClass.MEASUREMENT,
414  ),
416  key=TYPE_SOILHUM9,
417  translation_key="soil_humidity_9",
418  native_unit_of_measurement=PERCENTAGE,
419  device_class=SensorDeviceClass.HUMIDITY,
420  state_class=SensorStateClass.MEASUREMENT,
421  ),
423  key=TYPE_SOILTEMP10F,
424  translation_key="soil_temperature_10",
425  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
426  device_class=SensorDeviceClass.TEMPERATURE,
427  state_class=SensorStateClass.MEASUREMENT,
428  ),
430  key=TYPE_SOILTEMP1F,
431  translation_key="soil_temperature_1",
432  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
433  device_class=SensorDeviceClass.TEMPERATURE,
434  state_class=SensorStateClass.MEASUREMENT,
435  ),
437  key=TYPE_SOILTEMP2F,
438  translation_key="soil_temperature_2",
439  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
440  device_class=SensorDeviceClass.TEMPERATURE,
441  state_class=SensorStateClass.MEASUREMENT,
442  ),
444  key=TYPE_SOILTEMP3F,
445  translation_key="soil_temperature_3",
446  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
447  device_class=SensorDeviceClass.TEMPERATURE,
448  state_class=SensorStateClass.MEASUREMENT,
449  ),
451  key=TYPE_SOILTEMP4F,
452  translation_key="soil_temperature_4",
453  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
454  device_class=SensorDeviceClass.TEMPERATURE,
455  state_class=SensorStateClass.MEASUREMENT,
456  ),
458  key=TYPE_SOILTEMP5F,
459  translation_key="soil_temperature_5",
460  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
461  device_class=SensorDeviceClass.TEMPERATURE,
462  state_class=SensorStateClass.MEASUREMENT,
463  ),
465  key=TYPE_SOILTEMP6F,
466  translation_key="soil_temperature_6",
467  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
468  device_class=SensorDeviceClass.TEMPERATURE,
469  state_class=SensorStateClass.MEASUREMENT,
470  ),
472  key=TYPE_SOILTEMP7F,
473  translation_key="soil_temperature_7",
474  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
475  device_class=SensorDeviceClass.TEMPERATURE,
476  state_class=SensorStateClass.MEASUREMENT,
477  ),
479  key=TYPE_SOILTEMP8F,
480  translation_key="soil_temperature_8",
481  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
482  device_class=SensorDeviceClass.TEMPERATURE,
483  state_class=SensorStateClass.MEASUREMENT,
484  ),
486  key=TYPE_SOILTEMP9F,
487  translation_key="soil_temperature_9",
488  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
489  device_class=SensorDeviceClass.TEMPERATURE,
490  state_class=SensorStateClass.MEASUREMENT,
491  ),
493  key=TYPE_SOLARRADIATION,
494  native_unit_of_measurement=UnitOfIrradiance.WATTS_PER_SQUARE_METER,
495  device_class=SensorDeviceClass.IRRADIANCE,
496  state_class=SensorStateClass.MEASUREMENT,
497  ),
499  key=TYPE_SOLARRADIATION_LX,
500  native_unit_of_measurement=LIGHT_LUX,
501  device_class=SensorDeviceClass.ILLUMINANCE,
502  state_class=SensorStateClass.MEASUREMENT,
503  ),
505  key=TYPE_TEMP10F,
506  translation_key="temperature_10",
507  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
508  device_class=SensorDeviceClass.TEMPERATURE,
509  state_class=SensorStateClass.MEASUREMENT,
510  ),
512  key=TYPE_TEMP1F,
513  translation_key="temperature_1",
514  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
515  device_class=SensorDeviceClass.TEMPERATURE,
516  state_class=SensorStateClass.MEASUREMENT,
517  ),
519  key=TYPE_TEMP2F,
520  translation_key="temperature_2",
521  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
522  device_class=SensorDeviceClass.TEMPERATURE,
523  state_class=SensorStateClass.MEASUREMENT,
524  ),
526  key=TYPE_TEMP3F,
527  translation_key="temperature_3",
528  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
529  device_class=SensorDeviceClass.TEMPERATURE,
530  state_class=SensorStateClass.MEASUREMENT,
531  ),
533  key=TYPE_TEMP4F,
534  translation_key="temperature_4",
535  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
536  device_class=SensorDeviceClass.TEMPERATURE,
537  state_class=SensorStateClass.MEASUREMENT,
538  ),
540  key=TYPE_TEMP5F,
541  translation_key="temperature_5",
542  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
543  device_class=SensorDeviceClass.TEMPERATURE,
544  state_class=SensorStateClass.MEASUREMENT,
545  ),
547  key=TYPE_TEMP6F,
548  translation_key="temperature_6",
549  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
550  device_class=SensorDeviceClass.TEMPERATURE,
551  state_class=SensorStateClass.MEASUREMENT,
552  ),
554  key=TYPE_TEMP7F,
555  translation_key="temperature_7",
556  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
557  device_class=SensorDeviceClass.TEMPERATURE,
558  state_class=SensorStateClass.MEASUREMENT,
559  ),
561  key=TYPE_TEMP8F,
562  translation_key="temperature_8",
563  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
564  device_class=SensorDeviceClass.TEMPERATURE,
565  state_class=SensorStateClass.MEASUREMENT,
566  ),
568  key=TYPE_TEMP9F,
569  translation_key="temperature_9",
570  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
571  device_class=SensorDeviceClass.TEMPERATURE,
572  state_class=SensorStateClass.MEASUREMENT,
573  ),
575  key=TYPE_TEMPF,
576  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
577  device_class=SensorDeviceClass.TEMPERATURE,
578  state_class=SensorStateClass.MEASUREMENT,
579  ),
581  key=TYPE_TEMPINF,
582  translation_key="inside_temperature",
583  native_unit_of_measurement=UnitOfTemperature.FAHRENHEIT,
584  device_class=SensorDeviceClass.TEMPERATURE,
585  state_class=SensorStateClass.MEASUREMENT,
586  ),
588  key=TYPE_TOTALRAININ,
589  translation_key="lifetime_rain",
590  native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
591  device_class=SensorDeviceClass.PRECIPITATION,
592  state_class=SensorStateClass.TOTAL_INCREASING,
593  ),
595  key=TYPE_UV,
596  translation_key="uv_index",
597  native_unit_of_measurement="Index",
598  state_class=SensorStateClass.MEASUREMENT,
599  ),
601  key=TYPE_WEEKLYRAININ,
602  translation_key="weekly_rain",
603  native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
604  device_class=SensorDeviceClass.PRECIPITATION,
605  state_class=SensorStateClass.TOTAL,
606  ),
608  key=TYPE_WINDDIR,
609  translation_key="wind_direction",
610  native_unit_of_measurement=DEGREE,
611  ),
613  key=TYPE_WINDDIR_AVG10M,
614  translation_key="wind_direction_average_10m",
615  native_unit_of_measurement=DEGREE,
616  ),
618  key=TYPE_WINDDIR_AVG2M,
619  translation_key="wind_direction_average_2m",
620  native_unit_of_measurement=DEGREE,
621  ),
623  key=TYPE_WINDGUSTDIR,
624  translation_key="wind_gust_direction",
625  native_unit_of_measurement=DEGREE,
626  ),
628  key=TYPE_WINDGUSTMPH,
629  translation_key="wind_gust",
630  native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
631  device_class=SensorDeviceClass.WIND_SPEED,
632  state_class=SensorStateClass.MEASUREMENT,
633  ),
635  key=TYPE_WINDSPDMPH_AVG10M,
636  translation_key="wind_average_10m",
637  native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
638  device_class=SensorDeviceClass.WIND_SPEED,
639  ),
641  key=TYPE_WINDSPDMPH_AVG2M,
642  translation_key="wind_average_2m",
643  native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
644  device_class=SensorDeviceClass.WIND_SPEED,
645  ),
647  key=TYPE_WINDSPEEDMPH,
648  native_unit_of_measurement=UnitOfSpeed.MILES_PER_HOUR,
649  device_class=SensorDeviceClass.WIND_SPEED,
650  state_class=SensorStateClass.MEASUREMENT,
651  ),
653  key=TYPE_YEARLYRAININ,
654  translation_key="yearly_rain",
655  native_unit_of_measurement=UnitOfPrecipitationDepth.INCHES,
656  device_class=SensorDeviceClass.PRECIPITATION,
657  state_class=SensorStateClass.TOTAL_INCREASING,
658  ),
659 )
660 
661 
663  hass: HomeAssistant,
664  entry: AmbientStationConfigEntry,
665  async_add_entities: AddEntitiesCallback,
666 ) -> None:
667  """Set up Ambient PWS sensors based on a config entry."""
668  ambient = entry.runtime_data
669 
671  AmbientWeatherSensor(ambient, mac_address, station[ATTR_NAME], description)
672  for mac_address, station in ambient.stations.items()
673  for description in SENSOR_DESCRIPTIONS
674  if description.key in station[ATTR_LAST_DATA]
675  )
676 
677 
679  """Define an Ambient sensor."""
680 
681  def __init__(
682  self,
683  ambient: AmbientStation,
684  mac_address: str,
685  station_name: str,
686  description: EntityDescription,
687  ) -> None:
688  """Initialize the sensor."""
689  super().__init__(ambient, mac_address, station_name, description)
690 
691  if description.key == TYPE_SOLARRADIATION_LX:
692  # Since TYPE_SOLARRADIATION and TYPE_SOLARRADIATION_LX will have the same
693  # name in the UI, we influence the entity ID of TYPE_SOLARRADIATION_LX here
694  # to differentiate them:
695  self.entity_identity_identity_id = f"sensor.{station_name}_solar_rad_lx"
696 
697  @callback
698  def update_from_latest_data(self) -> None:
699  """Fetch new state data for the sensor."""
700  key = self.entity_descriptionentity_description.key
701  raw = self._ambient_ambient.stations[self._mac_address_mac_address][ATTR_LAST_DATA][key]
702  if key == TYPE_LASTRAIN:
703  self._attr_native_value_attr_native_value = datetime.strptime(raw, "%Y-%m-%dT%H:%M:%S.%f%z")
704  elif key == TYPE_LASTLIGHTNING:
705  self._attr_native_value_attr_native_value = datetime.fromtimestamp(
706  raw / 1000, tz=UTC
707  ) # Ambient uses millisecond epoch
708  else:
709  self._attr_native_value_attr_native_value = raw
None __init__(self, AmbientStation ambient, str mac_address, str station_name, EntityDescription description)
Definition: sensor.py:687
None async_setup_entry(HomeAssistant hass, AmbientStationConfigEntry entry, AddEntitiesCallback async_add_entities)
Definition: sensor.py:666