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

@ -1,15 +1,17 @@
from logging import disable
import kivy
kivy.require('2.2.1')
from kivy.app import App
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.popup import Popup
from kivy.uix.screenmanager import Screen, ScreenManager
from src.tinge import HueBridge, Tinge
from src.tinge import HueBridge, HueUtils, Tinge
class HueApp(App):
@ -17,30 +19,79 @@ class HueApp(App):
def build(self):
self.tinge = Tinge()
sm = ScreenManager()
sm.add_widget(BridgeScreen(self.tinge))
sm.add_widget(BridgeScreen(sm, self.tinge, name='bridge_screen'))
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):
bridges = []
layout = BoxLayout()
def __init__(self, tinge, **kwargs):
def __init__(self, sm, tinge, **kwargs):
super(BridgeScreen, self).__init__(**kwargs)
self.sm = sm
self.tinge = tinge
for bridge_button in self.set_bridge_buttons():
self.layout.add_widget(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):
bridges = self.tinge.discover_new_bridges()
def discover_bridge(self, button):
bridges = self.tinge.discover_new_bridges()
if bridges:
for bridge in bridges:
if not bridge in self.tinge.get_bridges():
self.tinge.append_bridge(bridge)
print(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):
buttons = []
@ -54,9 +105,9 @@ class BridgeScreen(Screen):
bridge_button = Button(
text='Discover Bridges',
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)
sizer = Label(disabled = True)
sizer = Label(disabled=True)
buttons.append(sizer)
return buttons

@ -72,6 +72,14 @@ class HueLight:
"""
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):
"""Get current saturation of the light

@ -85,6 +85,15 @@ class Tinge:
"""
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:
"""Read config file and add back previously discovered bridges
"""

Loading…
Cancel
Save