Black
This commit is contained in:
parent
da05dfe708
commit
4de97abc3a
2676 changed files with 163166 additions and 140084 deletions
|
@ -5,39 +5,41 @@ import logging
|
|||
import pytz
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components.binary_sensor import (
|
||||
PLATFORM_SCHEMA, BinarySensorDevice)
|
||||
from homeassistant.components.binary_sensor import PLATFORM_SCHEMA, BinarySensorDevice
|
||||
from homeassistant.const import (
|
||||
CONF_AFTER, CONF_BEFORE, CONF_NAME, SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET)
|
||||
CONF_AFTER,
|
||||
CONF_BEFORE,
|
||||
CONF_NAME,
|
||||
SUN_EVENT_SUNRISE,
|
||||
SUN_EVENT_SUNSET,
|
||||
)
|
||||
from homeassistant.core import callback
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.event import async_track_point_in_utc_time
|
||||
from homeassistant.helpers.sun import (
|
||||
get_astral_event_date, get_astral_event_next)
|
||||
from homeassistant.helpers.sun import get_astral_event_date, get_astral_event_next
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
ATTR_AFTER = 'after'
|
||||
ATTR_BEFORE = 'before'
|
||||
ATTR_NEXT_UPDATE = 'next_update'
|
||||
ATTR_AFTER = "after"
|
||||
ATTR_BEFORE = "before"
|
||||
ATTR_NEXT_UPDATE = "next_update"
|
||||
|
||||
CONF_AFTER_OFFSET = 'after_offset'
|
||||
CONF_BEFORE_OFFSET = 'before_offset'
|
||||
CONF_AFTER_OFFSET = "after_offset"
|
||||
CONF_BEFORE_OFFSET = "before_offset"
|
||||
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
||||
vol.Required(CONF_AFTER):
|
||||
vol.Any(cv.time, vol.All(vol.Lower, cv.sun_event)),
|
||||
vol.Required(CONF_BEFORE):
|
||||
vol.Any(cv.time, vol.All(vol.Lower, cv.sun_event)),
|
||||
vol.Required(CONF_NAME): cv.string,
|
||||
vol.Optional(CONF_AFTER_OFFSET, default=timedelta(0)): cv.time_period,
|
||||
vol.Optional(CONF_BEFORE_OFFSET, default=timedelta(0)): cv.time_period,
|
||||
})
|
||||
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
||||
{
|
||||
vol.Required(CONF_AFTER): vol.Any(cv.time, vol.All(vol.Lower, cv.sun_event)),
|
||||
vol.Required(CONF_BEFORE): vol.Any(cv.time, vol.All(vol.Lower, cv.sun_event)),
|
||||
vol.Required(CONF_NAME): cv.string,
|
||||
vol.Optional(CONF_AFTER_OFFSET, default=timedelta(0)): cv.time_period,
|
||||
vol.Optional(CONF_BEFORE_OFFSET, default=timedelta(0)): cv.time_period,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
async def async_setup_platform(
|
||||
hass, config, async_add_entities, discovery_info=None):
|
||||
async def async_setup_platform(hass, config, async_add_entities, discovery_info=None):
|
||||
"""Set up the ToD sensors."""
|
||||
if hass.config.time_zone is None:
|
||||
_LOGGER.error("Timezone is not set in Home Assistant configuration")
|
||||
|
@ -111,23 +113,23 @@ class TodSensor(BinarySensorDevice):
|
|||
def device_state_attributes(self):
|
||||
"""Return the state attributes of the sensor."""
|
||||
return {
|
||||
ATTR_AFTER: self.after.astimezone(
|
||||
self.hass.config.time_zone).isoformat(),
|
||||
ATTR_BEFORE: self.before.astimezone(
|
||||
self.hass.config.time_zone).isoformat(),
|
||||
ATTR_AFTER: self.after.astimezone(self.hass.config.time_zone).isoformat(),
|
||||
ATTR_BEFORE: self.before.astimezone(self.hass.config.time_zone).isoformat(),
|
||||
ATTR_NEXT_UPDATE: self.next_update.astimezone(
|
||||
self.hass.config.time_zone).isoformat(),
|
||||
self.hass.config.time_zone
|
||||
).isoformat(),
|
||||
}
|
||||
|
||||
def _naive_time_to_utc_datetime(self, naive_time):
|
||||
"""Convert naive time from config to utc_datetime with current day."""
|
||||
# get the current local date from utc time
|
||||
current_local_date = self.current_datetime.astimezone(
|
||||
self.hass.config.time_zone).date()
|
||||
self.hass.config.time_zone
|
||||
).date()
|
||||
# calcuate utc datetime corecponding to local time
|
||||
utc_datetime = self.hass.config.time_zone.localize(
|
||||
datetime.combine(
|
||||
current_local_date, naive_time)).astimezone(tz=pytz.UTC)
|
||||
datetime.combine(current_local_date, naive_time)
|
||||
).astimezone(tz=pytz.UTC)
|
||||
return utc_datetime
|
||||
|
||||
def _calculate_initial_boudary_time(self):
|
||||
|
@ -137,9 +139,9 @@ class TodSensor(BinarySensorDevice):
|
|||
if is_sun_event(self._after):
|
||||
# Calculate the today's event utc time or
|
||||
# if not available take next
|
||||
after_event_date = \
|
||||
get_astral_event_date(self.hass, self._after, nowutc) or \
|
||||
get_astral_event_next(self.hass, self._after, nowutc)
|
||||
after_event_date = get_astral_event_date(
|
||||
self.hass, self._after, nowutc
|
||||
) or get_astral_event_next(self.hass, self._after, nowutc)
|
||||
else:
|
||||
# Convert local time provided to UTC today
|
||||
# datetime.combine(date, time, tzinfo) is not supported
|
||||
|
@ -153,14 +155,15 @@ class TodSensor(BinarySensorDevice):
|
|||
if is_sun_event(self._before):
|
||||
# Calculate the today's event utc time or if not available take
|
||||
# next
|
||||
before_event_date = \
|
||||
get_astral_event_date(self.hass, self._before, nowutc) or \
|
||||
get_astral_event_next(self.hass, self._before, nowutc)
|
||||
before_event_date = get_astral_event_date(
|
||||
self.hass, self._before, nowutc
|
||||
) or get_astral_event_next(self.hass, self._before, nowutc)
|
||||
# Before is earlier than after
|
||||
if before_event_date < after_event_date:
|
||||
# Take next day for before
|
||||
before_event_date = get_astral_event_next(
|
||||
self.hass, self._before, after_event_date)
|
||||
self.hass, self._before, after_event_date
|
||||
)
|
||||
else:
|
||||
# Convert local time provided to UTC today, see above
|
||||
before_event_date = self._naive_time_to_utc_datetime(self._before)
|
||||
|
@ -179,8 +182,8 @@ class TodSensor(BinarySensorDevice):
|
|||
"""Turn to to the next day."""
|
||||
if is_sun_event(self._after):
|
||||
self._time_after = get_astral_event_next(
|
||||
self.hass, self._after,
|
||||
self._time_after - self._after_offset)
|
||||
self.hass, self._after, self._time_after - self._after_offset
|
||||
)
|
||||
self._time_after += self._after_offset
|
||||
else:
|
||||
# Offset is already there
|
||||
|
@ -188,8 +191,8 @@ class TodSensor(BinarySensorDevice):
|
|||
|
||||
if is_sun_event(self._before):
|
||||
self._time_before = get_astral_event_next(
|
||||
self.hass, self._before,
|
||||
self._time_before - self._before_offset)
|
||||
self.hass, self._before, self._time_before - self._before_offset
|
||||
)
|
||||
self._time_before += self._before_offset
|
||||
else:
|
||||
# Offset is already there
|
||||
|
@ -220,4 +223,5 @@ class TodSensor(BinarySensorDevice):
|
|||
self.async_schedule_update_ha_state()
|
||||
|
||||
async_track_point_in_utc_time(
|
||||
self.hass, self._point_in_time_listener, self.next_update)
|
||||
self.hass, self._point_in_time_listener, self.next_update
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue