1 """Support for Season sensors."""
3 from __future__
import annotations
5 from datetime
import date, datetime
17 from .const
import DOMAIN, TYPE_ASTRONOMICAL
24 STATE_AUTUMN =
"autumn"
25 STATE_SPRING =
"spring"
26 STATE_SUMMER =
"summer"
27 STATE_WINTER =
"winter"
29 HEMISPHERE_SEASON_SWAP = {
30 STATE_WINTER: STATE_SUMMER,
31 STATE_SPRING: STATE_AUTUMN,
32 STATE_AUTUMN: STATE_SPRING,
33 STATE_SUMMER: STATE_WINTER,
40 async_add_entities: AddEntitiesCallback,
42 """Set up the platform from config entry."""
44 if hass.config.latitude < 0:
46 elif hass.config.latitude > 0:
53 current_date: date, hemisphere: str, season_tracking_type: str
55 """Calculate the current season."""
57 if hemisphere ==
"equator":
60 if season_tracking_type == TYPE_ASTRONOMICAL:
61 spring_start = ephem.next_equinox(
str(current_date.year)).
datetime()
62 summer_start = ephem.next_solstice(
str(current_date.year)).
datetime()
63 autumn_start = ephem.next_equinox(spring_start).
datetime()
64 winter_start = ephem.next_solstice(summer_start).
datetime()
66 spring_start =
datetime(2017, 3, 1).replace(year=current_date.year)
67 summer_start = spring_start.replace(month=6)
68 autumn_start = spring_start.replace(month=9)
69 winter_start = spring_start.replace(month=12)
72 if spring_start <= current_date < summer_start:
74 elif summer_start <= current_date < autumn_start:
76 elif autumn_start <= current_date < winter_start:
80 if hemisphere == NORTHERN:
82 return HEMISPHERE_SEASON_SWAP.get(season)
86 """Representation of the current season."""
88 _attr_device_class = SensorDeviceClass.ENUM
89 _attr_has_entity_name =
True
91 _attr_options = [
"spring",
"summer",
"autumn",
"winter"]
92 _attr_translation_key =
"season"
94 def __init__(self, entry: ConfigEntry, hemisphere: str) ->
None:
95 """Initialize the season."""
98 self.
typetype = entry.data[CONF_TYPE]
101 identifiers={(DOMAIN, entry.entry_id)},
102 entry_type=DeviceEntryType.SERVICE,
None __init__(self, ConfigEntry entry, str hemisphere)
str|None get_season(date current_date, str hemisphere, str season_tracking_type)
None async_setup_entry(HomeAssistant hass, ConfigEntry entry, AddEntitiesCallback async_add_entities)
datetime_sys datetime(Any value)