#-*- coding: utf-8 -*- ###### Skript für eine Lichtuhr mit 6 Lampen ###### # # # # # # #Diese Zwei Packete brauchen wir um auf die Lampen bzw. die aktuelle Zeit zuzugreifen import requests import time # 30 s warten damit der Server für die Lampen hochfahren kann time.sleep(30) # Definitionen und Initialisieren der Variablen minute = 0 hour = 0 sek = 0 counter = 0 sek_old = 0 day = False max_bright = 254 # Definitionen der Farben # Die Farbe ergibt sich aus der Kodierung im x-y-Farbraum (siehe Google) # Hilfsfarben aus = {"on":False} test = {"on":True,"xy":[0.15, 0.1], "bri":max_bright/2.0, "sat":254, "transitiontime":1} # Helle Farben rot = {"on":True,"xy":[0.68, 0.3], "bri":max_bright, "sat":254, "transitiontime":1} #0 blau = {"on":True,"xy":[0.15, 0.1], "bri":max_bright, "sat":254, "transitiontime":1} #1 orange = {"on":True,"xy":[0.65, 0.6], "bri":max_bright, "sat":254, "transitiontime":1} #2 gruen = {"on":True,"xy":[0.15, 0.6], "bri":max_bright, "sat":254, "transitiontime":1} #3 gelb = {"on":True,"xy":[0.55, 0.45], "bri":max_bright, "sat":254, "transitiontime":1} #4 magenta = {"on":True,"xy":[0.45, 0.1], "bri":max_bright, "sat":254, "transitiontime":1} #5 tuerkis = {"on":True,"xy":[0.3, 0.7], "bri":max_bright, "sat":254, "transitiontime":1} #6 hellblau = {"on":True,"xy":[0.23, 0.25], "bri":max_bright, "sat":254, "transitiontime":1} #7 rosa = {"on":True,"xy":[0.5, 0.4], "bri":max_bright, "sat":254, "transitiontime":1} #8 kalt_weiss = {"on":True,"xy":[0.35, 0.4], "bri":max_bright, "sat":254, "transitiontime":1} #9 # Gedimmte Farben l_rot = {"on":True,"xy":[0.68, 0.3], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #0 l_blau = {"on":True,"xy":[0.15, 0.1], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #1 l_orange = {"on":True,"xy":[0.65, 0.6], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #2 l_gruen = {"on":True,"xy":[0.15, 0.6], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #3 l_gelb = {"on":True,"xy":[0.55, 0.45], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #4 l_magenta = {"on":True,"xy":[0.45, 0.1], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #5 l_tuerkis = {"on":True,"xy":[0.3, 0.7], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #6 l_hellblau = {"on":True,"xy":[0.23, 0.25], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #7 l_rosa = {"on":True,"xy":[0.5, 0.4], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #8 l_kalt_weiss = {"on":True,"xy":[0.35, 0.4], "bri":max_bright/2.0, "sat":254, "transitiontime":1} #9 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ANPASSUNG # # # # # # # # # # # # # # # # # # # # # # # # # # # # # id_code = 'Jbm8vfGesfxyX46q' # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ## Skriptteil um Informationen über den aktuellen Status der Lampen zu bekommen # bei Bedarf Kommentare entfernen #resp = requests.get('http://127.0.0.1:80/api/' + id_code + '/lights/1/') # Nummer hinter "lights/" anpassen, um auf andere Lampen zuzugreifen #print resp.json() # schwer zu lesen # Die Funktion setColor verwaltet die Anteuerung der Lampen. Sie erhält als Parameter die Lampen-Nummer (lampNo), siehe dazu unten mehr, # sowie die Kodierung für die Farben (colorNo), jeweils als Integer Wert def setColor(lampNo, colorNo): if colorNo == 0: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=rot if day else l_rot) if colorNo == 1: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=blau if day else l_blau) if colorNo == 2: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=orange if day else l_orange) if colorNo == 3: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=gruen if day else l_gruen) if colorNo == 4: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=gelb if day else l_gelb) if colorNo == 5: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=magenta if day else l_magenta) if colorNo == 6: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=tuerkis if day else l_tuerkis) if colorNo == 7: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=hellblau if day else l_hellblau) if colorNo == 8: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=rosa if day else l_rosa) if colorNo == 9: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=kalt_weiss if day else l_kalt_weiss) if colorNo == -1: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=aus) if colorNo == -2: resp = requests.put('http://127.0.0.1:80/api/' + id_code + '/lights/' + str(lampNo) + '/state', json=test) ## While Schleife, die kurz vor Mitternacht abbricht, da dann das Skript neu gestartet wird while not(hour == 23 and minute == 59 and sek == 50): # eine kleine Verzögerung, um das Skript zu takten time.sleep(0.01) # die aktuelle Zeit einlesen now = time.localtime() sek = now.tm_sec minute = now.tm_min hour = now.tm_hour # Die dezimalen Zifferns für jeweils Sekunde Minute und Stunde werden aus der eingelesenen Zeit berechnet # Die Operation % ist die Modulo-Rechnung # Der Operator / ist die Division # der Befehl int() garantiert Ganze Zahlen für die Sekunden sek1 = int(sek%10) sek10 = int(sek/10) min1 = minute%10 min10 = minute/10 hour1 = hour%10 hour10 = hour/10 # Die hier verwendete Zuordnung zwischen Lampen und Zeit-Stelle ist wie folgt gewählt: # # Lampen (lampNo) # 1 = 1-er Stelle Sekunden # 2 = 10-er Stelle Sekunden # 3 = 1-er Stelle Minuten # 4 = 10-er Stelle Minuten # 5 = 1-er Stelle Stunden # 6 = 10-er Stelle Stunden # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ANPASSUNG # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # je nach Anordnung der Lampen und der Reihenfolge, in der Sie erkannt werden, kann es sein, dass die obige Zuordnung angepasst werden muss # dazu müssen die Zahlenwerte der lampNo in den setColor(lampNo, colorNo) Befehlen (unten) geändert werden. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Die Dimmfunktion ist morgens und abends dunkler und tagsüber heller, sodass die Farben stets gut zu erkennen sind. dim_early = 6 main_early = 8 main_late = 19 dim_late = 22 # zwischen dim_early und main_early sowie zwischen main_late und dim_late ist die Lampe gedimmt # zwischen main_early und main_late besitzen die Lampen die Maximale Helligkeit # außerhalb dieses Zeitraums ist die Lichtuhr ausgeschaltet # die Zahlenwerte können angepasst werden, solange sie weiterhin aufsteigend bleiben von dim_early zu dim_late # nur wenn sich die Senkunde geänder hat brauchen die Lampen ihre Farbe zu ändern if sek != sek_old: if ((hour >= dim_early) and (hour < main_early)) or ((hour >= main_late) and (hour < dim_late)): day = False setColor(1,sek1) setColor(2,sek10) setColor(3,min1) setColor(4, min10) setColor(5, hour1) setColor(6, hour10) elif (hour >= main_early) and (hour < main_late): day = True setColor(1,sek1) setColor(2,sek10) setColor(3,min1) setColor(4, min10) setColor(5, hour1) setColor(6, hour10) else: day = False setColor(1,-1) setColor(2,-1) setColor(3,-1) setColor(4,-1) setColor(5,-1) setColor(6,-1) # alte Sekunde merken sek_old = sek