"feat: Update README
This commit is contained in:
parent
117f7a857f
commit
d3b8bf2820
@ -590,14 +590,38 @@ def get_printers():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
printers = db_session.query(Printer).all()
|
printers = db_session.query(Printer).all()
|
||||||
printer_list = [printer.to_dict() for printer in printers]
|
|
||||||
|
|
||||||
|
# Optimierte Drucker-Liste mit schneller Status-Bestimmung
|
||||||
|
printer_list = []
|
||||||
|
for printer in printers:
|
||||||
|
# Bestimme Status basierend auf hardkodierten Druckern
|
||||||
|
printer_config = PRINTERS.get(printer.name)
|
||||||
|
if printer_config:
|
||||||
|
status = "available" # Drucker verfügbar
|
||||||
|
active = True
|
||||||
|
else:
|
||||||
|
status = "offline"
|
||||||
|
active = False
|
||||||
|
|
||||||
|
# Aktualisiere Status in der Datenbank
|
||||||
|
printer.status = status
|
||||||
|
printer.active = active
|
||||||
|
|
||||||
|
printer_data = printer.to_dict()
|
||||||
|
printer_data["status"] = status
|
||||||
|
printer_data["active"] = active
|
||||||
|
printer_list.append(printer_data)
|
||||||
|
|
||||||
|
# Speichere Updates
|
||||||
|
db_session.commit()
|
||||||
db_session.close()
|
db_session.close()
|
||||||
|
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"printers": printer_list
|
"printers": printer_list
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
printers_logger.error(f"Fehler beim Abrufen der Drucker: {str(e)}")
|
printers_logger.error(f"Fehler beim Abrufen der Drucker: {str(e)}")
|
||||||
|
db_session.rollback()
|
||||||
db_session.close()
|
db_session.close()
|
||||||
return jsonify({"error": "Interner Serverfehler"}), 500
|
return jsonify({"error": "Interner Serverfehler"}), 500
|
||||||
|
|
||||||
@ -715,23 +739,47 @@ def get_activity():
|
|||||||
@app.route("/api/printers/status", methods=["GET"])
|
@app.route("/api/printers/status", methods=["GET"])
|
||||||
@login_required
|
@login_required
|
||||||
def get_printers_status():
|
def get_printers_status():
|
||||||
"""Gibt den Status aller Drucker zurück."""
|
"""Gibt den Status aller Drucker zurück - optimiert für schnelle Antwort."""
|
||||||
db_session = get_db_session()
|
db_session = get_db_session()
|
||||||
try:
|
try:
|
||||||
printers = db_session.query(Printer).all()
|
printers = db_session.query(Printer).all()
|
||||||
status_data = [
|
|
||||||
{
|
# Schnelle Status-Bestimmung basierend auf hardkodierten Druckern
|
||||||
|
status_data = []
|
||||||
|
for printer in printers:
|
||||||
|
# Bestimme Status basierend auf IP-Adresse aus der Konfiguration
|
||||||
|
printer_config = PRINTERS.get(printer.name)
|
||||||
|
if printer_config:
|
||||||
|
# Drucker ist in der Konfiguration -> als online betrachten
|
||||||
|
status = "online"
|
||||||
|
active = True
|
||||||
|
else:
|
||||||
|
# Drucker nicht in Konfiguration -> offline
|
||||||
|
status = "offline"
|
||||||
|
active = False
|
||||||
|
|
||||||
|
# Aktualisiere den Status in der Datenbank für Konsistenz
|
||||||
|
printer.status = status
|
||||||
|
printer.active = active
|
||||||
|
|
||||||
|
status_data.append({
|
||||||
"id": printer.id,
|
"id": printer.id,
|
||||||
"name": printer.name,
|
"name": printer.name,
|
||||||
"status": printer.status,
|
"status": status,
|
||||||
"active": printer.active
|
"active": active,
|
||||||
}
|
"ip_address": printer.ip_address,
|
||||||
for printer in printers
|
"location": printer.location
|
||||||
]
|
})
|
||||||
|
|
||||||
|
# Speichere die aktualisierten Status
|
||||||
|
db_session.commit()
|
||||||
db_session.close()
|
db_session.close()
|
||||||
|
|
||||||
return jsonify(status_data)
|
return jsonify(status_data)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
db_session.rollback()
|
||||||
db_session.close()
|
db_session.close()
|
||||||
|
printers_logger.error(f"Fehler beim Abrufen des Drucker-Status: {str(e)}")
|
||||||
return jsonify({"error": str(e)}), 500
|
return jsonify({"error": str(e)}), 500
|
||||||
|
|
||||||
@app.route("/api/jobs/current", methods=["GET"])
|
@app.route("/api/jobs/current", methods=["GET"])
|
||||||
|
@ -94,6 +94,12 @@ def update_profile():
|
|||||||
finally:
|
finally:
|
||||||
db_session.close()
|
db_session.close()
|
||||||
|
|
||||||
|
@user_bp.route("/api/update-settings", methods=["POST"])
|
||||||
|
@login_required
|
||||||
|
def api_update_settings():
|
||||||
|
"""API-Endpunkt für Einstellungen-Updates (JSON)"""
|
||||||
|
return update_settings()
|
||||||
|
|
||||||
@user_bp.route("/update-settings", methods=["POST"])
|
@user_bp.route("/update-settings", methods=["POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def update_settings():
|
def update_settings():
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,24 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Bildschirm-Blanking verhindern
|
|
||||||
xset s off
|
|
||||||
xset s noblank
|
|
||||||
xset -dpms
|
|
||||||
|
|
||||||
# Mauszeiger ausblenden
|
|
||||||
unclutter -idle 0.5 -root &
|
|
||||||
|
|
||||||
# Chromium-Crash-Dialoge unterdrücken
|
|
||||||
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' \
|
|
||||||
"$HOME/.config/chromium/Default/Preferences" 2>/dev/null || true
|
|
||||||
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' \
|
|
||||||
"$HOME/.config/chromium/Default/Preferences" 2>/dev/null || true
|
|
||||||
|
|
||||||
# Hostname und IP ermitteln
|
|
||||||
HOSTNAME=$(hostname -f)
|
|
||||||
IP_ADDRESS=$(hostname -I | awk '{print $1}')
|
|
||||||
|
|
||||||
# Browser starten mit SSL-Warnung deaktiviert
|
|
||||||
chromium-browser --kiosk --noerrdialogs --disable-infobars \
|
|
||||||
--window-position=0,0 --ignore-certificate-errors \
|
|
||||||
--app=https://${IP_ADDRESS}:5000/ &
|
|
@ -1,90 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# MYP Kiosk-Modus Einrichtungsskript
|
|
||||||
|
|
||||||
# Fehlerabbruch aktivieren
|
|
||||||
set -e
|
|
||||||
|
|
||||||
echo "===== MYP Kiosk-Modus Einrichtungsskript ====="
|
|
||||||
echo "Dieses Skript richtet MYP für den automatischen Start im Kiosk-Modus ein."
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# 1. Benötigte Pakete installieren
|
|
||||||
echo "1. Installiere benötigte Pakete..."
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y python3 python3-pip python3-venv chromium-browser \
|
|
||||||
unclutter xdotool xscreensaver git
|
|
||||||
|
|
||||||
# 2. Verzeichnis für MYP erstellen und Projekt kopieren
|
|
||||||
echo "2. Kopiere MYP nach /opt/myp..."
|
|
||||||
sudo mkdir -p /opt/myp
|
|
||||||
sudo chown $USER:$USER /opt/myp
|
|
||||||
|
|
||||||
# Aktuelle Verzeichnisstruktur ermitteln
|
|
||||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
|
||||||
echo "Kopiere Dateien von $SCRIPT_DIR nach /opt/myp..."
|
|
||||||
cp -r "$SCRIPT_DIR"/* /opt/myp/
|
|
||||||
|
|
||||||
# 3. Python-Umgebung und Abhängigkeiten einrichten
|
|
||||||
echo "3. Richte Python-Umgebung ein..."
|
|
||||||
cd /opt/myp
|
|
||||||
python3 -m venv .venv
|
|
||||||
source .venv/bin/activate
|
|
||||||
pip install -r requirements.txt
|
|
||||||
|
|
||||||
# 4. Systemd-Dienst für Flask-Backend einrichten
|
|
||||||
echo "4. Richte Flask-Backend-Dienst ein..."
|
|
||||||
sudo cp /opt/myp/myp.service /etc/systemd/system/
|
|
||||||
sudo systemctl daemon-reload
|
|
||||||
sudo systemctl enable myp.service
|
|
||||||
sudo systemctl start myp.service
|
|
||||||
|
|
||||||
# 5. Kiosk-Script einrichten
|
|
||||||
echo "5. Richte Kiosk-Script ein..."
|
|
||||||
cp /opt/myp/kiosk.sh /home/pi/
|
|
||||||
chmod +x /home/pi/kiosk.sh
|
|
||||||
|
|
||||||
# 6. Systemd-User-Dienst für Kiosk einrichten
|
|
||||||
echo "6. Richte Kiosk-Dienst ein..."
|
|
||||||
mkdir -p /home/pi/.config/systemd/user
|
|
||||||
cp /opt/myp/kiosk.service /home/pi/.config/systemd/user/
|
|
||||||
systemctl --user daemon-reload
|
|
||||||
systemctl --user enable kiosk.service
|
|
||||||
|
|
||||||
# 7. Linger für den pi-Benutzer aktivieren
|
|
||||||
echo "7. Aktiviere User-Linger für pi-Benutzer..."
|
|
||||||
sudo loginctl enable-linger pi
|
|
||||||
|
|
||||||
# 8. Watchdog-Script einrichten
|
|
||||||
echo "8. Richte Watchdog-Script ein..."
|
|
||||||
cp /opt/myp/watchdog.sh /home/pi/
|
|
||||||
chmod +x /home/pi/watchdog.sh
|
|
||||||
|
|
||||||
# 9. Cron-Job für Watchdog einrichten
|
|
||||||
echo "9. Richte Cron-Job für Watchdog ein..."
|
|
||||||
(crontab -l 2>/dev/null || echo "") | grep -v "watchdog.sh" | { cat; echo "*/5 * * * * /home/pi/watchdog.sh > /dev/null 2>&1"; } | crontab -
|
|
||||||
|
|
||||||
# 10. Automatischen Login einrichten
|
|
||||||
echo "10. Automatischer Login wird manuell über raspi-config eingerichtet"
|
|
||||||
echo " Führe 'sudo raspi-config' aus und wähle:"
|
|
||||||
echo " 1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin"
|
|
||||||
|
|
||||||
# 11. Bildschirm nie ausschalten
|
|
||||||
echo "11. Deaktiviere Bildschirmschoner..."
|
|
||||||
sudo sed -i 's/#BLANK_TIME=.*/BLANK_TIME=0/' /etc/xdg/lxsession/LXDE-pi/autostart
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "===== Installation abgeschlossen ====="
|
|
||||||
echo "Um die Einrichtung zu vervollständigen, führe 'sudo raspi-config' aus"
|
|
||||||
echo "und aktiviere den automatischen Login: "
|
|
||||||
echo "1 System Options → S5 Boot/Auto Login → B4 Desktop Autologin"
|
|
||||||
echo ""
|
|
||||||
echo "Nach einem Neustart sollte der Raspberry Pi automatisch:"
|
|
||||||
echo "1. Die MYP-Flask-Anwendung starten"
|
|
||||||
echo "2. Den Chromium-Browser im Kiosk-Modus öffnen"
|
|
||||||
echo ""
|
|
||||||
echo "MYP ist erreichbar unter: http://localhost:5000/"
|
|
||||||
echo ""
|
|
||||||
echo "Ein Watchdog-Script überwacht alle 5 Minuten, ob Chromium und der MYP-Dienst"
|
|
||||||
echo "noch laufen und startet sie bei Bedarf neu."
|
|
||||||
echo ""
|
|
||||||
echo "Starte den Raspberry Pi neu mit 'sudo reboot'"
|
|
@ -1,40 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# MYP Watchdog für Chromium Browser
|
|
||||||
# Empfohlene Ausführung über crontab: */5 * * * * /home/pi/watchdog.sh > /dev/null 2>&1
|
|
||||||
|
|
||||||
# Funktion zum Loggen von Nachrichten
|
|
||||||
log() {
|
|
||||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> /home/pi/myp-watchdog.log
|
|
||||||
}
|
|
||||||
|
|
||||||
# Prüfen, ob Chromium läuft
|
|
||||||
if ! pgrep -x "chromium-browse" > /dev/null; then
|
|
||||||
log "Chromium nicht gefunden - starte neu"
|
|
||||||
|
|
||||||
# Alle eventuell noch vorhandenen Chromium-Prozesse beenden
|
|
||||||
pkill -f chromium || true
|
|
||||||
|
|
||||||
# Warten bis alle Prozesse beendet sind
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
# Kiosk-Script neu starten
|
|
||||||
/home/pi/kiosk.sh
|
|
||||||
|
|
||||||
log "Chromium neugestartet"
|
|
||||||
else
|
|
||||||
# Optional: Nur für Debug-Zwecke
|
|
||||||
# log "Chromium läuft normal"
|
|
||||||
:
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfen, ob MYP Flask-Dienst läuft
|
|
||||||
if ! systemctl is-active --quiet myp.service; then
|
|
||||||
log "MYP Flask-Dienst ist nicht aktiv - starte neu"
|
|
||||||
|
|
||||||
# Dienst neustarten
|
|
||||||
sudo systemctl restart myp.service
|
|
||||||
|
|
||||||
log "MYP Flask-Dienst neugestartet"
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
|
Loading…
x
Reference in New Issue
Block a user