583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
|
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
|
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
+
-
+
|
# If this remote has a "max" feature, use that instead of stepping
use_max_button = False
if initial_value == target_range_max:
if 'has_max_{}'.format(button_prefix) in self._config['features']:
use_max_button = True
# Now that we have forced the value to the extreme, move in
# steps from that value to the desired value
if initial_value < target_value:
final_steps = target_value - initial_value
else:
final_steps = initial_value - target_value
if use_max_button:
self._debug("[INITIAL] Going to max {}".format(button_prefix))
getattr(self, "_max_{}".format(button_prefix))(zone)
else:
# Otherwise, step it
step_command = {'button': "{}_{}".format(button_prefix, initial_direction)}
if zone is not None:
step_command['zone'] = zone
for step in range(initial_steps):
transition_delay = None
if step == (initial_steps - 1) and transition is not None and final_steps > 1:
transition_delay = transition / final_steps
self._debug("[INITIAL] Stepping {} {}".format(button_prefix, initial_direction))
self._send_button(step_command)
self._debug("[INITIAL] Stepping {} {} with a delay of {} (s) afterwards".format(button_prefix, initial_direction, transition_delay))
self._send_button(step_command, post_delay = transition_delay)
# Now that we have forced the value to the extreme, move in
# steps from that value to the desired value
if initial_value < target_value:
final_steps = target_value - initial_value
else:
final_steps = initial_value - target_value
step_command = {'button': "{}_{}".format(button_prefix, final_direction)}
if zone is not None:
step_command['zone'] = zone
transition_delay = None
if transition is not None and final_steps > 1:
transition_delay = transition / (final_steps - 1)
transition_delay = transition / final_steps
for step in range(final_steps):
if step == (final_steps - 1):
transition_delay = None
self._debug("[FINAL] Stepping {} {} with a delay of {} (ms) afterwards".format(button_prefix, final_direction, transition_delay))
self._debug("[FINAL] Stepping {} {} with a delay of {} (s) afterwards".format(button_prefix, final_direction, transition_delay))
self._send_button(step_command, post_delay = transition_delay)
return True
def _step_brightness(self, brightness, brightness_min, brightness_max, zone = None, transition = None):
# For setting the brightness, set a change-overpoint at around
# 75%, where below this value we will go to the dimmest and
|