Пример #1
0
def main():
    bulb = Light("d0:73:d5:28:0b:4a", "10.0.0.16")
    print("Selected {}".format(bulb.get_label()))

    # get original state
    original_power = bulb.get_power()
    original_color = bulb.get_color()
    bulb.set_power("on")

    sleep(0.2)  # to look pretty

    print("Toggling power...")
    toggle_device_power(bulb, 0.2)

    print("Toggling color...")
    toggle_light_color(bulb, 0.2)

    # restore original color
    # color can be restored after the power is turned off as well
    print("Restoring original color and power...")
    bulb.set_color(original_color)

    sleep(1)  # to look pretty.

    # restore original power
    bulb.set_power(original_power)
Пример #2
0
def blink_light(mac, ip):
    """
    Run a rapid blink on a light to provide a notification.
    """
    light = Light(mac, ip)

    colors = light.get_color()
    power_state = light.get_power()

    repeats = 3
    delay = 0.25
    light.set_power(1)
    for _ in range(repeats):

        light.set_color(RED, rapid=True)
        sleep(delay)
        light.set_color(GREEN, rapid=True)
        sleep(delay)
        light.set_color(BLUE, rapid=True)
        sleep(delay)
        if power_state:
            light.set_color(colors)
        else:
            light.set_color(COLD_WHITE)
        sleep(1)
    light.set_color(colors)
    light.set_power(power_state)
Пример #3
0
class Lifx(Block):

    version = VersionProperty('0.1.0')
    mac = StringProperty(title='MAC address', default='[[LIFX_MAC]]')
    ip = StringProperty(title='IP Address', default='[[LIFX_IP]]')
    power = IntProperty(title='1 for on 0 for off', default=0)
    hue = IntProperty(title='Hue (0-65535)', default=0)
    sat = IntProperty(title='Saturation (0-65535)', default=0)
    bri = IntProperty(title='Brightness (0-65535)', default=65535)
    kelvin = IntProperty(title='Kelvin (2500-9000)', default=3500)
    kill_switch = BoolProperty(title='Turn off Light at Service Stop?',
                               default=True, advanced=True)

    def configure(self, context):
        super().configure(context)
        self.bulb = Light(self.mac(), self.ip())

    def process_signals(self, signals):
        for signal in signals:
            if self.power(signal) == 0:
                brightness = 0
            else:
                brightness = self.bri(signal)
                self.bulb.set_power(True)
            self.bulb.set_color([self.hue(signal),
                                 self.sat(signal),
                                 brightness,
                                 self.kelvin(signal)])
            pass
        self.notify_signals(signals)

    def stop(self):
        if self.kill_switch():
            self.bulb.set_power(False)
        super().stop()
Пример #4
0
class Bulb(object):
    def __init__(self, ip, mac, multizone=False):
        self.rapid = False
        if multizone:
            self.bulb = MultiZoneLight(mac, ip)
        else:
            self.bulb = Light(mac, ip)

    def supports_multizone(self):
        return self.bulb.supports_multizone()

    def get_color_zones(self):
        return self.bulb.get_color_zones()

    def set_zone_color(self, startZone, endZone, color, duration=5):
        return self.bulb.set_zone_color(startZone,
                                        endZone,
                                        color,
                                        duration=duration,
                                        rapid=self.rapid)

    def set_zone_colors(self, colors, duration=5):
        return self.bulb.set_zone_colors(colors,
                                         duration=duration,
                                         rapid=self.rapid)

    def set_power(self, power, duration=5):
        if duration:
            self.bulb.set_power(power, duration=duration, rapid=self.rapid)
        else:
            self.bulb.set_power(power)

    def get_power(self):
        return self.bulb.get_power()

    def set_color(self, color, duration=5):
        if duration:
            self.bulb.set_color(color, duration=duration, rapid=self.rapid)
        else:
            self.bulb.set_color(color)

    def get_color(self):
        return self.bulb.get_color()

    def get_label(self):
        return self.bulb.get_label()

    def get_brightness(self):
        return self.bulb.get_color()[2]

    def set_brightness(self, brightness, duration=5):
        return self.bulb.set_brightness(brightness, duration, rapid=self.rapid)

    def fast_mode(self, hostIP=None):
        self.rapid = True

    def slow_mode(self):
        self.rapid = False
Пример #5
0
 def apply(self, device_profile):
     duration = device_profile['duration']  #milliseconds
     dev = Light(device_profile['mac'], device_profile['ip'])
     dev.set_power(device_profile['power'], duration)  #range [0,65535]
     dev.set_hue(device_profile['hue'], duration)  #range [0-65535]
     dev.set_saturation(device_profile['saturation'],
                        duration)  #range [0-65535]
     dev.set_brightness(device_profile['brightness'],
                        duration)  #range [0-65535]
     dev.set_colortemp(device_profile['temperature'],
                       duration)  #range [2500-9000]
def toggle_device_power(device: lifxlan.Light, interval=.5, num_cycles=3):
    original_power_state = device.get_power()
    device.set_power("off")
    rapid = True if interval < 1 else False
    for i in range(num_cycles):
        device.set_power("on", rapid)
        sleep(interval)
        device.set_power("off", rapid)
        sleep(interval)
    device.set_power(original_power_state)
Пример #7
0
class LifxLightBulb(LightBulb):
    def __init__(self, ip_addr, mac_addr):
        _LOGGER.info('creating ip_addr=%s mac_addr=%s', ip_addr, mac_addr)
        self._device = Light(mac_addr, ip_addr)

    def get_power(self):
        _LOGGER.info('getting power')
        return self._device.get_power() == 65536

    def turn_on(self):
        _LOGGER.info('turning on')
        self._device.set_power(True)

    def turn_off(self):
        _LOGGER.info('turning off')
        self._device.set_power(False)

    def set_color(self, color):
        _LOGGER.debug('setting color=%s', color)
        self._device.set_color(to_hsbk(color), rapid=True)
Пример #8
0
class LightController:
    def __init__(self, mac = None, ip = None):
        self.bulb = None
        if mac != None and ip != None:
            self.bulb = Light(mac, ip) # put a try block in here later
        elif self.bulb == None: #put this in the catch block later
            lights = LifxLAN(1)
            self.bulb = lights.get_lights()[0]  # just get whatever light you find
        else:
            lights = LifxLAN(1)
            self.bulb = lights.get_lights()[0]
        self.color = 0
        #self.colors = [BLUE, CYAN, GREEN, ORANGE, PINK, PURPLE, RED, YELLOW, WHITE]
        self.colors = [BLUE, GREEN, RED, WHITE]

    def shiftColor(self):
        self.color = (1 + self.color) % len(self.colors)
        self.bulb.set_color(self.colors[self.color])

    def togglePower(self):
        if self.bulb.get_power() == 65535:
            self.bulb.set_power(0)
        else:
            self.bulb.set_power(65535)
class LifxOutputDevice(OutputDevice):
    _light: Light
    _brightness: int

    def __init__(self, mac_address: str, ip_address: str):
        self._light = Light(mac_addr=mac_address, ip_addr=ip_address)

    def on(self, color: RGBColor):
        self._light.set_power("off")  # type: ignore
        self._light.set_power("on")  # type: ignore
        self._light.set_color(
            color=color.to_lifx_colors(HIGH_BRIGHTNESS))  # type: ignore
        self._light.set_waveform(  # type: ignore
            is_transient=1,
            color=color.to_lifx_colors(LOW_BRIGHTNESS),
            period=2000,
            cycles=INFINITE_CYCLES,
            duty_cycle=0.5,
            waveform=1,
            rapid=True,
        )

    def off(self):
        self._light.set_power("off")  # type: ignore
Пример #10
0
    def set_lights(self, postvars={}):
        sched.pause()
        resp = 'no post data found'
        l = None
        if any(postvars):
            resp = 'vars!'
            mac = postvars.get('mac', None)
            if mac:
                ip = postvars.get('ip', None)
                if ip:
                    l = Light(mac[0], ip[0])
            light = postvars.get('light', None)
            if light:
                logging.debug(light)
                if light[0] in LIGHTS:
                    logging.debug('found {}'.format(light[0]))
                    light = LIGHTS.get(light[0])
                    mac = light.get('mac')
                    ip = light.get('ip')
                    colour = light.get('colour')
                    l = Light(mac, ip)
                else:
                    logging.debug(LIGHTS)
                    l = self.devices.get_device_by_name(light[0])
                    if l:
                        colour = l.get_color()

            if l:
                level = postvars.get('level', None)
                dim = postvars.get('dim', None)
                white = postvars.get('white', None)
                if level is not None:
                    try:
                        if (level[0] == 'full'):
                            h, s, b, k = colour
                            b = 65535
                            l.set_power('on')
                            l.set_color([h, s, b, k], 300)
                        else:
                            l.set_power(level[0])
                            resp = 'set power {}'.format(level)
                    except Exception as e:
                        resp = 'err... {}'.format(repr(e))
                elif dim is not None:
                    switch_after_dim = False
                    try:
                        h, s, b, k = colour
                        if l.get_power() == 0:
                            switch_after_dim = True
                            b = 0
                        dim = dim[0]
                        if dim not in ('up', 'down'):
                            dim = LIGHTS[l.get_label()].get('last_dim', None)
                            if dim is None or b in (0, 65535):
                                if b > 32000:
                                    dim = 'down'
                                else:
                                    dim = 'up'
                        if dim == 'down':
                            b -= 6554
                        if dim == 'up':
                            b += 6554
                        if b < 0:
                            b = 0
                        if b > 65535:
                            b = 65535
                        l.set_color([h, s, b, k], 600)
                        if LIGHTS.get(l.get_label(), None) is None:
                            LIGHTS[l.get_label()] = {'mac': l.get_mac_addr(),
                                                     'ip': l.get_ip_addr(),
                                                     'colour': l.get_color(),
                                                     'last_dim': dim}
                        else:
                            LIGHTS[l.get_label()]['colour'] = [h, s, b, k]
                            LIGHTS[l.get_label()]['last_dim'] = dim
                        if switch_after_dim is True:
                            l.set_power('on')
                        resp = 'set brightness {}'.format(b)
                    except Exception as e:
                        resp = 'dim... {}'.format(repr(e))
                elif white is not None:
                    try:
                        h, s, b, k = colour
                        white = white[0]
                        if white not in ('warm', 'cool'):
                            k = int(white)
                        if white == 'warm':
                            k -= 500
                        if white == 'cool':
                            k += 500
                        if k < 2500:
                            k = 2500
                        if k > 9000:
                            k = 9000
                        l.set_color([h, s, b, k], 500)
                        if LIGHTS.get(l.get_label(), None) is None:
                            LIGHTS[l.get_label()] = {'mac': l.get_mac_addr(),
                                                     'ip': l.get_ip_addr(),
                                                     'colour': l.get_color()}
                        else:
                            LIGHTS[l.get_label()]['colour'] = [h, s, b, k]
                        resp = 'set white level {}'.format(k)
                    except Exception as e:
                        resp = 'white... {}'.format(repr(e))

                else:
                    try:
                        if l.get_power() > 0:
                            l.set_power(0)
                        else:
                            l.set_power('on')
                    except:
                        resp = 'nope...'
            else:
                resp = "<p>Light not found ):</p>"
        sched.resume()
        return resp
Пример #11
0
                                    'Lifx: Brightness - {}'.format(brightness),
                                    (greenCenter[0] - 20, greenCenter[1] - 20),
                                    cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                                    (255, 255, 255), 2)

            # print(greenCArea)

            if greenCArea > 0:
                prev_state = state
                state = 'ON'
            else:
                prev_state = state
                state = 'OFF'

            if state == 'ON' and prev_state == 'OFF':
                light.set_power("on")
            if state == 'OFF' and prev_state == 'ON':
                light.set_power("off")

            # Control brightness using Stack
            if greenCArea > 6480 or greenCCount > 1:
                brightness_Deque.append(
                    scaleValue(greenCArea, 0, 100, 0, 25000))
                current_brightness = max(brightness_Deque)
                if current_brightness > 100:
                    current_brightness = 100
                elif current_brightness < 0:
                    current_brightness = 0
                brightness = current_brightness
                if math.fabs(current_brightness - prev_brightness) > 2:
                    prev_brightness = current_brightness
Пример #12
0
try:
    print("Starting LiPiSwitch for the light named", lightname, "...")
    print("")
    print("lifXbutton Ready ...")
    print("")

    # Loop until user quits with CTRL-C
    while True:

        # If the Button is triggered
        if button.is_pressed and previousstate == 0:
            print("Button Pressed - Turning Light ON")

            # LifxLAN light details
            r = lifxlan.set_power("on")
            h = lifxlan.set_brightness(
                "65535")  #Set the light to full brightness
            g = lifxlan.set_color(WHITE)  #Set the light to daylight

            # Record new previous state
            previousstate = 65535

            #Wait 3 seconds before looping again
            print("Waiting 3 seconds")
            time.sleep(3)
            print("")
            print("Ready")
            print("")

        elif button.is_held: