1 """Sensor platform for Sun integration."""
3 from __future__
import annotations
5 from collections.abc
import Callable
6 from dataclasses
import dataclass
7 from datetime
import datetime
10 DOMAIN
as SENSOR_DOMAIN,
13 SensorEntityDescription,
23 from .const
import DOMAIN, SIGNAL_EVENTS_CHANGED, SIGNAL_POSITION_CHANGED
24 from .entity
import Sun, SunConfigEntry
26 ENTITY_ID_SENSOR_FORMAT = SENSOR_DOMAIN +
".sun_{}"
29 @dataclass(kw_only=True, frozen=True)
31 """Describes a Sun sensor entity."""
33 value_fn: Callable[[Sun], StateType | datetime]
37 SENSOR_TYPES: tuple[SunSensorEntityDescription, ...] = (
40 device_class=SensorDeviceClass.TIMESTAMP,
41 translation_key=
"next_dawn",
42 value_fn=
lambda data: data.next_dawn,
43 signal=SIGNAL_EVENTS_CHANGED,
47 device_class=SensorDeviceClass.TIMESTAMP,
48 translation_key=
"next_dusk",
49 value_fn=
lambda data: data.next_dusk,
50 signal=SIGNAL_EVENTS_CHANGED,
54 device_class=SensorDeviceClass.TIMESTAMP,
55 translation_key=
"next_midnight",
56 value_fn=
lambda data: data.next_midnight,
57 signal=SIGNAL_EVENTS_CHANGED,
61 device_class=SensorDeviceClass.TIMESTAMP,
62 translation_key=
"next_noon",
63 value_fn=
lambda data: data.next_noon,
64 signal=SIGNAL_EVENTS_CHANGED,
68 device_class=SensorDeviceClass.TIMESTAMP,
69 translation_key=
"next_rising",
70 value_fn=
lambda data: data.next_rising,
71 signal=SIGNAL_EVENTS_CHANGED,
75 device_class=SensorDeviceClass.TIMESTAMP,
76 translation_key=
"next_setting",
77 value_fn=
lambda data: data.next_setting,
78 signal=SIGNAL_EVENTS_CHANGED,
81 key=
"solar_elevation",
82 translation_key=
"solar_elevation",
83 state_class=SensorStateClass.MEASUREMENT,
84 value_fn=
lambda data: data.solar_elevation,
85 entity_registry_enabled_default=
False,
86 native_unit_of_measurement=DEGREE,
87 signal=SIGNAL_POSITION_CHANGED,
91 translation_key=
"solar_azimuth",
92 state_class=SensorStateClass.MEASUREMENT,
93 value_fn=
lambda data: data.solar_azimuth,
94 entity_registry_enabled_default=
False,
95 native_unit_of_measurement=DEGREE,
96 signal=SIGNAL_POSITION_CHANGED,
100 translation_key=
"solar_rising",
101 value_fn=
lambda data: data.rising,
102 entity_registry_enabled_default=
False,
103 signal=SIGNAL_EVENTS_CHANGED,
109 hass: HomeAssistant, entry: SunConfigEntry, async_add_entities: AddEntitiesCallback
111 """Set up Sun sensor platform."""
113 sun = entry.runtime_data
116 [
SunSensor(sun, description, entry.entry_id)
for description
in SENSOR_TYPES]
121 """Representation of a Sun Sensor."""
123 _attr_has_entity_name =
True
124 _attr_should_poll =
False
125 _attr_entity_category = EntityCategory.DIAGNOSTIC
126 entity_description: SunSensorEntityDescription
129 self, sun: Sun, entity_description: SunSensorEntityDescription, entry_id: str
131 """Initiate Sun Sensor."""
138 identifiers={(DOMAIN, entry_id)},
139 entry_type=DeviceEntryType.SERVICE,
144 """Return value of sensor."""
148 """Register signal listener when added to hass."""
None async_added_to_hass(self)
None __init__(self, Sun sun, SunSensorEntityDescription entity_description, str entry_id)
StateType|datetime native_value(self)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
None async_setup_entry(HomeAssistant hass, SunConfigEntry entry, AddEntitiesCallback async_add_entities)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)