diff --git a/etc/systemd/system/rpi-check.service b/etc/systemd/system/rpi-check.service index df1e5e9..7968706 100644 --- a/etc/systemd/system/rpi-check.service +++ b/etc/systemd/system/rpi-check.service @@ -3,9 +3,12 @@ Description=RPI Ping Check After=network.target [Service] -ExecStart=/usr/local/bin/custom/poe.sh +Type=simple +User=root +WorkingDirectory=/srv/poe_manager +ExecStart=/srv/poe_manager/venv/bin/python3 /srv/poe_manager/poe_wrapper.py Restart=always RestartSec=5 [Install] -WantedBy=multi-user.target \ No newline at end of file +WantedBy=multi-user.target diff --git a/srv/poe_manager/app.py b/srv/poe_manager/app.py index 43a4234..9702dc7 100644 --- a/srv/poe_manager/app.py +++ b/srv/poe_manager/app.py @@ -82,19 +82,28 @@ def logout(): logout_user() return redirect(url_for('login')) -@app.route('/') +@app.route("/") @login_required def index(): - devices = get_devices() # alle Devices aus der DB - status = load_device_status() - - # Standardstatus, falls Gerät im Log noch nicht auftaucht - for d in devices: - if d['name'] not in status: - status[d['name']] = 'offline' + conn = sqlite3.connect("sqlite.db") + c = conn.cursor() + c.execute("SELECT mac, name FROM devices") + devices = c.fetchall() + conn.close() - interval_min = get_interval_seconds() // 60 - return render_template('index.html', devices=devices, status=status, interval=interval_min) + # Status aus letztem Log ermitteln + import glob, os + log_files = glob.glob("/var/log/rpi-*.log") + status_dict = {} + if log_files: + latest_log = max(log_files, key=os.path.getctime) + with open(latest_log, "r") as f: + for line in f: + for dev in devices: + if dev[1] in line: + status_dict[dev[0]] = "online" if "erreichbar" in line else "offline" + + return render_template("index.html", devices=devices, status=status_dict) @app.route('/settings', methods=['GET', 'POST']) @login_required diff --git a/srv/poe_manager/poe_wrapper.py b/srv/poe_manager/poe_wrapper.py new file mode 100644 index 0000000..3fc809c --- /dev/null +++ b/srv/poe_manager/poe_wrapper.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python3 +import subprocess +import os + +# Virtuelle Umgebung aktivieren (Pfad zu deinem venv) +venv_python = "/srv/poe_manager/venv/bin/python3" + +# Poe.sh über bash ausführen, innerhalb der venv +subprocess.run(["/bin/bash", "/usr/local/bin/custom/poe.sh"], env={"PATH": f"/srv/poe_manager/venv/bin:" + os.environ["PATH"]}) diff --git a/srv/poe_manager/templates/index.html b/srv/poe_manager/templates/index.html index 33ace70..2e8f299 100644 --- a/srv/poe_manager/templates/index.html +++ b/srv/poe_manager/templates/index.html @@ -2,17 +2,15 @@ {% block content %}

Dashboard

-
+
{% for d in devices %} -
-
+
+
+
{{ d[1] }}
-
{{ d['name'] }}
- {% if d['status'] == 'online' %} -

Online

- {% else %} -

Offline

- {% endif %} + + {% if status[d[0]] %}{{ status[d[0]]|capitalize }}{% else %}unbekannt{% endif %} +