kivy
Micke Nordin 6 months ago
parent 9d3856f91b
commit 26bbaf3aa4

@ -1,15 +1,17 @@
from logging import disable from logging import disable
import kivy import kivy
kivy.require('2.2.1') kivy.require('2.2.1')
from kivy.app import App from kivy.app import App
from kivy.uix.boxlayout import BoxLayout from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button, ColorProperty from kivy.uix.button import Button
from kivy.uix.label import Label from kivy.uix.label import Label
from kivy.uix.popup import Popup
from kivy.uix.screenmanager import Screen, ScreenManager from kivy.uix.screenmanager import Screen, ScreenManager
from src.tinge import HueBridge, Tinge from src.tinge import HueBridge, HueUtils, Tinge
class HueApp(App): class HueApp(App):
@ -17,30 +19,79 @@ class HueApp(App):
def build(self): def build(self):
self.tinge = Tinge() self.tinge = Tinge()
sm = ScreenManager() sm = ScreenManager()
sm.add_widget(BridgeScreen(self.tinge)) sm.add_widget(BridgeScreen(sm, self.tinge, name='bridge_screen'))
return sm return sm
class SingleBridgeScreen(Screen):
def __init__(self, sm, tinge, bridge: HueBridge, **kwargs):
super(SingleBridgeScreen, self).__init__(**kwargs)
self.sm = sm
self.tinge = tinge
self.bridge = bridge
self.layout = BoxLayout()
self.add_widget(self.layout)
self.set_group_buttons()
def set_group_buttons(self):
for group in self.bridge.get_groups():
button = Button(
text=str(group),
size_hint=(1, 0.1),
on_press=lambda button: self.press_button(button, group))
self.layout.add_widget(button)
def press_button(self, light, button):
print(light)
class BridgeScreen(Screen): class BridgeScreen(Screen):
bridges = [] bridges = []
layout = BoxLayout() layout = BoxLayout()
def __init__(self, tinge, **kwargs): def __init__(self, sm, tinge, **kwargs):
super(BridgeScreen, self).__init__(**kwargs) super(BridgeScreen, self).__init__(**kwargs)
self.sm = sm
self.tinge = tinge self.tinge = tinge
for bridge_button in self.set_bridge_buttons(): for bridge_button in self.set_bridge_buttons():
self.layout.add_widget(bridge_button) self.layout.add_widget(bridge_button)
def press_button(self, bridge, button): def press_button(self, bridge, button):
print(bridge.get_ipaddress()) self.sm.add_widget(
SingleBridgeScreen(self.sm,
self.tinge,
bridge,
name='single_bridge'))
self.sm.current = 'single_bridge'
def manually_add(self, button): def discover_bridge(self, button):
bridges = self.tinge.discover_new_bridges() bridges = self.tinge.discover_new_bridges()
if bridges: if bridges:
for bridge in bridges: for bridge in bridges:
if not bridge in self.tinge.get_bridges(): print(bridge)
self.tinge.append_bridge(bridge) if not self.tinge.bridge_discovered(bridge['ipaddress']):
# Display popup lable to add bridge and get username
popup = Popup(title='Connect Bridge',
size_hint=(None, None),
size=(400, 400))
new_bridge_button = Button(
text='Press button on Bridge',
size_hint=(1, 0.1),
on_press=lambda button: self.wait_for_button_press(
button, popup, bridge['ipaddress']))
popup.add_widget(new_bridge_button)
popup.open()
def wait_for_button_press(self, button, popup, ipaddress):
user_or_error = HueUtils.connect(ipaddress)
while user_or_error.is_error():
user_or_error = HueUtils.connect(ipaddress)
self.tinge.append_bridge(
HueBridge(ipaddress, user_or_error.get_user(), ipaddress))
self.tinge.write_all_bridges_to_conf()
popup.dismiss()
def set_bridge_buttons(self): def set_bridge_buttons(self):
buttons = [] buttons = []
@ -54,9 +105,9 @@ class BridgeScreen(Screen):
bridge_button = Button( bridge_button = Button(
text='Discover Bridges', text='Discover Bridges',
size_hint=(1, 0.1), size_hint=(1, 0.1),
on_press=lambda button: self.manually_add(button)) on_press=lambda button: self.discover_bridge(button))
buttons.append(bridge_button) buttons.append(bridge_button)
sizer = Label(disabled = True) sizer = Label(disabled=True)
buttons.append(sizer) buttons.append(sizer)
return buttons return buttons

@ -72,6 +72,14 @@ class HueLight:
""" """
return self.m_hue return self.m_hue
def get_name(self) -> str:
"""Get the name of the light
Returns:
str: Name of the light
"""
return self.m_name
def get_sat(self): def get_sat(self):
"""Get current saturation of the light """Get current saturation of the light

@ -85,6 +85,15 @@ class Tinge:
""" """
return self.m_bridges return self.m_bridges
def bridge_discovered(self, ipaddress: str) -> bool:
"""
Check if a bridge has been discovered
"""
for bridge in self.m_bridges:
if bridge.ipaddress == ipaddress:
return True
return False
def read_bridges_from_file(self) -> None: def read_bridges_from_file(self) -> None:
"""Read config file and add back previously discovered bridges """Read config file and add back previously discovered bridges
""" """

Loading…
Cancel
Save