Logging hinzugefügt
This commit is contained in:
@@ -0,0 +1,10 @@
|
|||||||
|
# Uhr
|
||||||
|
|
||||||
|
## Benötigte Software
|
||||||
|
|
||||||
|
apt install iputils-arping python3-systemd
|
||||||
|
|
||||||
|
|
||||||
|
Pythonmodule
|
||||||
|
|
||||||
|
sudo pip3 install toml gpiozero adafruit-circuitpython-neopixel
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
"""
|
||||||
|
Beschreibung:
|
||||||
|
Hilfskript zum Erstellen einer logging Instanz in Abhängigkeit, ob das Skript manuell gestartet worden ist oder
|
||||||
|
ob das Skript per Service Unit gestartet wurde
|
||||||
|
Abhängig dessen wird entweder die Logging Instanz mit einem JournalHandler erstellt (Service Unit)
|
||||||
|
oder mit einem StreamHandler (manuell)
|
||||||
|
Author: Hofei
|
||||||
|
Datum: 03.08.2018
|
||||||
|
Version: 0.1
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import shlex
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from systemd import journal
|
||||||
|
|
||||||
|
|
||||||
|
def __setup_logging(loglevel, frm, startmethode, unitname):
|
||||||
|
"""
|
||||||
|
Erstellt die Logger Instanz für das Skript
|
||||||
|
"""
|
||||||
|
logger = logging.getLogger()
|
||||||
|
logger.setLevel(loglevel)
|
||||||
|
logger.handlers = []
|
||||||
|
if startmethode == "auto":
|
||||||
|
log_handler = journal.JournalHandler(SYSLOG_IDENTIFIER=unitname)
|
||||||
|
|
||||||
|
else:
|
||||||
|
log_handler = logging.StreamHandler()
|
||||||
|
log_handler.setLevel(loglevel)
|
||||||
|
log_handler.setFormatter(frm)
|
||||||
|
logger.addHandler(log_handler)
|
||||||
|
return logger
|
||||||
|
|
||||||
|
|
||||||
|
def __get_service_unit_pid(unitname):
|
||||||
|
"""Ermittelt ob das ausführende Skript mit einer Service Unit gestartet worden ist, wenn ja so ist das
|
||||||
|
Ergebnis (pid_service_unit) != 0"""
|
||||||
|
cmd = "systemctl show -p MainPID {}".format(unitname)
|
||||||
|
cmd = shlex.split(cmd)
|
||||||
|
antwort = subprocess.run(cmd, stdout=subprocess.PIPE)
|
||||||
|
ausgabe = antwort.stdout
|
||||||
|
# strip entfernt \n, split teilt am = in eine Liste und [1] weißt die Zahl in die Variable zu
|
||||||
|
pid_service_unit = int(ausgabe.decode().strip().split("=")[1])
|
||||||
|
return pid_service_unit
|
||||||
|
|
||||||
|
|
||||||
|
def __get_startmethode(unitname):
|
||||||
|
"""Verglicht die PID vom skript mit der pid Service Unit Prüfung
|
||||||
|
wenn die Nummern gleich sind wird auf auto gestellt, wenn nicht auf manuell"""
|
||||||
|
pid_service_unit = __get_service_unit_pid(unitname)
|
||||||
|
pid_skript = os.getpid()
|
||||||
|
if pid_service_unit == pid_skript:
|
||||||
|
startmethode = "auto"
|
||||||
|
else:
|
||||||
|
startmethode = "manuell"
|
||||||
|
return startmethode
|
||||||
|
|
||||||
|
|
||||||
|
def __set_loggerformat(startmethode):
|
||||||
|
"""Stellt die passende Formattierung ein"""
|
||||||
|
if startmethode == "auto":
|
||||||
|
frm = logging.Formatter("%(levelname)s: %(message)s", "%d.%m.%Y %H:%M:%S")
|
||||||
|
else:
|
||||||
|
frm = logging.Formatter("%(asctime)s %(levelname)s: %(message)s", "%d.%m.%Y %H:%M:%S")
|
||||||
|
return frm
|
||||||
|
|
||||||
|
|
||||||
|
def create_logger(unitname, loglevel):
|
||||||
|
"""Dies ist die aufzurufende Funktion bei der Verwendung des Moduls von außen
|
||||||
|
Liefert die fertige Logging Instanz zurück"""
|
||||||
|
startmethode = __get_startmethode(unitname)
|
||||||
|
frm = __set_loggerformat(startmethode)
|
||||||
|
return __setup_logging(loglevel, frm, startmethode, unitname)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
logger = create_logger("testunit", 10)
|
||||||
|
logger.debug("Testnachricht")
|
||||||
@@ -13,6 +13,9 @@ import toml
|
|||||||
import neopixel
|
import neopixel
|
||||||
import board
|
import board
|
||||||
|
|
||||||
|
import setup_logging
|
||||||
|
|
||||||
|
|
||||||
SKRIPTPFAD = os.path.abspath(os.path.dirname(__file__))
|
SKRIPTPFAD = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
|
||||||
@@ -24,7 +27,7 @@ def load_config(pfad=SKRIPTPFAD):
|
|||||||
|
|
||||||
|
|
||||||
CONFIG = load_config()
|
CONFIG = load_config()
|
||||||
|
LOGGER = setup_logging.create_logger("uhr", CONFIG["loglevel"])
|
||||||
# LED strip configuration
|
# LED strip configuration
|
||||||
LED_COUNT = 60 # Number of LED pixels.
|
LED_COUNT = 60 # Number of LED pixels.
|
||||||
LED_PIN = board.D18 # GPIO pin connected to the pixels (must support PWM!).
|
LED_PIN = board.D18 # GPIO pin connected to the pixels (must support PWM!).
|
||||||
@@ -63,11 +66,13 @@ class Uhr:
|
|||||||
self.mode_geaendert = now
|
self.mode_geaendert = now
|
||||||
alle_led(0, 0, 0, self.pixels)
|
alle_led(0, 0, 0, self.pixels)
|
||||||
self.mode_control(now)
|
self.mode_control(now)
|
||||||
|
LOGGER.info(f"Mode geändert auf: {self.mode} um {self.mode_geaendert}Uhr")
|
||||||
|
|
||||||
def set_helligkeit(self, helligkeit):
|
def set_helligkeit(self, helligkeit):
|
||||||
self.helligkeit = helligkeit
|
self.helligkeit = helligkeit
|
||||||
self.pixels.brightness = self.helligkeit
|
self.pixels.brightness = self.helligkeit
|
||||||
self.helligkeit_geaendert = datetime.datetime.now()
|
self.helligkeit_geaendert = datetime.datetime.now()
|
||||||
|
LOGGER.info(f"Helligkeit geändert auf: {self.helligkeit} um {self.helligkeit_geaendert}Uhr")
|
||||||
|
|
||||||
def helligkeit_erhoehen(self):
|
def helligkeit_erhoehen(self):
|
||||||
self.helligkeit += 0.05
|
self.helligkeit += 0.05
|
||||||
@@ -119,7 +124,12 @@ class Uhr:
|
|||||||
sonstige_leds = [0]
|
sonstige_leds = [0]
|
||||||
leer_leds = [0]
|
leer_leds = [0]
|
||||||
rgbdict = self.rgb_farben_lesen()
|
rgbdict = self.rgb_farben_lesen()
|
||||||
|
LOGGER.debug(f"stunden_leds: {stunden_leds}\n"
|
||||||
|
f"minuten_leds: {minuten_leds}\n"
|
||||||
|
f"sekunden_leds: {sekunden_leds}\n"
|
||||||
|
f"leer_leds: {leer_leds}\n"
|
||||||
|
f"sonstige_leds: {sonstige_leds}\n"
|
||||||
|
f"rgbdict: {rgbdict}")
|
||||||
led_setzen(stunden_leds, minuten_leds, sekunden_leds, leer_leds, sonstige_leds, rgbdict, self.pixels)
|
led_setzen(stunden_leds, minuten_leds, sekunden_leds, leer_leds, sonstige_leds, rgbdict, self.pixels)
|
||||||
|
|
||||||
|
|
||||||
@@ -133,6 +143,7 @@ def config_schreiben(pfad=SKRIPTPFAD):
|
|||||||
configfile = os.path.join(pfad, "uhr_cfg.toml")
|
configfile = os.path.join(pfad, "uhr_cfg.toml")
|
||||||
with open(configfile, "w") as conffile:
|
with open(configfile, "w") as conffile:
|
||||||
conffile.write(toml.dumps(CONFIG))
|
conffile.write(toml.dumps(CONFIG))
|
||||||
|
LOGGER.info(f"Schreibe Config: {CONFIG}")
|
||||||
|
|
||||||
|
|
||||||
def alle_led(r, g, b, pixels):
|
def alle_led(r, g, b, pixels):
|
||||||
@@ -273,6 +284,7 @@ def check_anwesenheit(uhr, pixels):
|
|||||||
"""pingt die IP 2x an
|
"""pingt die IP 2x an
|
||||||
return (0 | !0) 0 wenn erreichbar"""
|
return (0 | !0) 0 wenn erreichbar"""
|
||||||
befehl = "ping -c2 -W1 {}".format(ip)
|
befehl = "ping -c2 -W1 {}".format(ip)
|
||||||
|
LOGGER.debug(f"Pinge: {befehl}")
|
||||||
cmd = shlex.split(befehl)
|
cmd = shlex.split(befehl)
|
||||||
return subprocess.call(cmd)
|
return subprocess.call(cmd)
|
||||||
|
|
||||||
@@ -280,6 +292,7 @@ def check_anwesenheit(uhr, pixels):
|
|||||||
"""pingt die IP 2x an
|
"""pingt die IP 2x an
|
||||||
return (0 | !0) 0 wenn erreichbar"""
|
return (0 | !0) 0 wenn erreichbar"""
|
||||||
befehl = "sudo /usr/bin/l2ping -c1 -t1 {}".format(bt)
|
befehl = "sudo /usr/bin/l2ping -c1 -t1 {}".format(bt)
|
||||||
|
LOGGER.debug(f"Pinge: {befehl}")
|
||||||
cmd = shlex.split(befehl)
|
cmd = shlex.split(befehl)
|
||||||
return subprocess.call(cmd)
|
return subprocess.call(cmd)
|
||||||
|
|
||||||
@@ -288,6 +301,7 @@ def check_anwesenheit(uhr, pixels):
|
|||||||
return (0 | !0) 0 wenn erreichbar
|
return (0 | !0) 0 wenn erreichbar
|
||||||
"""
|
"""
|
||||||
befehl = "/usr/bin/arping -q -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)
|
||||||
|
LOGGER.debug(f"Pinge: {befehl}")
|
||||||
cmd = shlex.split(befehl)
|
cmd = shlex.split(befehl)
|
||||||
return subprocess.call(cmd)
|
return subprocess.call(cmd)
|
||||||
|
|
||||||
@@ -324,7 +338,7 @@ def check_anwesenheit(uhr, pixels):
|
|||||||
elif not status["anwesend"] and not status["dimmen"]: # Wenn kein Geraet erreichbar ist
|
elif not status["anwesend"] and not status["dimmen"]: # Wenn kein Geraet erreichbar ist
|
||||||
if len(status_anwesend_liste) < ABSCHALTWERT + 1:
|
if len(status_anwesend_liste) < ABSCHALTWERT + 1:
|
||||||
status_anwesend_liste.append(status["anwesend"])
|
status_anwesend_liste.append(status["anwesend"])
|
||||||
print("Nichts los daheim die ", len(status_anwesend_liste), ".")
|
LOGGER.debug(f"Nichts los daheim die {len(status_anwesend_liste)}.")
|
||||||
if len(status_anwesend_liste) > ABSCHALTWERT:
|
if len(status_anwesend_liste) > ABSCHALTWERT:
|
||||||
helligkeit = 0
|
helligkeit = 0
|
||||||
if status["dimmen"]:
|
if status["dimmen"]:
|
||||||
|
|||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
# /etc/systemd/system/uhr.service
|
||||||
|
[Unit]
|
||||||
|
Description=Uhr starten
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/bin/python3 /home/pi/uhr/uhr.py
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
Reference in New Issue
Block a user