Loading GWalarm.kv 0 → 100644 +8 −0 Original line number Diff line number Diff line #:kivy 1.10.0 <MainButton@Button>: on_press:self.nav() <NestedBox@BoxLayout>: orientation: 'vertical' spacing:10 GWalarm.py 0 → 100644 +119 −0 Original line number Diff line number Diff line import kivy kivy.require('1.10.0') from kivy.app import App from kivy.uix.button import Button from kivy.uix.togglebutton import ToggleButton from kivy.uix.gridlayout import GridLayout from kivy.uix.image import Image from kivy.uix.slider import Slider from kivy.clock import Clock from kivy.uix.pagelayout import PageLayout from kivy.uix.gridlayout import GridLayout from kivy.uix.boxlayout import BoxLayout from kivy.uix.spinner import Spinner from kivy.uix.image import Image from kivy.uix.label import Label from kivy.uix.slider import Slider from kivy.clock import Clock from kivy.graphics import Color, Rectangle from kivy.properties import StringProperty from kivy.graphics.instructions import Callback from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition, SlideTransition import RPi.GPIO as GPIO from kivy.lang.builder import Builder from souptest import statusdetect Builder.load_file('GWalarm.kv',rulesonly=True) class MainButton(Button): def nav(self): app=App.get_running_app() if self.id=='history': app.root.current='history' elif self.id=='status': app.root.current='status' elif self.id=='main': app.root.current='main' class MainScreen(Screen): def __init__(self,**kwargs): super(MainScreen,self).__init__(**kwargs) layout=GridLayout(cols=2,rows=2,padding=30,spacing=30,row_default_height=150) with layout.canvas.before: Color(.2,.2,.2,1) self.rect=Rectangle(size=(800,600), pos=layout.pos) def exit(obj): App.get_running_app().stop() quitButton=Button(text='Quit') quitButton.bind(on_press=exit) self.add_widget(layout) ids=('history','status') texts=('Event History','Detector Status') for i in range(0,len(ids)): hbut = MainButton(text=texts[i],id=ids[i]) layout.add_widget(hbut) layout.add_widget(quitButton) class HistoryScreen(Screen): def __init__(self,**kwargs): super(HistoryScreen,self).__init__(**kwargs) button2 =MainButton(text='Main Menu',id='main') self.add_widget(button2) class NestedBox(BoxLayout): pass class DetLabel(Label): detname = StringProperty() detstat = NumericProperty() dettime = StringProperty() class StatusScreen(Screen): def __init__(self,**kwargs): super(StatusScreen,self).__init__(**kwargs) layout = GridLayout(cols=1,rows=2,spacing=30,padding=30,default_row_height=150) with layout.canvas.before: Color(.2,.2,.2,1) self.rect=Rectangle(size=(800,600),pos=layout.pos) #Clock.schedule_interval(statusdetect,60) self.add_widget(layout) detLay = NestedBox() det1layout = GridLayout(cols=3,spacing=10,padding=10) det2layout=GridLayout(cols=3,spacing=10,padding=10) det3layout=GridLayout(cols=3,spacing=10,padding=10) layout.add_widget(detLay) detLay.add_widget(det1layout) detLay.add_widget(det2layout) detLay.add_widget(det3layout) statids = ['test1','test2','test3'] (detectornames,statuses,detectortimes) = statusdetect( button3 = MainButton(text='Main Menu',id='main') layout.add_widget(button3) sm = ScreenManager() sm.add_widget(MainScreen(name='main')) sm.add_widget(HistoryScreen(name='history')) sm.add_widget(StatusScreen(name='status')) class MyApp(App): def build(self): return sm if __name__ == '__main__': MyApp().run() souptest.py 0 → 100644 +60 −0 Original line number Diff line number Diff line def statusdetect(): from bs4 import BeautifulSoup import requests import re import kivy url = "https://ldas-jobs.ligo.caltech.edu/~gwistat/gwistat/gwistat.html" r =requests.get(url) soup = BeautifulSoup(r.text,"lxml") def identifystring(line): result = re.search('>(.*)<',str(line)) return result.group(1) detectornames = [] detectortimes = [] for row in soup("td"): res = identifystring(row) if len(res) > 20 : continue for char in res: if char == '': if once == True: res = '' break once = 1 continue if char == '<': res='' break if char == ':': detectortimes.append(res) res='' break once = 0 finalcheck = ['Detector','Status','Duration',''] if res not in finalcheck: detectornames.append(res) statuses=[] for element in detectornames: if element == 'Observing': statuses.append(2) elif element == 'Down': statuses.append(0) else: statuses.append(1) return detectornames,statuses,detectortimes # obj.detectornames=detectornames # obj.statuses=statuses, # obj.detectortimes=detectortimes test2.py 0 → 100644 +208 −0 Original line number Diff line number Diff line import kivy kivy.require('1.0.6') # replace with your current kivy version ! from kivy.app import App from kivy.uix.button import Button from kivy.uix.togglebutton import ToggleButton from kivy.uix.gridlayout import GridLayout from kivy.uix.image import Image from kivy.uix.slider import Slider from kivy.clock import Clock from kivy.uix.pagelayout import PageLayout from kivy.uix.gridlayout import GridLayout from kivy.uix.spinner import Spinner from kivy.uix.image import Image from kivy.uix.label import Label from kivy.uix.slider import Slider from kivy.clock import Clock from kivy.graphics import Color, Rectangle from kivy.properties import StringProperty from kivy.graphics.instructions import Callback from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition, SlideTransition import RPi.GPIO as GPIO #GPIO redledPin=23 grnledPin=22 switchPin=27 buttonPin=4 buzzerPin=17 GPIO.setmode(GPIO.BCM) GPIO.setup(redledPin,GPIO.OUT) GPIO.output(redledPin,GPIO.LOW) GPIO.setup(grnledPin,GPIO.OUT) GPIO.output(grnledPin,GPIO.LOW) GPIO.setup(switchPin,GPIO.IN,pull_up_down=GPIO.PUD_DOWN) GPIO.setup(buttonPin,GPIO.IN,pull_up_down=GPIO.PUD_DOWN) GPIO.setup(buzzerPin,GPIO.OUT) GPIO.output(buzzerPin,GPIO.LOW) def press_callback(obj): if obj.state == "down": #print("button on") GPIO.output(redledPin,GPIO.HIGH) GPIO.output(grnledPin,GPIO.LOW) else: #print("button off") GPIO.output(redledPin,GPIO.LOW) GPIO.output(grnledPin,GPIO.HIGH) def end_app(obj): GPIO.cleanup() print("clean") App.get_running_app().stop() def detectorUpdate(obj,text): if text=='on': GPIO.output(grnledPin,GPIO.HIGH) GPIO.output(redledPin,GPIO.LOW) elif text == 'no data': GPIO.output(grnledPin,GPIO.LOW) GPIO.output(redledPin,GPIO.HIGH) elif text == 'off': GPIO.output(grnledPin,GPIO.LOW) GPIO.output(redledPin,GPIO.LOW) class switchLabel(Label): def start(self): with self.canvas.before: self.col=Color(0,0,1,1) self.rec=Rectangle(pos=(400,300)) Clock.schedule_interval(self.switch_callback,0.1) def switch_callback(self,dt): if GPIO.input(switchPin): #print("lever off") #self.canvas.remove(Color) #self.canvas.remove(Rectangle) self.canvas.clear() with self.canvas: self.col=Color(0,1,0,1) self.rec=Rectangle(pos=(400,300)) else: #print("lever on") #self.canvas.remove(self.col) #self.canvas.remove(self.rec) self.canvas.clear() with self.canvas: self.col=Color(1,0,0,1) self.rect=Rectangle(pos=(400,300)) class FirstScreen(Screen): def __init__(self,**kwargs): super(FirstScreen,self).__init__(**kwargs) layout = GridLayout(cols=3,rows=2,spacing=30,padding=30,row_default_height=150) with layout.canvas.before: Color(.2,.2,.2,1) self.rect=Rectangle(size=(800,600), pos=layout.pos) self.add_widget(layout) Ledbutton = ToggleButton(text="led") Ledbutton.bind(on_press=press_callback) detectorStatus = Spinner(text='off',values=('on','no data', 'off'),size_hint=(None,None),size=(100,44)) detectorStatus.bind(text=detectorUpdate) quitButton = Button(text="quit") quitButton.bind(on_press=end_app) switchStatus = switchLabel(text="Switch") switchStatus.start() def transition2(obj): self.manager.transition=SlideTransition() self.manager.current='test2' self.manager.transition.direction='left' changescreenButton= Button(text="Screen 2") changescreenButton.bind(on_press=transition2) def buzz(obj): if obj.state=='down': print("on") #GPIO.output(buzzerPin,GPIO.HIGH) #obj.p = GPIO.PWM(buzzerPin,5000) obj.p.start(50.0) else: obj.p.stop() #GPIO.output(buzzerPin,GPIO.LOW) buzzButton=ToggleButton(text='Buzzer') buzzButton.bind(on_press=buzz) buzzButton.p=GPIO.PWM(buzzerPin,4500) layout.add_widget(Ledbutton) layout.add_widget(detectorStatus) layout.add_widget(switchStatus) layout.add_widget(quitButton) layout.add_widget(changescreenButton) layout.add_widget(buzzButton) class SecondScreen(Screen): def __init__(self,**kwargs): super(SecondScreen,self).__init__(**kwargs) layout=PageLayout() def transitiontest(obj): self.manager.transition=SlideTransition() self.manager.current='test' self.manager.transition.direction='left' self.add_widget(layout) bio = 'LIGO INFO HERE text text texttext text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text ' label1=Label(text=bio,text_size=(layout.width,None),size_hint_y=None) button1=Button(text="Back to Screen 1") button1.bind(on_press=transitiontest) layout.add_widget(label1) layout.add_widget(button1) sm = ScreenManager() sm.add_widget(FirstScreen(name='test')) sm.add_widget(SecondScreen(name='test2')) class MyApp(App): def menu_callback(obj,dt): if GPIO.input(buttonPin): sm.transition=FadeTransition() sm.current='test' return else: return def build(self): # layout = GridLayout(cols=2,rows=2,spacing=30,padding=30,row_default_height=150) # # with layout.canvas.before: # Color(.2,.2,.2,1) # self.rect=Rectangle(size=(800,600), pos=layout.pos) # # Ledbutton = ToggleButton(text="led") # Ledbutton.bind(on_press=press_callback) # # detectorStatus = Spinner(text='off',values=('on','no data', 'off'),size_hint=(None,None),size=(100,44)) # detectorStatus.bind(text=detectorUpdate) # # quitButton = Button(text="quit") # quitButton.bind(on_press=end_app) # # switchStatus = switchLabel(text="Switch") # switchStatus.start() # layout.add_widget(Ledbutton) # layout.add_widget(detectorStatus) # layout.add_widget(switchStatus) # layout.add_widget(quitButton) Clock.schedule_interval(self.menu_callback,1/50) return sm if __name__ == '__main__': MyApp().run() Loading
GWalarm.kv 0 → 100644 +8 −0 Original line number Diff line number Diff line #:kivy 1.10.0 <MainButton@Button>: on_press:self.nav() <NestedBox@BoxLayout>: orientation: 'vertical' spacing:10
GWalarm.py 0 → 100644 +119 −0 Original line number Diff line number Diff line import kivy kivy.require('1.10.0') from kivy.app import App from kivy.uix.button import Button from kivy.uix.togglebutton import ToggleButton from kivy.uix.gridlayout import GridLayout from kivy.uix.image import Image from kivy.uix.slider import Slider from kivy.clock import Clock from kivy.uix.pagelayout import PageLayout from kivy.uix.gridlayout import GridLayout from kivy.uix.boxlayout import BoxLayout from kivy.uix.spinner import Spinner from kivy.uix.image import Image from kivy.uix.label import Label from kivy.uix.slider import Slider from kivy.clock import Clock from kivy.graphics import Color, Rectangle from kivy.properties import StringProperty from kivy.graphics.instructions import Callback from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition, SlideTransition import RPi.GPIO as GPIO from kivy.lang.builder import Builder from souptest import statusdetect Builder.load_file('GWalarm.kv',rulesonly=True) class MainButton(Button): def nav(self): app=App.get_running_app() if self.id=='history': app.root.current='history' elif self.id=='status': app.root.current='status' elif self.id=='main': app.root.current='main' class MainScreen(Screen): def __init__(self,**kwargs): super(MainScreen,self).__init__(**kwargs) layout=GridLayout(cols=2,rows=2,padding=30,spacing=30,row_default_height=150) with layout.canvas.before: Color(.2,.2,.2,1) self.rect=Rectangle(size=(800,600), pos=layout.pos) def exit(obj): App.get_running_app().stop() quitButton=Button(text='Quit') quitButton.bind(on_press=exit) self.add_widget(layout) ids=('history','status') texts=('Event History','Detector Status') for i in range(0,len(ids)): hbut = MainButton(text=texts[i],id=ids[i]) layout.add_widget(hbut) layout.add_widget(quitButton) class HistoryScreen(Screen): def __init__(self,**kwargs): super(HistoryScreen,self).__init__(**kwargs) button2 =MainButton(text='Main Menu',id='main') self.add_widget(button2) class NestedBox(BoxLayout): pass class DetLabel(Label): detname = StringProperty() detstat = NumericProperty() dettime = StringProperty() class StatusScreen(Screen): def __init__(self,**kwargs): super(StatusScreen,self).__init__(**kwargs) layout = GridLayout(cols=1,rows=2,spacing=30,padding=30,default_row_height=150) with layout.canvas.before: Color(.2,.2,.2,1) self.rect=Rectangle(size=(800,600),pos=layout.pos) #Clock.schedule_interval(statusdetect,60) self.add_widget(layout) detLay = NestedBox() det1layout = GridLayout(cols=3,spacing=10,padding=10) det2layout=GridLayout(cols=3,spacing=10,padding=10) det3layout=GridLayout(cols=3,spacing=10,padding=10) layout.add_widget(detLay) detLay.add_widget(det1layout) detLay.add_widget(det2layout) detLay.add_widget(det3layout) statids = ['test1','test2','test3'] (detectornames,statuses,detectortimes) = statusdetect( button3 = MainButton(text='Main Menu',id='main') layout.add_widget(button3) sm = ScreenManager() sm.add_widget(MainScreen(name='main')) sm.add_widget(HistoryScreen(name='history')) sm.add_widget(StatusScreen(name='status')) class MyApp(App): def build(self): return sm if __name__ == '__main__': MyApp().run()
souptest.py 0 → 100644 +60 −0 Original line number Diff line number Diff line def statusdetect(): from bs4 import BeautifulSoup import requests import re import kivy url = "https://ldas-jobs.ligo.caltech.edu/~gwistat/gwistat/gwistat.html" r =requests.get(url) soup = BeautifulSoup(r.text,"lxml") def identifystring(line): result = re.search('>(.*)<',str(line)) return result.group(1) detectornames = [] detectortimes = [] for row in soup("td"): res = identifystring(row) if len(res) > 20 : continue for char in res: if char == '': if once == True: res = '' break once = 1 continue if char == '<': res='' break if char == ':': detectortimes.append(res) res='' break once = 0 finalcheck = ['Detector','Status','Duration',''] if res not in finalcheck: detectornames.append(res) statuses=[] for element in detectornames: if element == 'Observing': statuses.append(2) elif element == 'Down': statuses.append(0) else: statuses.append(1) return detectornames,statuses,detectortimes # obj.detectornames=detectornames # obj.statuses=statuses, # obj.detectortimes=detectortimes
test2.py 0 → 100644 +208 −0 Original line number Diff line number Diff line import kivy kivy.require('1.0.6') # replace with your current kivy version ! from kivy.app import App from kivy.uix.button import Button from kivy.uix.togglebutton import ToggleButton from kivy.uix.gridlayout import GridLayout from kivy.uix.image import Image from kivy.uix.slider import Slider from kivy.clock import Clock from kivy.uix.pagelayout import PageLayout from kivy.uix.gridlayout import GridLayout from kivy.uix.spinner import Spinner from kivy.uix.image import Image from kivy.uix.label import Label from kivy.uix.slider import Slider from kivy.clock import Clock from kivy.graphics import Color, Rectangle from kivy.properties import StringProperty from kivy.graphics.instructions import Callback from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition, SlideTransition import RPi.GPIO as GPIO #GPIO redledPin=23 grnledPin=22 switchPin=27 buttonPin=4 buzzerPin=17 GPIO.setmode(GPIO.BCM) GPIO.setup(redledPin,GPIO.OUT) GPIO.output(redledPin,GPIO.LOW) GPIO.setup(grnledPin,GPIO.OUT) GPIO.output(grnledPin,GPIO.LOW) GPIO.setup(switchPin,GPIO.IN,pull_up_down=GPIO.PUD_DOWN) GPIO.setup(buttonPin,GPIO.IN,pull_up_down=GPIO.PUD_DOWN) GPIO.setup(buzzerPin,GPIO.OUT) GPIO.output(buzzerPin,GPIO.LOW) def press_callback(obj): if obj.state == "down": #print("button on") GPIO.output(redledPin,GPIO.HIGH) GPIO.output(grnledPin,GPIO.LOW) else: #print("button off") GPIO.output(redledPin,GPIO.LOW) GPIO.output(grnledPin,GPIO.HIGH) def end_app(obj): GPIO.cleanup() print("clean") App.get_running_app().stop() def detectorUpdate(obj,text): if text=='on': GPIO.output(grnledPin,GPIO.HIGH) GPIO.output(redledPin,GPIO.LOW) elif text == 'no data': GPIO.output(grnledPin,GPIO.LOW) GPIO.output(redledPin,GPIO.HIGH) elif text == 'off': GPIO.output(grnledPin,GPIO.LOW) GPIO.output(redledPin,GPIO.LOW) class switchLabel(Label): def start(self): with self.canvas.before: self.col=Color(0,0,1,1) self.rec=Rectangle(pos=(400,300)) Clock.schedule_interval(self.switch_callback,0.1) def switch_callback(self,dt): if GPIO.input(switchPin): #print("lever off") #self.canvas.remove(Color) #self.canvas.remove(Rectangle) self.canvas.clear() with self.canvas: self.col=Color(0,1,0,1) self.rec=Rectangle(pos=(400,300)) else: #print("lever on") #self.canvas.remove(self.col) #self.canvas.remove(self.rec) self.canvas.clear() with self.canvas: self.col=Color(1,0,0,1) self.rect=Rectangle(pos=(400,300)) class FirstScreen(Screen): def __init__(self,**kwargs): super(FirstScreen,self).__init__(**kwargs) layout = GridLayout(cols=3,rows=2,spacing=30,padding=30,row_default_height=150) with layout.canvas.before: Color(.2,.2,.2,1) self.rect=Rectangle(size=(800,600), pos=layout.pos) self.add_widget(layout) Ledbutton = ToggleButton(text="led") Ledbutton.bind(on_press=press_callback) detectorStatus = Spinner(text='off',values=('on','no data', 'off'),size_hint=(None,None),size=(100,44)) detectorStatus.bind(text=detectorUpdate) quitButton = Button(text="quit") quitButton.bind(on_press=end_app) switchStatus = switchLabel(text="Switch") switchStatus.start() def transition2(obj): self.manager.transition=SlideTransition() self.manager.current='test2' self.manager.transition.direction='left' changescreenButton= Button(text="Screen 2") changescreenButton.bind(on_press=transition2) def buzz(obj): if obj.state=='down': print("on") #GPIO.output(buzzerPin,GPIO.HIGH) #obj.p = GPIO.PWM(buzzerPin,5000) obj.p.start(50.0) else: obj.p.stop() #GPIO.output(buzzerPin,GPIO.LOW) buzzButton=ToggleButton(text='Buzzer') buzzButton.bind(on_press=buzz) buzzButton.p=GPIO.PWM(buzzerPin,4500) layout.add_widget(Ledbutton) layout.add_widget(detectorStatus) layout.add_widget(switchStatus) layout.add_widget(quitButton) layout.add_widget(changescreenButton) layout.add_widget(buzzButton) class SecondScreen(Screen): def __init__(self,**kwargs): super(SecondScreen,self).__init__(**kwargs) layout=PageLayout() def transitiontest(obj): self.manager.transition=SlideTransition() self.manager.current='test' self.manager.transition.direction='left' self.add_widget(layout) bio = 'LIGO INFO HERE text text texttext text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text ' label1=Label(text=bio,text_size=(layout.width,None),size_hint_y=None) button1=Button(text="Back to Screen 1") button1.bind(on_press=transitiontest) layout.add_widget(label1) layout.add_widget(button1) sm = ScreenManager() sm.add_widget(FirstScreen(name='test')) sm.add_widget(SecondScreen(name='test2')) class MyApp(App): def menu_callback(obj,dt): if GPIO.input(buttonPin): sm.transition=FadeTransition() sm.current='test' return else: return def build(self): # layout = GridLayout(cols=2,rows=2,spacing=30,padding=30,row_default_height=150) # # with layout.canvas.before: # Color(.2,.2,.2,1) # self.rect=Rectangle(size=(800,600), pos=layout.pos) # # Ledbutton = ToggleButton(text="led") # Ledbutton.bind(on_press=press_callback) # # detectorStatus = Spinner(text='off',values=('on','no data', 'off'),size_hint=(None,None),size=(100,44)) # detectorStatus.bind(text=detectorUpdate) # # quitButton = Button(text="quit") # quitButton.bind(on_press=end_app) # # switchStatus = switchLabel(text="Switch") # switchStatus.start() # layout.add_widget(Ledbutton) # layout.add_widget(detectorStatus) # layout.add_widget(switchStatus) # layout.add_widget(quitButton) Clock.schedule_interval(self.menu_callback,1/50) return sm if __name__ == '__main__': MyApp().run()