Grotti

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.

Version 3.6.1 Python 3.11+ PostgreSQL Moonraker UI Deutsch Self-hosted

Features · Screenshots · Schnellstart · API · Changelog · Community


Druckerwand

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

Jetzt-Liste   Warteschlange

Dateien   Material

Statistik   Cockpit

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, Tag vX.Y.Z.
  • CSS/JS-Cache: ?v= in layout.html mitziehen.


Repo: git.gundel.dev/dg/grotti

S
Description
No description provided
Readme
7.9 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 57.1%
HTML 30.2%
CSS 8.3%
JavaScript 4%
Shell 0.4%