Farm-Manager für Moonraker-Drucker
Eine Oberfläche für die ganze Farm: Wand, Warteschlange, Material, Abläufe und Protokoll.
Benannt nach der Mühle Grotti — sie mahlt ohne Pause, was man ihr aufträgt.
Features · Screenshots · Schnellstart · API · Changelog · Community
Features
| Druckerwand & Cockpit | Live-Status, Temps, Pause/Cancel, Farm-ETA |
| Warteschlange | Priorität, „nächster freier“, Material-Match, ACE-Map |
| Dateien & Projekte | Slice-Watch, Senden, Umbenennen, Projektordner |
| Kobra-3-Ablauf | Druck → Abkühlen → Schieben → Tasten |
| Material | Spulen, Restgewicht, Bedarf, Chargen |
| Aufträge & Statistik | Kunden, Lieferschein, Kosten (€ Material+Strom) |
| Betrieb | Auth (Session/grt_…), Telegram/ntfy, PWA |
Stack: Python · Flask · PostgreSQL · Moonraker (Rinkhals auf Kobra 3 / S1).
Screenshots
Weitere Bilder und Post-Text: docs/community/.
Schnellstart
Voraussetzungen: Python 3.11, PostgreSQL (leere DB grotti), Drucker mit Moonraker im LAN.
cd D:\Projekte\Grotti
python -m venv .venv
.\.venv\Scripts\pip install -r requirements.txt
copy config.example.json config.json
.\.venv\Scripts\python.exe server.py
Dann http://127.0.0.1:8770/. Bedienung unter Doku in der App (docs/Anleitung-*.md).
Raspberry Pi (.deb)
Auf dem Pi (arm64 / Bookworm) bauen und installieren — PostgreSQL und systemd-Dienst werden mit eingerichtet:
bash packaging/build-deb.sh
sudo apt install ./packaging/dist/grotti_*_arm64.deb
journalctl -u grotti -f
Details: docs/Anleitung-Installation-Pi.md. Öffentliches apt-Repo folgt später.
config.json und data/ bleiben lokal (nicht im Git). Drucker zuerst in drucker.json, danach unter Einstellungen.
| Schlüssel | Bedeutung |
|---|---|
host, port |
Oberfläche (Standard 127.0.0.1:8770) |
database_url |
PostgreSQL |
watch_dir |
Slice-Ordner (oder leer = nur Upload) |
energy / telegram / alerts |
Kosten und Benachrichtigungen |
Schema-Migrationen laufen beim Start (grotti/migrations/). Vor Major-Updates: pg_dump.
Ordner
| Pfad | Inhalt |
|---|---|
server.py |
Start, DB, Hintergrund-Threads |
grotti/ |
Moonraker, Queue, Senden, Abräumen, Watcher, Store |
web/ |
Flask, Templates, CSS/JS, Branding |
docs/ |
Anleitungen (/doku), Community-Screens, Technik unter internal/ |
CHANGELOG.md |
Versionen |
API
Alles unter /api/v1, JSON. Auth: Session oder Authorization: Bearer grt_… (kein CSRF). Referenz: docs/internal/API.md, OpenAPI-Skizze docs/internal/openapi.yaml.
| Methode und Pfad | Zweck |
|---|---|
POST /auth/setup, /auth/login, /auth/token, /auth/logout |
Admin, Session-Login, App-Token, Logout |
GET /me, /users, /tokens |
Konto, Benutzer (Admin), API-Tokens |
GET /version |
Version, api, features |
GET/PATCH /einstellungen, POST /telegram/test, /ntfy/test |
Config und Push-Probe |
GET /drucker?live=1 |
Drucker mit Live-Zustand |
POST /drucker/<host>/<aktion> |
pause, fortsetzen/resume, abbrechen/cancel |
POST /drucker/<host>/steuern |
Temperatur, Speed, Flow, Lüfter, ACE, clear_error, E-Stop |
POST /drucker/<host>/abraeumen |
Platte geräumt (confirm) |
GET/POST /dateien, PATCH/DELETE /dateien/<id> |
Bibliothek (Filter family, material, project_id, …) |
POST /senden, GET/POST /druck-queue |
Senden und Warteschlange (confirm) |
GET/POST /projekte, …/einreihen, Assets |
Projekte |
GET /spulen, POST /spulen/<id>/einlegen |
Material |
GET /laeufe, /statistik, /ereignisse, /stream |
Protokoll, Statistik, SSE |
MCP: python -m grotti.mcp_server mit GROTTI_URL / GROTTI_TOKEN → docs/internal/MCP.md.
Sicherheit
- Login Pflicht. Rollen: Admin, Operator.
- Druckstarts brauchen
confirm: true(Zwei-Klick in der UI). - Keine freie G-code-Konsole; kein
FIRMWARE_RESTARTüber Grotti. - Nach außen: Reverse Proxy mit TLS.
Versionen
- SemVer in
grotti/version.py, Einträge in CHANGELOG.md. - Release:
[Unreleased]→[x.y.z] – Datum, TagvX.Y.Z. - CSS/JS-Cache:
?v=inlayout.htmlmitziehen.

Repo: git.gundel.dev/dg/grotti







