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 board
|
||||
|
||||
import setup_logging
|
||||
|
||||
|
||||
SKRIPTPFAD = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
|
||||
@@ -24,7 +27,7 @@ def load_config(pfad=SKRIPTPFAD):
|
||||
|
||||
|
||||
CONFIG = load_config()
|
||||
|
||||
LOGGER = setup_logging.create_logger("uhr", CONFIG["loglevel"])
|
||||
# LED strip configuration
|
||||
LED_COUNT = 60 # Number of LED pixels.
|
||||
LED_PIN = board.D18 # GPIO pin connected to the pixels (must support PWM!).
|
||||
@@ -63,11 +66,13 @@ class Uhr:
|
||||
self.mode_geaendert = now
|
||||
alle_led(0, 0, 0, self.pixels)
|
||||
self.mode_control(now)
|
||||
LOGGER.info(f"Mode geändert auf: {self.mode} um {self.mode_geaendert}Uhr")
|
||||
|
||||
def set_helligkeit(self, helligkeit):
|
||||
self.helligkeit = helligkeit
|
||||
self.pixels.brightness = self.helligkeit
|
||||
self.helligkeit_geaendert = datetime.datetime.now()
|
||||
LOGGER.info(f"Helligkeit geändert auf: {self.helligkeit} um {self.helligkeit_geaendert}Uhr")
|
||||
|
||||
def helligkeit_erhoehen(self):
|
||||
self.helligkeit += 0.05
|
||||
@@ -119,7 +124,12 @@ class Uhr:
|
||||
sonstige_leds = [0]
|
||||
leer_leds = [0]
|
||||
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)
|
||||
|
||||
|
||||
@@ -133,6 +143,7 @@ def config_schreiben(pfad=SKRIPTPFAD):
|
||||
configfile = os.path.join(pfad, "uhr_cfg.toml")
|
||||
with open(configfile, "w") as conffile:
|
||||
conffile.write(toml.dumps(CONFIG))
|
||||
LOGGER.info(f"Schreibe Config: {CONFIG}")
|
||||
|
||||
|
||||
def alle_led(r, g, b, pixels):
|
||||
@@ -273,6 +284,7 @@ def check_anwesenheit(uhr, pixels):
|
||||
"""pingt die IP 2x an
|
||||
return (0 | !0) 0 wenn erreichbar"""
|
||||
befehl = "ping -c2 -W1 {}".format(ip)
|
||||
LOGGER.debug(f"Pinge: {befehl}")
|
||||
cmd = shlex.split(befehl)
|
||||
return subprocess.call(cmd)
|
||||
|
||||
@@ -280,6 +292,7 @@ def check_anwesenheit(uhr, pixels):
|
||||
"""pingt die IP 2x an
|
||||
return (0 | !0) 0 wenn erreichbar"""
|
||||
befehl = "sudo /usr/bin/l2ping -c1 -t1 {}".format(bt)
|
||||
LOGGER.debug(f"Pinge: {befehl}")
|
||||
cmd = shlex.split(befehl)
|
||||
return subprocess.call(cmd)
|
||||
|
||||
@@ -288,6 +301,7 @@ def check_anwesenheit(uhr, pixels):
|
||||
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)
|
||||
LOGGER.debug(f"Pinge: {befehl}")
|
||||
cmd = shlex.split(befehl)
|
||||
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
|
||||
if len(status_anwesend_liste) < ABSCHALTWERT + 1:
|
||||
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:
|
||||
helligkeit = 0
|
||||
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