python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
python -m app.mainsudo apt update
sudo apt install -y python3 python3-venv python3-pip
cd /home/pi/3dPrintAutomation
./scripts/setup_pi.shDer Dienst startet jetzt zusätzlich einen kleinen HTTP-Server (FastAPI) auf http://<host>:<port> (standardmäßig 0.0.0.0:8000). Du kannst den Host/Port mit den Umgebungsvariablen API_HOST und API_PORT anpassen.
Wichtige Endpunkte:
GET /health- Gesundheitsstatus (Anzahl konfigurierte Drucker + Gesamtzahl Jobs)GET /current- Aktueller laufender Druckjob (wenn vorhanden)GET /prints- Liste der letzten JobsGET /prints/{job_id}- Details zu einem JobPOST /prints- Upload einer neuen Datei + Anlegen eines Druckjobs (Datei wird automatisch archiviert)POST /prints/{job_id}/cancel- Abbrechen eines laufenden DrucksGET /printers- Status aller konfigurierten Drucker (Moonraker erreichbar/Status)
Beispiel:
curl http://localhost:8000/healthWenn ein Job beim Upload/Druck fehlschlägt (z. B. weil Moonraker offline ist), wird der Job automatisch wieder in die Warteschlange gestellt und später erneut versucht. Die Einstellungen lassen sich über folgende Umgebungsvariablen anpassen:
MAX_RETRIES(Standard3) – Anzahl WiederholungsversucheRETRY_DELAY_SECONDS(Standard10) – Pause vor dem nächsten Versuch (vervielfacht sich mit jedem Versuch)
Die Automatisierung unterstützt mehrere Drucker, wenn sie jeweils eine eigene Moonraker-Instanz haben. Konfiguriere diese in printers.yaml:
printers:
- id: "printer1"
name: "Kobra 3"
inbox: "inbox/printer1"
moonraker_base_url: "http://192.168.178.52:7125"
moonraker_api_key: ""
- id: "printer2"
name: "Kobra 3 (zweiter)"
inbox: "inbox/printer2"
moonraker_base_url: "http://192.168.178.53:7125"
moonraker_api_key: ""Moonraker Upload/Start-Flow (intern im Worker):
- Upload:
POST /printer/files/upload?path=local - Start:
POST /printer/print/startmit{"filename":"local:<gcode_name>"}
Das Script erstellt automatisch die entsprechenden Inbox-Ordner (z. B. inbox/printer1).
Hinweis: Das Skript erstellt ein virtualenv, installiert Abhängigkeiten, legt
.envan und richtet einen systemd-Dienst ein. Wenn du es auf einem Windows-System testen möchtest, kannst du es in WSL ausführen.
Datei anlegen: /etc/systemd/system/print-automation.service
[Unit]
Description=3D Print Automation Service
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/3dPrintAutomation
Environment=PYTHONUNBUFFERED=1
ExecStart=/home/pi/3dPrintAutomation/.venv/bin/python -m app.main
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now print-automation.service
sudo systemctl status print-automation.service
journalctl -u print-automation.service -f- Konfiguration aus
.env - Automatisches Anlegen von Ordnern:
inbox,gcode,archive,logs - Logging auf Konsole + Datei
logs/automation.log