| 
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -29,7 +29,6 @@ CONFIG = load_config()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				LED_COUNT = 60      # Number of LED pixels.
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				LED_PIN = board.D18      # GPIO pin connected to the pixels (must support PWM!).
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				LED_PIXEL_ORDER = neopixel.GRB   # Strip type and colour ordering
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				LED_BRIGHTNESS = 0.05
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# Zahl stellt den Wert in Minuten dar, wie lange kein Gerät erreichbar sein darf dass die Uhr "abgeschalten" wird
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				ABSCHALTWERT = 4
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -51,13 +50,20 @@ stdliste = [std0, std1, std2, std3, std4, std5, std6, std7, std8, std9, std10, s
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				class Uhr:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def __init__(self, pixels):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def __init__(self, pixels, mode):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.helligkeit = pixels.brightness
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.pixels = pixels
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.helligkeit_geaendert = None
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.mode = mode
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._rgb_leer = None
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._rgb_sekunde = None
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._rgb_minute = None
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._rgb_stunde = None
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def set_helligkeit(self, helligkeit):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.helligkeit = helligkeit
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.pixels.brightness = self.helligkeit
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.helligkeit_geaendert = datetime.datetime.now()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def helligkeit_erhoehen(self):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.helligkeit += 0.05
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -71,6 +77,18 @@ class Uhr:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            self.helligkeit = 1
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self.set_helligkeit(self.helligkeit)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    def rgb_farben_lesen(self):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._rgb_leer = CONFIG["mode"][self.mode]["leer"]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._rgb_sekunde = CONFIG["mode"][self.mode]["sekunde"]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._rgb_minute = CONFIG["mode"][self.mode]["minute"]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        self._rgb_stunde = CONFIG["mode"][self.mode]["stunde"]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        rgbconf = {"rgb_leer": self._rgb_leer, "rgb_s": self._rgb_sekunde, "rgb_min": self._rgb_minute,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                   "rgb_std": self._rgb_stunde}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        print("In der Klasse:")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        print(rgbconf)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return rgbconf
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# GPIO
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				I_MODE_TASTER = gpiozero.Button(3)
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -78,17 +96,10 @@ I_PLUS_TASTER = gpiozero.Button(4)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				I_MINUS_TASTER = gpiozero.Button(17)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# # # # # # # # # #
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# Funktionen
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# # # # # # # # # #
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# Farbkonfiguration
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				def rgb_standard():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    rgb_leer = [0, 0, 0]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    rgb_s = [0, 180, 0]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    rgb_min = [32, 178, 170]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    rgb_std = [255, 0, 255]
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    rgbconf = {"rgb_leer": rgb_leer, "rgb_s": rgb_s, "rgb_min": rgb_min, "rgb_std": rgb_std}
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    return rgbconf
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				def config_schreiben(pfad=SKRIPTPFAD):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    configfile = os.path.join(pfad, "uhr_cfg.toml")
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    with open(configfile, "w") as conffile:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        conffile.write(toml.dumps(CONFIG))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				def alle_led(r, g, b, pixels):
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -153,7 +164,7 @@ def shutdown():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				# Threads
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				def check_anwesenheit(uhr):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				def check_anwesenheit(uhr, pixels):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    """Funktion, welche als eigener Thread laeuft, um selbststaendig in einem gewissenen Intervall
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    alle Geraete in der Toml Liste zu pingen
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    arg: Objekt des neopixel LED Ringes
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -178,7 +189,7 @@ def check_anwesenheit(uhr):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        """pingt die IP 3x an
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				               return (0 | !0) 0 wenn erreichbar
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        """
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        befehl = "/usr/bin/arping -c 3 -w 10 -b -f -I {interface} {ip}".format(interface=interface, ip=ip)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        befehl = "/usr/bin/arping -q -c 3 -w 10 -b -f -I {interface} {ip}".format(interface=interface, ip=ip)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        cmd = shlex.split(befehl)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        return subprocess.call(cmd)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
			
			 | 
			 | 
			
				@ -219,10 +230,10 @@ def check_anwesenheit(uhr):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if len(status_anwesend_liste) > ABSCHALTWERT: 
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    helligkeit = 0  
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if status["dimmen"]:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                helligkeit = uhr.helligkeit * 0.5
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                helligkeit = 0.03
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if now.hour < 5 and not status["dimmen"]:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                helligkeit = 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            uhr.set_helligkeit(helligkeit)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            pixels.brightness = helligkeit
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            last = datetime.datetime.now()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        delta = now - last
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        time.sleep(30)
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -231,12 +242,15 @@ def check_anwesenheit(uhr):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				def main():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    lastsecond = None
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    led_gesetzt = 0
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    rgbconf = rgb_standard()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    pixels = neopixel.NeoPixel(LED_PIN, LED_COUNT, brightness=LED_BRIGHTNESS,
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    pixels = neopixel.NeoPixel(LED_PIN, LED_COUNT, brightness=CONFIG["led_helligkeit"],
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                               auto_write=False, pixel_order=LED_PIXEL_ORDER)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    uhr = Uhr(pixels)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    thread_check_wlan = threading.Thread(target=check_anwesenheit, args=(uhr,))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    uhr = Uhr(pixels, CONFIG["mode_nummer"])
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    thread_check_wlan = threading.Thread(target=check_anwesenheit, args=(uhr, pixels))
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    thread_check_wlan.start()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    rgbconf = uhr.rgb_farben_lesen()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    print(rgbconf)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    alle_led(rgbconf["rgb_leer"][0], rgbconf["rgb_leer"][1], rgbconf["rgb_leer"][2], pixels)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    I_PLUS_TASTER.when_pressed = uhr.helligkeit_erhoehen
 | 
			
		
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
			
			 | 
			 | 
			
				@ -244,10 +258,16 @@ def main():
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    try:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        while True:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            rgbconf = rgb_standard()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            rgbconf = uhr.rgb_farben_lesen()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            print(rgbconf)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            now = datetime.datetime.now()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if lastsecond != now.second:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                lastsecond, led_gesetzt = led_calc(now, stdliste, rgbconf, led_gesetzt, pixels)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            if uhr.helligkeit_geaendert is not None:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                if (datetime.datetime.now() - uhr.helligkeit_geaendert) > datetime.timedelta(seconds=30):
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    CONFIG["led_helligkeit"] = uhr.helligkeit
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    config_schreiben()
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				                    uhr.helligkeit_geaendert = None
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				            time.sleep(0.2)
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				    finally:
 | 
			
		
		
	
		
			
				 | 
				 | 
			
			 | 
			 | 
			
				        pixels.brightness = 0
 | 
			
		
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
			
			 | 
			 | 
			
				
 
 |