def __init__(self, hass, min_colortemp, max_colortemp, sunrise_offset, sunset_offset, sunrise_time, sunset_time, latitude, longitude, elevation, interval, transition): self.hass = hass self.data = {} self.data['min_colortemp'] = min_colortemp self.data['max_colortemp'] = max_colortemp self.data['sunrise_offset'] = sunrise_offset self.data['sunset_offset'] = sunset_offset self.data['sunrise_time'] = sunrise_time self.data['sunset_time'] = sunset_time self.data['latitude'] = latitude self.data['longitude'] = longitude self.data['elevation'] = elevation self.data['interval'] = interval self.data['transition'] = transition self.data['percent'] = self.calc_percent() self.data['colortemp'] = self.calc_colortemp() self.data['rgb_color'] = self.calc_rgb() self.data['xy_color'] = self.calc_xy() self.data['hs_color'] = self.calc_hs() self.update = Throttle(timedelta(seconds=interval))(self._update) if self.data['sunrise_time'] is not None: track_time_change(self.hass, self._update, hour=int(self.data['sunrise_time'].strftime("%H")), minute=int(self.data['sunrise_time'].strftime("%M")), second=int(self.data['sunrise_time'].strftime("%S"))) else: track_sunrise(self.hass, self._update, self.data['sunrise_offset']) if self.data['sunset_time'] is not None: track_time_change(self.hass, self._update, hour=int(self.data['sunset_time'].strftime("%H")), minute=int(self.data['sunset_time'].strftime("%M")), second=int(self.data['sunset_time'].strftime("%S"))) else: track_sunset(self.hass, self._update, self.data['sunset_offset'])
def test_track_sunset(self): """Test track the sunset.""" latitude = 32.87336 longitude = 117.22743 # Setup sun component self.hass.config.latitude = latitude self.hass.config.longitude = longitude setup_component(self.hass, sun.DOMAIN, {sun.DOMAIN: { sun.CONF_ELEVATION: 0 }}) # Get next sunrise/sunset astral = Astral() utc_now = datetime(2014, 5, 24, 12, 0, 0, tzinfo=dt_util.UTC) utc_today = utc_now.date() mod = -1 while True: next_setting = (astral.sunset_utc(utc_today + timedelta(days=mod), latitude, longitude)) if next_setting > utc_now: break mod += 1 # Track sunset runs = [] with patch('homeassistant.util.dt.utcnow', return_value=utc_now): unsub = track_sunset(self.hass, lambda: runs.append(1)) offset_runs = [] offset = timedelta(minutes=30) with patch('homeassistant.util.dt.utcnow', return_value=utc_now): unsub2 = track_sunset(self.hass, lambda: offset_runs.append(1), offset) # Run tests self._send_time_changed(next_setting - offset) self.hass.block_till_done() self.assertEqual(0, len(runs)) self.assertEqual(0, len(offset_runs)) self._send_time_changed(next_setting) self.hass.block_till_done() self.assertEqual(1, len(runs)) self.assertEqual(0, len(offset_runs)) self._send_time_changed(next_setting + offset) self.hass.block_till_done() self.assertEqual(1, len(runs)) self.assertEqual(1, len(offset_runs)) unsub() unsub2() self._send_time_changed(next_setting + offset) self.hass.block_till_done() self.assertEqual(1, len(runs)) self.assertEqual(1, len(offset_runs))
def test_track_sunset(self): """Test track the sunset.""" latitude = 32.87336 longitude = 117.22743 # Setup sun component self.hass.config.latitude = latitude self.hass.config.longitude = longitude setup_component(self.hass, sun.DOMAIN, { sun.DOMAIN: {sun.CONF_ELEVATION: 0}}) # Get next sunrise/sunset astral = Astral() utc_now = datetime(2014, 5, 24, 12, 0, 0, tzinfo=dt_util.UTC) utc_today = utc_now.date() mod = -1 while True: next_setting = (astral.sunset_utc( utc_today + timedelta(days=mod), latitude, longitude)) if next_setting > utc_now: break mod += 1 # Track sunset runs = [] with patch('homeassistant.util.dt.utcnow', return_value=utc_now): unsub = track_sunset(self.hass, lambda: runs.append(1)) offset_runs = [] offset = timedelta(minutes=30) with patch('homeassistant.util.dt.utcnow', return_value=utc_now): unsub2 = track_sunset( self.hass, lambda: offset_runs.append(1), offset) # Run tests self._send_time_changed(next_setting - offset) self.hass.block_till_done() self.assertEqual(0, len(runs)) self.assertEqual(0, len(offset_runs)) self._send_time_changed(next_setting) self.hass.block_till_done() self.assertEqual(1, len(runs)) self.assertEqual(0, len(offset_runs)) self._send_time_changed(next_setting + offset) self.hass.block_till_done() self.assertEqual(1, len(runs)) self.assertEqual(1, len(offset_runs)) unsub() unsub2() self._send_time_changed(next_setting + offset) self.hass.block_till_done() self.assertEqual(1, len(runs)) self.assertEqual(1, len(offset_runs))
def test_track_sunset(self): """Test track the sunset.""" latitude = 32.87336 longitude = 117.22743 # Setup sun component self.hass.config.latitude = latitude self.hass.config.longitude = longitude setup_component(self.hass, sun.DOMAIN, {sun.DOMAIN: { sun.CONF_ELEVATION: 0 }}) # Get next sunrise/sunset astral = Astral() utc_now = dt_util.utcnow() mod = -1 while True: next_setting = (astral.sunset_utc(utc_now + timedelta(days=mod), latitude, longitude)) if next_setting > utc_now: break mod += 1 # Track sunset runs = [] unsub = track_sunset(self.hass, lambda: runs.append(1)) offset_runs = [] offset = timedelta(minutes=30) unsub2 = track_sunset(self.hass, lambda: offset_runs.append(1), offset) # Run tests self._send_time_changed(next_setting - offset) self.hass.block_till_done() self.assertEqual(0, len(runs)) self.assertEqual(0, len(offset_runs)) self._send_time_changed(next_setting) self.hass.block_till_done() self.assertEqual(1, len(runs)) self.assertEqual(0, len(offset_runs)) self._send_time_changed(next_setting + offset) self.hass.block_till_done() self.assertEqual(2, len(runs)) self.assertEqual(1, len(offset_runs)) unsub() unsub2() self._send_time_changed(next_setting + offset) self.hass.block_till_done() self.assertEqual(2, len(runs)) self.assertEqual(1, len(offset_runs))
def __init__( self, hass, min_colortemp, max_colortemp, sunrise_offset, sunset_offset, sunrise_time, sunset_time, latitude, longitude, elevation, interval, transition, ): self.hass = hass self.data = {} self.data["min_colortemp"] = min_colortemp self.data["max_colortemp"] = max_colortemp self.data["sunrise_offset"] = sunrise_offset self.data["sunset_offset"] = sunset_offset self.data["sunrise_time"] = sunrise_time self.data["sunset_time"] = sunset_time self.data["latitude"] = latitude self.data["longitude"] = longitude self.data["elevation"] = elevation self.data["interval"] = interval self.data["transition"] = transition self.data["percent"] = self.calc_percent() self.data["colortemp"] = self.calc_colortemp() self.data["rgb_color"] = self.calc_rgb() self.data["xy_color"] = self.calc_xy() self.data["hs_color"] = self.calc_hs() self.update = Throttle(timedelta(seconds=interval))(self._update) if self.data["sunrise_time"] is not None: track_time_change( self.hass, self._update, hour=int(self.data["sunrise_time"].strftime("%H")), minute=int(self.data["sunrise_time"].strftime("%M")), second=int(self.data["sunrise_time"].strftime("%S")), ) else: track_sunrise(self.hass, self._update, self.data["sunrise_offset"]) if self.data["sunset_time"] is not None: track_time_change( self.hass, self._update, hour=int(self.data["sunset_time"].strftime("%H")), minute=int(self.data["sunset_time"].strftime("%M")), second=int(self.data["sunset_time"].strftime("%S")), ) else: track_sunset(self.hass, self._update, self.data["sunset_offset"])
def test_track_sunset(self): """Test track the sunset.""" latitude = 32.87336 longitude = 117.22743 # Setup sun component self.hass.config.latitude = latitude self.hass.config.longitude = longitude setup_component(self.hass, sun.DOMAIN, { sun.DOMAIN: {sun.CONF_ELEVATION: 0}}) # Get next sunrise/sunset astral = Astral() utc_now = dt_util.utcnow() mod = -1 while True: next_setting = (astral.sunset_utc(utc_now + timedelta(days=mod), latitude, longitude)) if next_setting > utc_now: break mod += 1 # Track sunset runs = [] unsub = track_sunset(self.hass, lambda: runs.append(1)) offset_runs = [] offset = timedelta(minutes=30) unsub2 = track_sunset(self.hass, lambda: offset_runs.append(1), offset) # Run tests self._send_time_changed(next_setting - offset) self.hass.block_till_done() self.assertEqual(0, len(runs)) self.assertEqual(0, len(offset_runs)) self._send_time_changed(next_setting) self.hass.block_till_done() self.assertEqual(1, len(runs)) self.assertEqual(0, len(offset_runs)) self._send_time_changed(next_setting + offset) self.hass.block_till_done() self.assertEqual(2, len(runs)) self.assertEqual(1, len(offset_runs)) unsub() unsub2() self._send_time_changed(next_setting + offset) self.hass.block_till_done() self.assertEqual(2, len(runs)) self.assertEqual(1, len(offset_runs))
def trigger(hass, config, action): """Listen for events based on configuration.""" event = config.get(CONF_EVENT) offset = config.get(CONF_OFFSET) # Do something to call action if event == EVENT_SUNRISE: track_sunrise(hass, action, offset) else: track_sunset(hass, action, offset) return True
def trigger(hass, config, action): """Listen for events based on configuration.""" event = config.get(CONF_EVENT) offset = config.get(CONF_OFFSET) def call_action(): """Call action with right context.""" action({ 'trigger': { 'platform': 'sun', 'event': event, 'offset': offset, }, }) # Do something to call action if event == SUN_EVENT_SUNRISE: track_sunrise(hass, call_action, offset) else: track_sunset(hass, call_action, offset) return True
def trigger(hass, config, action): """ Listen for events based on config. """ event = config.get(CONF_EVENT) if event is None: _LOGGER.error("Missing configuration key %s", CONF_EVENT) return False event = event.lower() if event not in (EVENT_SUNRISE, EVENT_SUNSET): _LOGGER.error("Invalid value for %s: %s", CONF_EVENT, event) return False offset = _parse_offset(config.get(CONF_OFFSET)) if offset is False: return False # Do something to call action if event == EVENT_SUNRISE: track_sunrise(hass, action, offset) else: track_sunset(hass, action, offset) return True
def track_sunset_decorator(action): """Decorator to track sunset events.""" event.track_sunset(HASS, functools.partial(action, HASS), offset) return action