diff --git a/homeassistant/components/device_sun_light_trigger.py b/homeassistant/components/device_sun_light_trigger.py index 40a602056bf..2b047e92c1e 100644 --- a/homeassistant/components/device_sun_light_trigger.py +++ b/homeassistant/components/device_sun_light_trigger.py @@ -15,7 +15,7 @@ from homeassistant.components.light import ( ATTR_PROFILE, ATTR_TRANSITION, DOMAIN as DOMAIN_LIGHT) from homeassistant.const import ( ATTR_ENTITY_ID, SERVICE_TURN_OFF, SERVICE_TURN_ON, STATE_HOME, - STATE_NOT_HOME) + STATE_NOT_HOME, SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET) from homeassistant.helpers.event import ( async_track_point_in_utc_time, async_track_state_change) from homeassistant.helpers.sun import is_up, get_astral_event_next @@ -79,7 +79,7 @@ async def async_setup(hass, config): Async friendly. """ - next_setting = get_astral_event_next(hass, 'sunset') + next_setting = get_astral_event_next(hass, SUN_EVENT_SUNSET) if not next_setting: return None return next_setting - LIGHT_TRANSITION_TIME * len(light_ids) @@ -123,7 +123,8 @@ async def async_setup(hass, config): start_point + index * LIGHT_TRANSITION_TIME) async_track_point_in_utc_time(hass, schedule_light_turn_on, - get_astral_event_next(hass, 'sunrise')) + get_astral_event_next(hass, + SUN_EVENT_SUNRISE)) # If the sun is already above horizon schedule the time-based pre-sun set # event. @@ -153,7 +154,8 @@ async def async_setup(hass, config): # Check this by seeing if current time is later then the point # in time when we would start putting the lights on. elif (start_point and - start_point < now < get_astral_event_next(hass, 'sunset')): + start_point < now < get_astral_event_next(hass, + SUN_EVENT_SUNSET)): # Check for every light if it would be on if someone was home # when the fading in started and turn it on if so diff --git a/homeassistant/components/sensor/jewish_calendar.py b/homeassistant/components/sensor/jewish_calendar.py index 6c867f02fce..2c917ba0f3b 100644 --- a/homeassistant/components/sensor/jewish_calendar.py +++ b/homeassistant/components/sensor/jewish_calendar.py @@ -10,7 +10,8 @@ import logging import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA -from homeassistant.const import CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME +from homeassistant.const import ( + CONF_LATITUDE, CONF_LONGITUDE, CONF_NAME, SUN_EVENT_SUNSET) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity from homeassistant.helpers.sun import get_astral_event_date @@ -114,7 +115,7 @@ class JewishCalSensor(Entity): today = now.date() upcoming_saturday = today + timedelta((12 - today.weekday()) % 7) sunset = dt_util.as_local(get_astral_event_date( - self.hass, 'sunset', today)) + self.hass, SUN_EVENT_SUNSET, today)) _LOGGER.debug("Now: %s Sunset: %s", now, sunset) diff --git a/homeassistant/components/sun.py b/homeassistant/components/sun.py index e2717047b0a..250c6a2ed2f 100644 --- a/homeassistant/components/sun.py +++ b/homeassistant/components/sun.py @@ -7,7 +7,8 @@ https://home-assistant.io/components/sun/ import logging from datetime import timedelta -from homeassistant.const import CONF_ELEVATION +from homeassistant.const import ( + CONF_ELEVATION, SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET) from homeassistant.core import callback from homeassistant.helpers.entity import Entity from homeassistant.helpers.event import ( @@ -109,9 +110,9 @@ class Sun(Entity): self.next_noon = get_astral_event_next( self.hass, 'solar_noon', utc_point_in_time) self.next_rising = get_astral_event_next( - self.hass, 'sunrise', utc_point_in_time) + self.hass, SUN_EVENT_SUNRISE, utc_point_in_time) self.next_setting = get_astral_event_next( - self.hass, 'sunset', utc_point_in_time) + self.hass, SUN_EVENT_SUNSET, utc_point_in_time) @callback def update_sun_position(self, utc_point_in_time): diff --git a/homeassistant/components/switch/flux.py b/homeassistant/components/switch/flux.py index 00388822be1..01c85dce6cf 100644 --- a/homeassistant/components/switch/flux.py +++ b/homeassistant/components/switch/flux.py @@ -18,7 +18,7 @@ from homeassistant.components.light import ( from homeassistant.components.switch import DOMAIN, SwitchDevice from homeassistant.const import ( ATTR_ENTITY_ID, CONF_NAME, CONF_PLATFORM, CONF_LIGHTS, CONF_MODE, - SERVICE_TURN_ON) + SERVICE_TURN_ON, SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET) from homeassistant.helpers.event import track_time_interval from homeassistant.helpers.sun import get_astral_event_date from homeassistant.util import slugify @@ -200,7 +200,7 @@ class FluxSwitch(SwitchDevice): if now is None: now = dt_now() - sunset = get_astral_event_date(self.hass, 'sunset', now.date()) + sunset = get_astral_event_date(self.hass, SUN_EVENT_SUNSET, now.date()) start_time = self.find_start_time(now) stop_time = self.find_stop_time(now) @@ -283,7 +283,8 @@ class FluxSwitch(SwitchDevice): hour=self._start_time.hour, minute=self._start_time.minute, second=0) else: - sunrise = get_astral_event_date(self.hass, 'sunrise', now.date()) + sunrise = get_astral_event_date(self.hass, SUN_EVENT_SUNRISE, + now.date()) return sunrise def find_stop_time(self, now): diff --git a/homeassistant/helpers/condition.py b/homeassistant/helpers/condition.py index 930f68c3da4..86112e2aea2 100644 --- a/homeassistant/helpers/condition.py +++ b/homeassistant/helpers/condition.py @@ -243,8 +243,8 @@ def sun(hass, before=None, after=None, before_offset=None, after_offset=None): before_offset = before_offset or timedelta(0) after_offset = after_offset or timedelta(0) - sunrise = get_astral_event_date(hass, 'sunrise', today) - sunset = get_astral_event_date(hass, 'sunset', today) + sunrise = get_astral_event_date(hass, SUN_EVENT_SUNRISE, today) + sunset = get_astral_event_date(hass, SUN_EVENT_SUNSET, today) if sunrise is None and SUN_EVENT_SUNRISE in (before, after): # There is no sunrise today diff --git a/homeassistant/helpers/config_validation.py b/homeassistant/helpers/config_validation.py index 9ce4b6b166d..5c49a1b50e1 100644 --- a/homeassistant/helpers/config_validation.py +++ b/homeassistant/helpers/config_validation.py @@ -535,7 +535,8 @@ SUN_CONDITION_SCHEMA = vol.All(vol.Schema({ vol.Required(CONF_CONDITION): 'sun', vol.Optional('before'): sun_event, vol.Optional('before_offset'): time_period, - vol.Optional('after'): vol.All(vol.Lower, vol.Any('sunset', 'sunrise')), + vol.Optional('after'): vol.All(vol.Lower, vol.Any( + SUN_EVENT_SUNSET, SUN_EVENT_SUNRISE)), vol.Optional('after_offset'): time_period, }), has_at_least_one_key('before', 'after')) diff --git a/homeassistant/helpers/event.py b/homeassistant/helpers/event.py index 1c28e2878e9..c1dae00bed5 100644 --- a/homeassistant/helpers/event.py +++ b/homeassistant/helpers/event.py @@ -6,7 +6,8 @@ from homeassistant.loader import bind_hass from homeassistant.helpers.sun import get_astral_event_next from ..core import HomeAssistant, callback from ..const import ( - ATTR_NOW, EVENT_STATE_CHANGED, EVENT_TIME_CHANGED, MATCH_ALL) + ATTR_NOW, EVENT_STATE_CHANGED, EVENT_TIME_CHANGED, MATCH_ALL, + SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET) from ..util import dt as dt_util from ..util.async_ import run_callback_threadsafe @@ -274,12 +275,12 @@ def async_track_sunrise(hass, action, offset=None): nonlocal remove remove = async_track_point_in_utc_time( hass, sunrise_automation_listener, get_astral_event_next( - hass, 'sunrise', offset=offset)) + hass, SUN_EVENT_SUNRISE, offset=offset)) hass.async_run_job(action) remove = async_track_point_in_utc_time( hass, sunrise_automation_listener, get_astral_event_next( - hass, 'sunrise', offset=offset)) + hass, SUN_EVENT_SUNRISE, offset=offset)) def remove_listener(): """Remove sunset listener.""" @@ -303,12 +304,12 @@ def async_track_sunset(hass, action, offset=None): nonlocal remove remove = async_track_point_in_utc_time( hass, sunset_automation_listener, get_astral_event_next( - hass, 'sunset', offset=offset)) + hass, SUN_EVENT_SUNSET, offset=offset)) hass.async_run_job(action) remove = async_track_point_in_utc_time( hass, sunset_automation_listener, get_astral_event_next( - hass, 'sunset', offset=offset)) + hass, SUN_EVENT_SUNSET, offset=offset)) def remove_listener(): """Remove sunset listener.""" diff --git a/homeassistant/helpers/sun.py b/homeassistant/helpers/sun.py index 59c2160a180..99ea1bad11f 100644 --- a/homeassistant/helpers/sun.py +++ b/homeassistant/helpers/sun.py @@ -1,6 +1,7 @@ """Helpers for sun events.""" import datetime +from homeassistant.const import SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET from homeassistant.core import callback from homeassistant.util import dt as dt_util from homeassistant.loader import bind_hass @@ -86,7 +87,9 @@ def is_up(hass, utc_point_in_time=None): if utc_point_in_time is None: utc_point_in_time = dt_util.utcnow() - next_sunrise = get_astral_event_next(hass, 'sunrise', utc_point_in_time) - next_sunset = get_astral_event_next(hass, 'sunset', utc_point_in_time) + next_sunrise = get_astral_event_next(hass, SUN_EVENT_SUNRISE, + utc_point_in_time) + next_sunset = get_astral_event_next(hass, SUN_EVENT_SUNSET, + utc_point_in_time) return next_sunrise > next_sunset diff --git a/tests/components/automation/test_sun.py b/tests/components/automation/test_sun.py index dce7933a759..030662da05c 100644 --- a/tests/components/automation/test_sun.py +++ b/tests/components/automation/test_sun.py @@ -4,6 +4,7 @@ from datetime import datetime import pytest from unittest.mock import patch +from homeassistant.const import SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET from homeassistant.setup import async_setup_component from homeassistant.components import sun import homeassistant.components.automation as automation @@ -39,7 +40,7 @@ async def test_sunset_trigger(hass, calls): automation.DOMAIN: { 'trigger': { 'platform': 'sun', - 'event': 'sunset', + 'event': SUN_EVENT_SUNSET, }, 'action': { 'service': 'test.automation', @@ -75,7 +76,7 @@ async def test_sunrise_trigger(hass, calls): automation.DOMAIN: { 'trigger': { 'platform': 'sun', - 'event': 'sunrise', + 'event': SUN_EVENT_SUNRISE, }, 'action': { 'service': 'test.automation', @@ -99,7 +100,7 @@ async def test_sunset_trigger_with_offset(hass, calls): automation.DOMAIN: { 'trigger': { 'platform': 'sun', - 'event': 'sunset', + 'event': SUN_EVENT_SUNSET, 'offset': '0:30:00' }, 'action': { @@ -130,7 +131,7 @@ async def test_sunrise_trigger_with_offset(hass, calls): automation.DOMAIN: { 'trigger': { 'platform': 'sun', - 'event': 'sunrise', + 'event': SUN_EVENT_SUNRISE, 'offset': '-0:30:00' }, 'action': { @@ -154,7 +155,7 @@ async def test_if_action_before(hass, calls): }, 'condition': { 'condition': 'sun', - 'before': 'sunrise', + 'before': SUN_EVENT_SUNRISE, }, 'action': { 'service': 'test.automation' @@ -187,7 +188,7 @@ async def test_if_action_after(hass, calls): }, 'condition': { 'condition': 'sun', - 'after': 'sunrise', + 'after': SUN_EVENT_SUNRISE, }, 'action': { 'service': 'test.automation' @@ -220,7 +221,7 @@ async def test_if_action_before_with_offset(hass, calls): }, 'condition': { 'condition': 'sun', - 'before': 'sunrise', + 'before': SUN_EVENT_SUNRISE, 'before_offset': '+1:00:00' }, 'action': { @@ -254,7 +255,7 @@ async def test_if_action_after_with_offset(hass, calls): }, 'condition': { 'condition': 'sun', - 'after': 'sunrise', + 'after': SUN_EVENT_SUNRISE, 'after_offset': '+1:00:00' }, 'action': { @@ -288,8 +289,8 @@ async def test_if_action_before_and_after_during(hass, calls): }, 'condition': { 'condition': 'sun', - 'after': 'sunrise', - 'before': 'sunset' + 'after': SUN_EVENT_SUNRISE, + 'before': SUN_EVENT_SUNSET }, 'action': { 'service': 'test.automation' diff --git a/tests/components/switch/test_flux.py b/tests/components/switch/test_flux.py index dbe31e8f47b..56e9a4434c0 100644 --- a/tests/components/switch/test_flux.py +++ b/tests/components/switch/test_flux.py @@ -4,7 +4,8 @@ from unittest.mock import patch from homeassistant.setup import setup_component from homeassistant.components import switch, light -from homeassistant.const import CONF_PLATFORM, STATE_ON, SERVICE_TURN_ON +from homeassistant.const import ( + CONF_PLATFORM, STATE_ON, SERVICE_TURN_ON, SUN_EVENT_SUNRISE) import homeassistant.loader as loader import homeassistant.util.dt as dt_util @@ -91,7 +92,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -131,7 +132,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -176,7 +177,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -222,7 +223,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -269,7 +270,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -314,7 +315,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -364,7 +365,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -415,7 +416,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -465,7 +466,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -514,7 +515,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -564,7 +565,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -611,7 +612,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -660,7 +661,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -720,7 +721,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: print('sunrise {}'.format(sunrise_time)) return sunrise_time print('sunset {}'.format(sunset_time)) @@ -774,7 +775,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time @@ -818,7 +819,7 @@ class TestSwitchFlux(unittest.TestCase): sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): - if event == 'sunrise': + if event == SUN_EVENT_SUNRISE: return sunrise_time return sunset_time diff --git a/tests/helpers/test_sun.py b/tests/helpers/test_sun.py index 8fb4e44b0ed..af639e69432 100644 --- a/tests/helpers/test_sun.py +++ b/tests/helpers/test_sun.py @@ -4,6 +4,7 @@ import unittest from unittest.mock import patch from datetime import timedelta, datetime +from homeassistant.const import SUN_EVENT_SUNRISE, SUN_EVENT_SUNSET import homeassistant.util.dt as dt_util import homeassistant.helpers.sun as sun @@ -92,9 +93,9 @@ class TestSun(unittest.TestCase): assert next_noon == sun.get_astral_event_next( self.hass, 'solar_noon') assert next_rising == sun.get_astral_event_next( - self.hass, 'sunrise') + self.hass, SUN_EVENT_SUNRISE) assert next_setting == sun.get_astral_event_next( - self.hass, 'sunset') + self.hass, SUN_EVENT_SUNSET) def test_date_events(self): """Test retrieving next sun events.""" @@ -123,9 +124,9 @@ class TestSun(unittest.TestCase): assert noon == sun.get_astral_event_date( self.hass, 'solar_noon', utc_today) assert sunrise == sun.get_astral_event_date( - self.hass, 'sunrise', utc_today) + self.hass, SUN_EVENT_SUNRISE, utc_today) assert sunset == sun.get_astral_event_date( - self.hass, 'sunset', utc_today) + self.hass, SUN_EVENT_SUNSET, utc_today) def test_date_events_default_date(self): """Test retrieving next sun events.""" @@ -155,9 +156,9 @@ class TestSun(unittest.TestCase): assert noon == sun.get_astral_event_date( self.hass, 'solar_noon', utc_today) assert sunrise == sun.get_astral_event_date( - self.hass, 'sunrise', utc_today) + self.hass, SUN_EVENT_SUNRISE, utc_today) assert sunset == sun.get_astral_event_date( - self.hass, 'sunset', utc_today) + self.hass, SUN_EVENT_SUNSET, utc_today) def test_date_events_accepts_datetime(self): """Test retrieving next sun events.""" @@ -186,9 +187,9 @@ class TestSun(unittest.TestCase): assert noon == sun.get_astral_event_date( self.hass, 'solar_noon', utc_now) assert sunrise == sun.get_astral_event_date( - self.hass, 'sunrise', utc_now) + self.hass, SUN_EVENT_SUNRISE, utc_now) assert sunset == sun.get_astral_event_date( - self.hass, 'sunset', utc_now) + self.hass, SUN_EVENT_SUNSET, utc_now) def test_is_up(self): """Test retrieving next sun events.""" @@ -209,19 +210,21 @@ class TestSun(unittest.TestCase): june = datetime(2016, 6, 1, tzinfo=dt_util.UTC) - print(sun.get_astral_event_date(self.hass, 'sunrise', + print(sun.get_astral_event_date(self.hass, SUN_EVENT_SUNRISE, datetime(2017, 7, 25))) - print(sun.get_astral_event_date(self.hass, 'sunset', + print(sun.get_astral_event_date(self.hass, SUN_EVENT_SUNSET, datetime(2017, 7, 25))) - print(sun.get_astral_event_date(self.hass, 'sunrise', + print(sun.get_astral_event_date(self.hass, SUN_EVENT_SUNRISE, datetime(2017, 7, 26))) - print(sun.get_astral_event_date(self.hass, 'sunset', + print(sun.get_astral_event_date(self.hass, SUN_EVENT_SUNSET, datetime(2017, 7, 26))) - assert sun.get_astral_event_next(self.hass, 'sunrise', june) == \ - datetime(2016, 7, 25, 23, 23, 39, tzinfo=dt_util.UTC) - assert sun.get_astral_event_next(self.hass, 'sunset', june) == \ - datetime(2016, 7, 26, 22, 19, 1, tzinfo=dt_util.UTC) - assert sun.get_astral_event_date(self.hass, 'sunrise', june) is None - assert sun.get_astral_event_date(self.hass, 'sunset', june) is None + assert sun.get_astral_event_next(self.hass, SUN_EVENT_SUNRISE, june) \ + == datetime(2016, 7, 25, 23, 23, 39, tzinfo=dt_util.UTC) + assert sun.get_astral_event_next(self.hass, SUN_EVENT_SUNSET, june) \ + == datetime(2016, 7, 26, 22, 19, 1, tzinfo=dt_util.UTC) + assert sun.get_astral_event_date(self.hass, SUN_EVENT_SUNRISE, june) \ + is None + assert sun.get_astral_event_date(self.hass, SUN_EVENT_SUNSET, june) \ + is None