tinge/main.py

117 lines
3.7 KiB
Python
Raw Normal View History

2023-11-19 14:55:17 +01:00
from logging import disable
2023-11-26 23:44:48 +01:00
2023-11-18 20:38:49 +01:00
import kivy
kivy.require('2.2.1')
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
2023-11-26 23:44:48 +01:00
from kivy.uix.button import Button
2023-11-19 14:55:17 +01:00
from kivy.uix.label import Label
2023-11-26 23:44:48 +01:00
from kivy.uix.popup import Popup
2023-11-18 20:38:49 +01:00
from kivy.uix.screenmanager import Screen, ScreenManager
2023-11-26 23:44:48 +01:00
from src.tinge import HueBridge, HueUtils, Tinge
2023-11-18 20:38:49 +01:00
class HueApp(App):
def build(self):
self.tinge = Tinge()
sm = ScreenManager()
2023-11-26 23:44:48 +01:00
sm.add_widget(BridgeScreen(sm, self.tinge, name='bridge_screen'))
2023-11-18 20:38:49 +01:00
return sm
2023-11-26 23:44:48 +01:00
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)
2023-11-18 20:38:49 +01:00
class BridgeScreen(Screen):
bridges = []
layout = BoxLayout()
2023-11-26 23:44:48 +01:00
def __init__(self, sm, tinge, **kwargs):
2023-11-18 20:38:49 +01:00
super(BridgeScreen, self).__init__(**kwargs)
2023-11-26 23:44:48 +01:00
self.sm = sm
2023-11-18 20:38:49 +01:00
self.tinge = tinge
2023-11-19 14:55:17 +01:00
for bridge_button in self.set_bridge_buttons():
2023-11-18 20:38:49 +01:00
self.layout.add_widget(bridge_button)
def press_button(self, bridge, button):
2023-11-26 23:44:48 +01:00
self.sm.add_widget(
SingleBridgeScreen(self.sm,
self.tinge,
bridge,
name='single_bridge'))
self.sm.current = 'single_bridge'
2023-11-18 20:38:49 +01:00
2023-11-26 23:44:48 +01:00
def discover_bridge(self, button):
bridges = self.tinge.discover_new_bridges()
2023-11-18 20:38:49 +01:00
if bridges:
for bridge in bridges:
2023-11-26 23:44:48 +01:00
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()
2023-11-19 14:55:17 +01:00
def set_bridge_buttons(self):
buttons = []
bridges = self.tinge.get_bridges()
for bridge in bridges:
2023-11-18 20:38:49 +01:00
bridge_button = Button(
2023-11-19 14:55:17 +01:00
text=str(bridge.get_ipaddress()),
size_hint=(1, 0.1),
on_press=lambda button: self.press_button(bridge, button))
2023-11-18 20:38:49 +01:00
buttons.append(bridge_button)
2023-11-19 14:55:17 +01:00
bridge_button = Button(
text='Discover Bridges',
size_hint=(1, 0.1),
2023-11-26 23:44:48 +01:00
on_press=lambda button: self.discover_bridge(button))
2023-11-19 14:55:17 +01:00
buttons.append(bridge_button)
2023-11-26 23:44:48 +01:00
sizer = Label(disabled=True)
2023-11-19 14:55:17 +01:00
buttons.append(sizer)
2023-11-18 20:38:49 +01:00
return buttons
if __name__ == '__main__':
HueApp().run()