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")