예제 #1
0
class Sample(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        self.nanoip = self.bot.nano_config['ipAddress']
        self.nanoauth = self.bot.nano_config['authToken']

        self.nanopanels = Nanoleaf(
            ip=self.bot.nano_config['ipAddress'],
            auth_token=self.bot.nano_config['authToken'],
            print_errors=True)

    @commands.Cog.listener()
    async def on_guild_join(self, guild):
        """
        This event receives the the guild when the bot joins.
        """
        print(f'Joined {guild.name} with {guild.member_count} users!')

    @commands.command()
    async def stop(self, ctx):
        """
        Kills the current server
        """
        await ctx.send('Bye!', delete_after=10)
        exit()

    @commands.group(invoke_without_command=True)
    async def foo(self, ctx: Context):
        """
        A sub command group, Showing how sub command groups can be made.
        """
        await ctx.send('try my subcommand')

    @foo.command(aliases=['an_alias'])
    async def bar(self, ctx: Context):
        """
        I have an alias!, I also belong to command 'foo'
        """
        await ctx.send('foo bar!')

    @commands.group(invoke_without_command=True)
    async def nano(self, ctx: Context):
        await ctx.send('Nanopanels command', delete_after=20)

    @nano.command()
    async def on(self, ctx: Context):
        """
        Turns the nanopanels on if they are off, otherwise does nothing
        """
        if not self.nanopanels.get_power():
            self.nanopanels.toggle_power()

        await ctx.send('Nanopanels on', delete_after=20)

    @nano.command()
    async def off(self, ctx: Context):
        """
        Turns the nanopanels off if they are on
        """
        if self.nanopanels.get_power():
            self.nanopanels.toggle_power()

        await ctx.send('Nanopanels off', delete_after=20)

    @nano.command()
    async def brightness(self, ctx: Context):
        """
        Set the nanopanels brightness, value must be between 0 and 100
        """
        args = ctx.message.content.split(' ')
        if len(args) < 3:
            await ctx.send('Error: must have a `brightness` value',
                           delete_after=10)

        brightness = int(args[2])
        duration = abs(int(args[3])) if len(args) >= 4 else 0

        if 0 <= brightness <= 100:
            self.nanopanels.set_brightness(brightness=brightness,
                                           duration=duration)
            await ctx.send(f'Set brightness to {brightness}', delete_after=10)
        else:
            await ctx.send('Invalid values', delete_after=10)

    @nano.command()
    async def effects(self, ctx: Context):
        """
        Displays available scenes
        """
        msg = ''
        for i, effect in enumerate(self.nanopanels.list_effects()):
            msg += f'{i+1}. {effect}\n'

        await ctx.send(f'```md\n{msg}```', delete_after=60)

    @nano.command()
    async def effect(self, ctx: Context):
        """
        Sets the provided effect
        """
        _, _, element_no = ctx.message.content.split(' ')
        element_no = int(element_no)
        effects = self.nanopanels.list_effects()

        # check for out of bounds
        if element_no > len(effects):
            return

        selected = effects[element_no - 1]
        if self.nanopanels.set_effect(selected):
            await ctx.send(f'Set effect `{selected}`', delete_after=20)
        else:
            await ctx.send(f'Error setting effect `{selected}`',
                           delete_after=10)

    @nano.command()
    async def info(self, ctx: Context):
        """
        Prints out information about the nanopanels in a readable format
        """
        # info to print: brightness, on/off state, current effect
        info = self.nanopanels.get_info()
        brightness = info['state']['brightness']['value']
        state = 'on' if info['state']['on']['value'] else 'off'
        effect = info['effects']['select']
        print(json.dumps(self.nanopanels.get_info(), indent=4))

        message = f'effect: `{effect}`\nbrightness: `{brightness}`\nstate: `{state}`'
        await ctx.send(message, delete_after=20)
예제 #2
0
class TestApp(App):
    def connect_nanoleaf(self, *args):
        try:
            self.nl = Nanoleaf('192.168.0.108')
            auth_token = 'authentication token'  #Real token was removed by authors for protecting security
            self.nl = Nanoleaf('192.168.0.108', auth_token)
        except Exception:
            content = GridLayout(cols=1)
            content.add_widget(Label(text='No valid nanoleaf device found'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def power_on(self, *args):
        try:
            self.nl.power_on()
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def power_off(self, *args):
        try:
            self.nl.power_off()
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def turn_up(self, *args):
        try:
            if self.nl.get_power() == True:
                self.nl.increment_brightness(10)
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def turn_down(self, *args):
        try:
            if self.nl.get_power() == True:
                if self.nl.get_brightness() > 0:
                    self.nl.set_brightness(self.nl.get_brightness() - 10)
                else:
                    self.nl.set_brightness(0)
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def set_color(self, *args):
        try:
            if self.nl.get_power() == True:
                content = GridLayout(cols=2)
                content_admit = Button(text='OK')
                content_cancel = Button(text='Cancel')
                self.content_input = TextInput(multiline=False)
                content.add_widget(Label(text='Please input color in R,G,B:'))
                content.add_widget(self.content_input)
                content.add_widget(content_admit)
                content.add_widget(content_cancel)
                popup = Popup(title='Message',
                              content=content,
                              auto_dismiss=False)
                content_cancel.bind(on_release=popup.dismiss)
                content_admit.bind(on_release=self.pressed)
                popup.open()
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def pressed(self, instance):
        color = self.content_input.text
        try:
            if color == 'RED':
                self.nl.set_color(RED)
            elif color == 'ORANGE':
                self.nl.set_color(ORANGE)
            elif color == 'YELLOW':
                self.nl.set_color(YELLOW)
            elif color == 'BLUE':
                self.nl.set_color(BLUE)
            elif color == 'GREEN':
                self.nl.set_color(GREEN)
            elif color == 'WHITE':
                self.nl.set_color(WHITE)
            elif color == 'LIGHT_BLUE':
                self.nl.set_color(LIGHT_BLUE)
            elif color == 'PINK':
                self.nl.set_color(PINK)
            elif color == 'PURPLE':
                self.nl.set_color(PURPLE)
            elif type(int(color.split(',')[0])) == int and type(int(color.split(',')[1])) == int and type(
                    int(color.split(',')[2])) == int and color.count(',') == 2 and \
                    (0 <= int(color.split(',')[0]) <= 255) == True and (
                    0 <= int(color.split(',')[1]) <= 255) == True and (0 <= int(color.split(',')[2]) <= 255) == True:
                self.nl.set_color(
                    (int(color.split(',')[0]), int(color.split(',')[1]),
                     int(color.split(',')[2])))

        except ValueError:
            content = GridLayout(cols=1)
            content.add_widget(Label(text='Please input valid numbers'))
            content_cancel = Button(text='OK')
            content.add_widget(content_cancel)
            popup = Popup(title='Warning', content=content, auto_dismiss=False)
            content_cancel.bind(on_release=popup.dismiss)
            popup.open()
        except IndexError:
            content = GridLayout(cols=1)
            content.add_widget(Label(text='Please input valid numbers'))
            content_cancel = Button(text='OK')
            content.add_widget(content_cancel)
            popup = Popup(title='Warning', content=content, auto_dismiss=False)
            content_cancel.bind(on_release=popup.dismiss)
            popup.open()

    def flash(self, *args):
        try:
            self.nl.identify()
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def random_color(self, *args):
        try:
            if self.nl.get_power() == True:
                R = random.randint(0, 255)
                G = random.randint(0, 255)
                B = random.randint(0, 255)
                self.nl.set_color((R, G, B))
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def on_value2(self, brightness):
        try:
            self.brightnessValue = "%d" % brightness
            self.nl.set_brightness(int(self.brightnessValue))
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def on_value1(self, hue):
        try:
            self.hueValue = "%d" % hue
            self.nl.set_hue(int(self.hueValue))
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def weatherControl(self):
        # self.state=active
        try:
            if self.aV1 == True and self.nl.get_power() == True:
                url = 'http://api.openweathermap.org/data/2.5/weather?id=5946768&appid=authentication token'  #Real token was removed by authors for protecting security
                json_data = requests.get(url).json()
                condition = json_data['weather'][0]['main']
                '''content=GridLayout(cols=1)
                content_admit=Button(text='OK')
                content.add_widget(Label(text='Weather is: '+condition))
                content.add_widget(content_admit)
                popup = Popup(title='Message',content=content,auto_dismiss=False)
                content_admit.bind(on_release=popup.dismiss)
                popup.open()'''
                if (condition == "Clear"):
                    self.sunny()
                elif (condition == "Clouds"):
                    self.cloudy()
                elif (condition == "Snow"):
                    self.snowy()
                elif (condition == "Rain"):
                    self.rainy()
                else:
                    pass
                t = Timer(5, self.weatherControl)
                t.start()
            else:
                t = Timer(5, self.weatherControl)
                t.cancel()

        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def sunControl(self):
        try:
            if self.aV3 == True:
                t1 = datetime.datetime.now()
                if t1.hour >= 8 and t1.hour <= 16:
                    self.nl.power_off()

                elif t1.hour == 7:
                    if t1.minute >= 40:
                        self.nl.power_off()
                    else:
                        self.nl.power_on()

                elif t1.hour == 17:
                    if t1.minute <= 45:
                        self.nl.power_off()
                    else:
                        self.nl.power_on()

                else:
                    self.nl.power_on()
                t = Timer(5, self.sunControl)
                t.start()

            else:
                # self.nl.power_off()
                t = Timer(5, self.sunControl)
                t.cancel()

        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def activeValue1(self, active):
        self.aV1 = active
        self.weatherControl()

    def activeValue2(self, active):
        self.aV2 = active
        self.tempControl()

    def activeValue3(self, active):
        self.aV3 = active
        self.sunControl()

    def activeValue4(self, active):
        self.aV4 = active
        self.sunLab()

    def activeValue5(self, active):
        self.aV5 = active
        self.sunBed()

    def activeValue6(self, active):
        self.aV6 = active
        self.sunLiving()

    def activeValue7(self, active):
        self.aV7 = active
        self.sunWhite()

    def activeValue8(self, active):
        self.aV8 = active
        self.weatherLab()

    def activeValue9(self, active):
        self.aV9 = active
        self.weatherBed()

    def activeValue10(self, active):
        self.aV10 = active
        self.weatherLiving()

    def activeValue11(self, active):
        self.aV11 = active
        self.weatherWhite()

    def activeValue12(self, active):
        self.aV12 = active
        self.geofencinglab()

    def activeValue13(self, active):
        self.aV13 = active
        self.geofencingBed()

    def activeValue14(self, active):
        self.aV14 = active
        self.geofencingLiving()

    def activeValue15(self, active):
        self.aV15 = active
        self.geofencingWhite()

    def activeValue16(self, active):
        self.aV16 = active
        self.musiclab()

    def activeValue17(self, active):
        self.aV17 = active
        self.labscreen()

    def activeValue18(self, active):
        self.aV18 = active
        self.musicbed()

    def activeValue19(self, active):
        self.aV19 = active
        self.bedscreen()

    def activeValue20(self, active):
        self.aV20 = active
        self.musicliving()

    def activeValue22(self, active):
        self.aV22 = active
        self.musicwhite()

    def activeValue23(self, active):
        self.aV23 = active
        self.on_checkbox_active()

    def musicbed(self):
        if self.aV18 == True:
            import lightningstrike

    def musiclab(self):
        if self.aV16 == True:
            import lightningstrike

    def labscreen(self):
        if self.aV17 == True:
            import screen

    def bedscreen(self):
        if self.aV19 == True:
            import screen

    def musicliving(self):
        if self.aV20 == True:
            import lightningstrike

    def musicwhite(self):
        if self.aV22 == True:
            import lightningstrike

    def geofencinglab(self):
        if self.aV12 == True:
            from geofencing import src
            import app

    def geofencingBed(self):
        if self.aV13 == True:
            from geofencing import src
            import app

    def geofencingLiving(self):
        if self.aV14 == True:
            from geofencing import src
            import app

    def geofencingWhite(self):
        if self.aV15 == True:
            from geofencing import src
            import app

    def sunLab(self):
        if self.aV4 == True:
            t1 = datetime.datetime.now()
            if t1.hour >= 8 and t1.hour <= 16:
                self.b.set_light(2, 'on', False)

            elif t1.hour == 7:
                if t1.minute >= 40:
                    self.b.set_light(2, 'on', False)
                else:
                    self.b.set_light(2, 'on', True)

            elif t1.hour == 17:
                if t1.minute <= 45:
                    self.b.set_light(2, 'on', False)
                else:
                    self.b.set_light(2, 'on', True)

            else:
                self.b.set_light(2, 'on', True)
            t = Timer(5, self.sunLab)
            t.start()

        else:

            t = Timer(5, self.sunLab)
            t.cancel()

    def weatherLab(self):
        if self.aV8 == True:
            import weather
            t = Timer(5, self.weatherLab)
            t.start()

        else:
            from phue import Bridge
            b = Bridge('192.168.0.13')
            b.set_light(2, 'on', False)

            t = Timer(5, self.weatherLab)
            t.cancel()

    def weatherBed(self):
        if self.aV9 == True:
            import weather
            t = Timer(5, self.weatherBed)
            t.start()

        else:

            from phue import Bridge
            b = Bridge('192.168.0.13')
            b.set_light(1, 'on', False)

            t = Timer(5, self.weatherLab)
            t.cancel()

            t = Timer(5, self.weatherBed)
            t.cancel()

    def weatherLiving(self):
        if self.aV10 == True:
            import weather
            t = Timer(5, self.weatherLiving)
            t.start()

        else:

            t = Timer(5, self.weatherLiving)
            t.cancel()

    def weatherWhite(self):
        if self.aV11 == True:
            import weather
            t = Timer(5, self.weatherWhite)
            t.start()

        else:

            t = Timer(5, self.weatherWhite)
            t.cancel()

    def sunBed(self):
        if self.aV5 == True:
            t1 = datetime.datetime.now()
            if t1.hour >= 8 and t1.hour <= 16:
                self.b.set_light(1, 'on', False)

            elif t1.hour == 7:
                if t1.minute >= 40:
                    self.b.set_light(1, 'on', False)
                else:
                    self.b.set_light(1, 'on', True)

            elif t1.hour == 17:
                if t1.minute <= 45:
                    self.b.set_light(1, 'on', False)
                else:
                    self.b.set_light(1, 'on', True)

            else:
                self.b.set_light(1, 'on', True)
            t = Timer(5, self.sunBed)
            t.start()

        else:

            t = Timer(5, self.sunBed)
            t.cancel()

    def sunLiving(self):
        if self.aV6 == True:
            t1 = datetime.datetime.now()
            if t1.hour >= 8 and t1.hour <= 16:
                self.b.set_light(3, 'on', False)

            elif t1.hour == 7:
                if t1.minute >= 40:
                    self.b.set_light(3, 'on', False)
                else:
                    self.b.set_light(3, 'on', True)

            elif t1.hour == 17:
                if t1.minute <= 45:
                    self.b.set_light(3, 'on', False)
                else:
                    self.b.set_light(3, 'on', True)

            else:
                self.b.set_light(3, 'on', True)
            t = Timer(5, self.sunLiving)
            t.start()

        else:

            t = Timer(5, self.sunLiving)
            t.cancel()

    def sunWhite(self):
        if self.aV7 == True:
            t1 = datetime.datetime.now()
            if t1.hour >= 8 and t1.hour <= 16:
                self.b.set_light(4, 'on', False)

            elif t1.hour == 7:
                if t1.minute >= 40:
                    self.b.set_light(4, 'on', False)
                else:
                    self.b.set_light(4, 'on', True)

            elif t1.hour == 17:
                if t1.minute <= 45:
                    self.b.set_light(4, 'on', False)
                else:
                    self.b.set_light(4, 'on', True)

            else:
                self.b.set_light(4, 'on', True)
            t = Timer(5, self.sunWhite)
            t.start()

        else:

            t = Timer(5, self.sunWhite)
            t.cancel()

    def snowy(self):
        self.nl.set_color(WHITE)
        return

    def rainy(self):
        self.nl.set_color((30, 144, 255))
        return

    def sunny(self):
        self.nl.set_color((ORANGE))
        return

    def cloudy(self):
        self.nl.set_color((135, 206, 235))
        return

    def tempControl(self):
        try:
            if self.aV2 == True and self.nl.get_power() == True:
                url = 'http://api.openweathermap.org/data/2.5/weather?id=5946768&appid=authentication token'  #Real token was removed by authors for protecting security
                json_data = requests.get(url).json()
                temp = json_data['main']['temp']
                cel = float(temp) - 273.15
                '''content=GridLayout(cols=1)
                content_admit=Button(text='OK')
                content.add_widget(Label(text='Temperature is: '+str(cel)+'°C'))
                content.add_widget(content_admit)
                popup = Popup(title='Message',content=content,auto_dismiss=False)
                content_admit.bind(on_release=popup.dismiss)
                popup.open()'''
                if (temp >= 303.15):
                    self.extreme()
                elif (temp >= 293.15 and temp < 303.15):
                    self.hot()
                elif (temp >= 283.15 and temp < 293.15):
                    self.medium()
                elif (temp >= 273.15 and temp < 283.15):
                    self.chilly()
                elif (temp >= 263.15 and temp < 273.15):
                    self.cold()
                elif (temp >= 253.15 and temp < 263.15):
                    self.freezing()
                else:
                    pass
                t = Timer(5, self.tempControl)
                t.start()
            else:
                t = Timer(5, self.tempControl)
                t.cancel()
        except AttributeError:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to nanoleaf at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def extreme(self):
        self.nl.set_color(RED)
        return

    def hot(self):
        self.nl.set_color(ORANGE)
        return

    def medium(self):
        self.nl.set_color(YELLOW)
        return

    def chilly(self):
        self.nl.set_color(GREEN)
        return

    def cold(self):
        self.nl.set_color((0, 255, 255))
        return

    def freezing(self):
        self.nl.set_color(BLUE)
        return

    def on_value3(self, brightness):
        self.labValue = "%d" % brightness
        self.b.set_light(2, 'bri', int(self.labValue))

    def on_value4(self, brightness):
        self.bedValue = "%d" % brightness
        self.b.set_light(1, 'bri', int(self.bedValue))

    def on_value5(self, brightness):
        self.livingValue = "%d" % brightness
        self.b.set_light(3, 'bri', int(self.livingValue))

    def on_value6(self, brightness):
        self.whiteValue = "%d" % brightness
        self.b.set_light(4, 'bri', int(self.whiteValue))

    def lab_on(self, *args):
        try:
            self.b.set_light(2, 'on', True)
        except phue.PhueRequestTimeout:
            content = GridLayout(cols=1)
            content.add_widget(
                Label(text='Please connect to philips  at first'))
            content_admit = Button(text='OK')
            content.add_widget(content_admit)
            popup = Popup(title='Message', content=content, auto_dismiss=False)
            content_admit.bind(on_release=popup.dismiss)
            popup.open()

    def lab_off(self, *args):
        self.b.set_light(2, 'on', False)

    def lab_up(self, *args):
        brightness = self.b.get_light(2, 'bri')
        if self.b.get_light(2, 'on') == True and brightness < 238:
            self.b.set_light(2, 'bri', brightness + 17)

    def lab_down(self, *args):
        brightness = self.b.get_light(2, 'bri')
        if self.b.get_light(2, 'on') == True and brightness > 17:
            self.b.set_light(2, 'bri', brightness - 17)

    def bed_on(self, *args):
        self.b.set_light(1, 'on', True)

    def bed_off(self, *args):
        self.b.set_light(1, 'on', False)

    def bed_up(self, *args):
        brightness = self.b.get_light(1, 'bri')
        if self.b.get_light(1, 'on') == True and brightness < 238:
            self.b.set_light(1, 'bri', brightness + 17)

    def bed_down(self, *args):
        brightness = self.b.get_light(1, 'bri')
        if self.b.get_light(1, 'on') == True and brightness > 17:
            self.b.set_light(1, 'bri', brightness - 17)

    def living_on(self, *args):
        self.b.set_light(3, 'on', True)

    def living_off(self, *args):
        self.b.set_light(3, 'on', False)

    def living_up(self, *args):
        brightness = self.b.get_light(1, 'bri')
        if self.b.get_light(3, 'on') == True and brightness < 238:
            self.b.set_light(3, 'bri', brightness + 17)

    def living_down(self, *args):
        brightness = self.b.get_light(3, 'bri')
        if self.b.get_light(3, 'on') == True and brightness > 17:
            self.b.set_light(3, 'bri', brightness - 17)

    def white_on(self, *args):
        self.b.set_light(4, 'on', True)

    def white_off(self, *args):
        self.b.set_light(4, 'on', False)

    def white_up(self, *args):
        brightness = self.b.get_light(4, 'bri')
        if self.b.get_light(4, 'on') == True and brightness < 238:
            self.b.set_light(4, 'bri', brightness + 17)

    def white_down(self, *args):
        brightness = self.b.get_light(4, 'bri')
        if self.b.get_light(4, 'on') == True and brightness > 17:
            self.b.set_light(4, 'bri', brightness - 17)

    def connect_hue(self, *args):
        self.b = Bridge('192.168.0.13')

    def callback1(self, *args):
        self.disabled = False

    def build(self):
        return Builder.load_string(kv)