def _run(self, duration=None): begin = time.time() if duration and duration <= self.sleep_time: self.sleep_time = duration / 2 self.transition_time = self.sleep_time * 0.2 try: while True: for hue in self.hue_sequence: for light in self.reachable_lights.get_light_objects(): data = { 'hue': hue, 'bri': self.brightness, 'transitiontime': types.transition_time(self.transition_time), 'sat': 255, 'on': True, } set_light_multiple(self.bridge, light.light_id, data) if duration and \ time.time() - begin + self.sleep_time >= duration: raise StopIteration time.sleep(self.sleep_time) except StopIteration: if duration: time_left = duration - (time.time() - begin) if time_left > 0: time.sleep(time_left)
def _set_light_group(self, light_ids, hue): for light_id in light_ids: data = { 'hue': hue, 'bri': 254, 'transitiontime': types.transition_time(self.transition_time), 'sat': 254, 'on': True, } set_light_multiple(self.bridge, light_id, data)
def _set_light(self, light_id): while True: if self.reachable_lights.is_reachable(light_id): time_span = random.time(self.time_range[0], self.time_range[1], decimal_places=1) if self._time_to_end and \ time.time() + time_span > self._time_to_end: break data = { 'hue': randint(*self.hue_range), 'transitiontime': types.transition_time(time_span - 0.2), 'bri': randint(*self.brightness_range), 'sat': 254, 'on': True, } set_light_multiple(self.bridge, light_id, data) time.sleep(time_span) else: break
def test_invalid_string(self): with self.assertRaises(ValueError): transition_time('lol')
def test_invalid_max(self): with self.assertRaises(ValueError): transition_time(6553.6)
def test_invalid_min(self): with self.assertRaises(ValueError): transition_time(-1)
def test_valid_float_cut(self): self.assertEqual(transition_time(2.9), 29)
def test_valid_float(self): self.assertEqual(transition_time(2.3), 23)
def test_valid_max_string(self): self.assertEqual(transition_time('6553.5'), 65535)
def test_valid_min_string(self): self.assertEqual(transition_time('0'), 0)
def test_valid_max(self): self.assertEqual(transition_time(6553.5), 65535)
def test_valid_normal(self): self.assertEqual(transition_time(10), 100)
def test_valid_min(self): self.assertEqual(transition_time(0), 0)