"""Built-in flows which the vendor ships in their app and pre-made transitions, for your strobing pleasure."""
from .flow import Action
from .flow import Flow
from .flow import RGBTransition
from .flow import TemperatureTransition
from yeelight import transitions
[docs]def disco(bpm=120):
"""
Color changes to the beat.
:param int bpm: The beats per minute to pulse to.
:returns: An infinite Flow consisting of 8 transitions.
:rtype: Flow
"""
return Flow(count=0, action=Action.recover, transitions=transitions.disco(bpm))
[docs]def temp():
"""
Slowly-changing color temperature.
:returns: An infinite Flow consisting of 2 transitions.
:rtype: Flow
"""
return Flow(count=0, action=Action.recover, transitions=transitions.temp())
[docs]def strobe():
"""
Rapid flashing on and off.
:returns: An infinite Flow consisting of 2 transitions.
:rtype: Flow
"""
return Flow(count=0, action=Action.recover, transitions=transitions.strobe())
[docs]def pulse(red, green, blue, duration=250, brightness=100, count=1):
"""
Pulse a single color once (mainly to be used for notifications).
:param int red: The red color component to pulse (0-255).
:param int green: The green color component to pulse (0-255).
:param int blue: The blue color component to pulse (0-255).
:param int duration: The duration to pulse for, in milliseconds.
:param int brightness: The brightness to pulse at (1-100).
:param int count: The number times to pulse.
:returns: A Flow consisting of 2 transitions, after which the bulb returns to its previous state.
:rtype: Flow
"""
return Flow(
count,
action=Action.recover,
transitions=transitions.pulse(red, green, blue, duration, brightness),
)
[docs]def strobe_color(brightness=100):
"""
Rapid flashing colors.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 6 transitions.
:rtype: Flow
"""
return Flow(
count=0, action=Action.recover, transitions=transitions.strobe_color(brightness)
)
[docs]def alarm(duration=250):
"""
Red alarm; flashing bright red to dark red.
:param int duration: The duration between hi/lo brightness,in milliseconds.
:returns: An infinite Flow consisting of 2 transitions.
:rtype: Flow
"""
return Flow(count=0, action=Action.recover, transitions=transitions.alarm(duration))
[docs]def police(duration=300, brightness=100):
"""
Color changes from red to blue, like police lights.
:param int duration: The duration between red and blue, in milliseconds.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 2 transitions.
:rtype: Flow
"""
return Flow(
count=0,
action=Action.recover,
transitions=transitions.police(duration, brightness),
)
[docs]def police2(duration=250, brightness=100):
"""
Color flashes red and then blue, like urgent police lights.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 8 transitions.
:rtype: Flow
"""
return Flow(
count=0,
action=Action.recover,
transitions=transitions.police2(duration, brightness),
)
[docs]def lsd(duration=3000, brightness=100):
"""
Gradual changes to a pleasing, trippy palette.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 5 transitions.
:rtype: Flow
"""
return Flow(
count=0,
action=Action.recover,
transitions=transitions.lsd(duration, brightness),
)
[docs]def christmas(duration=250, brightness=100, sleep=3000):
"""
Color changes from red to green, like christmas lights.
:param int duration: The duration between red and green, in milliseconds.
:param int brightness: The brightness of the transition.
:param int sleep: The time to sleep between colors, in milliseconds.
:returns: An infinite Flow consisting of 4 transitions.
:rtype: Flow
"""
return Flow(
count=0,
action=Action.recover,
transitions=transitions.christmas(duration, brightness, sleep),
)
[docs]def rgb(duration=250, brightness=100, sleep=3000):
"""
Color changes from red to green to blue.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:param int sleep: The time to sleep between colors, in milliseconds
:returns: An infinite Flow consisting of 6 transitions.
:rtype: Flow
"""
return Flow(
count=0,
action=Action.recover,
transitions=transitions.rgb(duration, brightness, sleep),
)
[docs]def random_loop(duration=750, brightness=100, count=9):
"""
Color changes between `count` randomly chosen colors.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:param int count: The number of random chosen colors in transition.
:returns: An infinite Flow consisting of up to 9 transitions.
:rtype: Flow
"""
return Flow(
count=0,
action=Action.recover,
transitions=transitions.random_loop(duration, brightness, count),
)
[docs]def slowdown(duration=2000, brightness=100, count=8):
"""
Changes between `count` random chosen colors with increasing transition time.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:param int count: The number of random chosen colors in transition.
:returns: An infinite Flow consisting of up to 8 transitions.
:rtype: Flow
"""
return Flow(
count=0,
action=Action.recover,
transitions=transitions.slowdown(duration, brightness, count),
)
[docs]def home(duration=500, brightness=80):
"""
Simulate daylight.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 1 transition.
:rtype: Flow
"""
transition = [
TemperatureTransition(degrees=3200, duration=duration, brightness=brightness)
]
return Flow(count=0, action=Action.recover, transitions=transition)
[docs]def night_mode(duration=500, brightness=1):
"""
Dim the lights to a dark red, pleasant for the eyes at night.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 1 transition.
:rtype: Flow
"""
transition = [
RGBTransition(0xFF, 0x99, 0x00, duration=duration, brightness=brightness)
]
return Flow(count=0, action=Action.recover, transitions=transition)
[docs]def date_night(duration=500, brightness=50):
"""
Dim the lights to a cozy orange.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 1 transition.
:rtype: Flow
"""
transition = [
RGBTransition(0xFF, 0x66, 0x00, duration=duration, brightness=brightness)
]
return Flow(count=0, action=Action.recover, transitions=transition)
[docs]def movie(duration=500, brightness=50):
"""
Dim the lights to a comfy purple.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 1 transition.
:rtype: Flow
"""
transition = [
RGBTransition(
red=0x14, green=0x14, blue=0x32, duration=duration, brightness=brightness
)
]
return Flow(count=0, action=Action.recover, transitions=transition)
[docs]def sunrise():
"""
Simulate a natural and gentle sunrise in 15 minutes.
:returns: A Flow consisting of 3 transitions, after which the bulb stays on.
:rtype: Flow
"""
transitions = [
RGBTransition(red=0xFF, green=0x4D, blue=0x00, duration=50, brightness=1),
TemperatureTransition(degrees=1700, duration=360000, brightness=10),
TemperatureTransition(degrees=2700, duration=540000, brightness=100),
]
return Flow(count=1, action=Action.stay, transitions=transitions)
[docs]def sunset():
"""
Simulate a natural sunset and offering relaxing dimming to help you sleep in 10 minutes.
:returns: A Flow consisting of 3 transitions, after which the bulb turns off.
:rtype: Flow
"""
transitions = [
TemperatureTransition(degrees=2700, duration=50, brightness=10),
TemperatureTransition(degrees=1700, duration=180000, brightness=5),
RGBTransition(red=0xFF, green=0x4C, blue=0x00, duration=420000, brightness=1),
]
return Flow(count=1, action=Action.off, transitions=transitions)
[docs]def romance():
"""
Romantic lights.
:returns: An infinite Flow consisting of 2 transitions.
:rtype: Flow
"""
transitions = [
RGBTransition(red=0x59, green=0x15, blue=0x6D, duration=4000, brightness=1),
RGBTransition(red=0x66, green=0x14, blue=0x2A, duration=4000, brightness=1),
]
return Flow(count=0, action=Action.stay, transitions=transitions)
[docs]def happy_birthday():
"""
Happy Birthday lights.
:returns: An infinite Flow consisting of 3 transitions.
:rtype: Flow
"""
transitions = [
RGBTransition(red=0xDC, green=0x50, blue=0x19, duration=1996, brightness=80),
RGBTransition(red=0xDC, green=0x78, blue=0x1E, duration=1996, brightness=80),
RGBTransition(red=0xAA, green=0x32, blue=0x14, duration=1996, brightness=80),
]
return Flow(count=0, action=Action.stay, transitions=transitions)
[docs]def candle_flicker():
"""
Simulate candle flicker.
:returns: An infinite Flow consisting of 9 transitions.
:rtype: Flow
"""
transitions = [
TemperatureTransition(degrees=2700, duration=800, brightness=50),
TemperatureTransition(degrees=2700, duration=800, brightness=30),
TemperatureTransition(degrees=2700, duration=1200, brightness=80),
TemperatureTransition(degrees=2700, duration=800, brightness=60),
TemperatureTransition(degrees=2700, duration=1200, brightness=90),
TemperatureTransition(degrees=2700, duration=2400, brightness=50),
TemperatureTransition(degrees=2700, duration=1200, brightness=80),
TemperatureTransition(degrees=2700, duration=800, brightness=60),
TemperatureTransition(degrees=2700, duration=400, brightness=70),
]
return Flow(count=0, action=Action.recover, transitions=transitions)
[docs]def tea_time(duration=500, brightness=50):
"""
Warm, cozy light.
:param int duration: The duration to fade to next color, in milliseconds.
:param int brightness: The brightness of the transition.
:returns: An infinite Flow consisting of 1 transition.
:rtype: Flow
"""
transition = [
TemperatureTransition(degrees=3000, duration=duration, brightness=brightness)
]
return Flow(count=0, action=Action.recover, transitions=transition)