VPS Monitoring Setup (MQTT)

Diese Anleitung beschreibt die Einrichtung eines Python-Monitoring-Scripts auf dem VPS, das Systemdaten via MQTT an das Dashboard sendet.

1. System-Vorbereitung & .venv Einrichtung

Wir nutzen eine virtuelle Umgebung (.venv), um Konflikte mit System-Paketen zu vermeiden und die Kompatibilität mit dem Cloud-Backup-Skript sicherzustellen.

BASH
# Verzeichnis erstellen und betreten
mkdir -p /home/USER/scripts/vps-monitor
cd /home/USER/scripts/vps-monitor

# Virtuelle Umgebung erstellen
python3 -m venv .venv

# Abhängigkeiten in der .venv installieren
./.venv/bin/pip install --upgrade pip
./.venv/bin/pip install psutil paho-mqtt

2. Monitoring-Skript erstellen

Das Skript wird direkt im Projektordner erstellt.

BASH
sudo tee /home/USER/scripts/vps-monitor/vps_monitor.py > /dev/null << "EOF"
import psutil
import paho.mqtt.client as mqtt
import json
import time

# Konfiguration
BROKER = "localhost"
PORT = 1883
USER = "USER"
PASS = "jwzbS5X2SHeQckxre5bjqM7AmJXJ99" 
TOPIC = "vps/monitor"

client = mqtt.Client()
client.username_pw_set(USER, PASS)

def get_stats():
    return {
        "cpu": psutil.cpu_percent(interval=1),
        "ram": psutil.virtual_memory().percent,
        "disk": psutil.disk_usage('/').percent,
        "uptime": int(time.time() - psutil.boot_time())
    }

try:
    client.connect(BROKER, PORT)
    while True:
        payload = json.dumps(get_stats())
        client.publish(TOPIC, payload, retain=True)
        time.sleep(30) 
except Exception as e:
    print(f"Fehler: {e}")
EOF

3. Systemd Service einrichten

Wichtig: Der ExecStart Pfad zeigt nun auf den Python-Interpreter innerhalb der .venv. Dadurch werden alle installierten Bibliotheken automatisch korrekt geladen.

BASH
sudo tee /etc/systemd/system/vps-monitor.service > /dev/null << "EOF"
[Unit]
Description=VPS MQTT Monitoring Service
After=mosquitto.service

[Service]
# Pfad zum Python-Interpreter in der .venv nutzen!
ExecStart=/home/USER/scripts/vps-monitor/.venv/bin/python3 /home/USER/scripts/vps-monitor/vps_monitor.py
Restart=always
User=USER
WorkingDirectory=/home/USER/scripts/vps-monitor

[Install]
WantedBy=multi-user.target
EOF

# Dienst aktivieren und starten
sudo systemctl daemon-reload
sudo systemctl enable --now vps-monitor.service

4. Status kontrollieren

BASH
sudo systemctl status vps-monitor

🎮 ESP32-S3 & MicroPython (LVGL)

JSON Parsing & UI Update

Da du MicroPython nutzt, ist ujson die effizienteste Wahl. Der folgende Code-Block zeigt, wie die Daten empfangen und für die Anzeige formatiert werden.

PYTHON
import ujson
# ... deine MQTT Initialisierung ...

def on_message_callback(topic, msg):
    try:
        # 1. JSON-String in ein Python-Dictionary umwandeln
        data = ujson.loads(msg)

        # 2. Werte extrahieren
        cpu_val = data.get("cpu", 0)
        ram_val = data.get("ram", 0)
        uptime_sec = data.get("uptime", 0)

        # 3. LVGL-Labels aktualisieren
        # Formatierung: Uptime von Sekunden in Tage/Stunden
        days = uptime_sec // 86400
        hours = (uptime_sec % 86400) // 3600

        cpu_label.set_text("CPU: {}%".format(cpu_val))
        ram_label.set_text("RAM: {}%".format(ram_val))
        uptime_label.set_text("UP: {}d {}h".format(days, hours))

        # Optional: Einen LVGL-Balken (Bar) aktualisieren
        cpu_bar.set_value(int(cpu_val), lv.ANIM.ON)

    except Exception as e:
        print("JSON Error:", e)

# Topic abonnieren: client.subscribe("vps/monitor")