diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ce5fd3..50c9a0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Alle Änderungen an Grotti. Format nach [Keep a Changelog](https://keepachangelo ## [Unreleased] +### Geändert + +- **README:** Banner, Badges, Feature-Übersicht und Community-Screenshots oben; Setup/API darunter. + ## [3.4.0] – 2026-10-18 ### Neu diff --git a/README.md b/README.md index fe54dc4..9b13050 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,109 @@ -# Grotti +

+ Grotti +

-Steuert die 3D-Drucker im Haus von einer Weboberfläche aus: Live-Zustand, Dateien senden, Warteschlange, Abläufe für den Kobra 3 (drucken, abkühlen, abschieben, prüfen), Material, Projekte und ein Protokoll, was wann passiert ist. +

+ 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. +

-Der Name kommt von der Mühle Grotti: sie mahlt ohne Pause, was man ihr aufträgt. +

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

-Die Drucker laufen mit Rinkhals (Kobra 3, Kobra S1). Grotti spricht sie über Moonraker an. +

+ Features · + Screenshots · + Schnellstart · + API · + Changelog · + Community +

-Aktuelle Version: siehe `grotti/version.py`, Änderungen in [CHANGELOG.md](CHANGELOG.md). +--- -## Voraussetzungen +

+ Druckerwand +

-- Python 3.11 -- PostgreSQL (eine leere Datenbank `grotti` reicht, das Schema legt Grotti selbst an) -- Drucker im selben Netz mit Moonraker auf Port 80 +## Features -## Einrichten +| | | +| --- | --- | +| **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/`](docs/community/README.md). + +## Schnellstart + +**Voraussetzungen:** Python 3.11, PostgreSQL (leere DB `grotti`), Drucker mit Moonraker im LAN. ```powershell cd D:\Projekte\Grotti python -m venv .venv .\.venv\Scripts\pip install -r requirements.txt copy config.example.json config.json -``` - -`config.json` anpassen: - -| Schlüssel | Bedeutung | -| --- | --- | -| `host`, `port` | Wo die Oberfläche lauscht. Standard `127.0.0.1:8770`. | -| `database_url` | PostgreSQL-Verbindung. | -| `data_dir` | Uploads, Vorschaubilder, Cache. Standard `data`. | -| `watch_dir` | Slice-Ordner (unter Einstellungen setzen). Leer = nur Upload. | -| `token` | Wenn gesetzt, braucht die API `Authorization: Bearer `. | -| `fqdn` | Öffentliche Basis-URL für Spulen-Etiketten-QR. Leer = Request-Host. | -| `energy` | Watt und Strompreis für die Kosten im Protokoll. | -| `telegram`, `alerts` | Bot und welche Ereignisse als Nachricht kommen. | -| `auto_queue` | Wenn `false`, startet die Warteschlange nichts Neues. | - -Die Drucker stehen beim ersten Start in `drucker.json` und landen dann in der Datenbank. Danach werden sie unter Einstellungen gepflegt. - -Schema-Änderungen laufen beim Start über `grotti/migrations/` (Tabelle `schema_version`). Vor Major-Updates die Datenbank sichern (`pg_dump`). - -```json -[{ "name": "Kobra 3 da26", "host": "10.10.1.60" }] -``` - -Die Familie (Kobra 3 oder S1) liest Grotti aus dem Namen. - -## Starten - -```powershell .\.venv\Scripts\python.exe server.py ``` -Dann öffnen. Bedienungsanleitung mit Screenshots in der Oberfläche unter **Doku** (Kapitel `Anleitung-*`), Technik-Notizen darunter. +Dann . Bedienung unter **Doku** in der App (`docs/Anleitung-*.md`). -`config.json` und `data/` sind lokal und nicht im Git. +`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, Datenbank vorbereiten, Hintergrund-Threads | -| `grotti/` | Kern: Moonraker, Warteschlange (`print_queue.py`), Senden (`send_queue.py`), Abräumen (`eject.py`), Zustandswächter (`watcher.py`), Ereignisse und Telegram (`notify.py`), Datenbank (`store.py`, `schema.sql`) | -| `web/` | Flask-App (`app.py`), Seiten (`templates/`), CSS und JS (`static/`) | -| `docs/` | Bedienungsanleitung (`Anleitung-*.md`) unter `/doku`; Technik unter `docs/internal/` (nicht in der App) | -| `web/static/doku/` | Screenshots für die Anleitung | -| `CHANGELOG.md` | Änderungen je Version | +| `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-Cookie (UI) oder `Authorization: Bearer grt_…` (API-Token unter Einstellungen). Optional noch Shared-`token` in der Config (Migrationsbrücke). +Alles unter `/api/v1`, JSON. Auth: Session oder `Authorization: Bearer grt_…`. | Methode und Pfad | Zweck | | --- | --- | @@ -78,43 +111,33 @@ Alles unter `/api/v1`, JSON. Auth: Session-Cookie (UI) oder `Authorization: Bear | `GET /me`, `/users`, `/tokens` | Konto, Benutzer (Admin), API-Tokens | | `GET /version` | Version | | `GET`/`PATCH /einstellungen`, `POST /telegram/test` | Config und Telegram-Probe | -| `GET /drucker?live=1` | Drucker mit Live-Zustand, laufendem und wartendem Auftrag | -| `POST /drucker` · `PATCH`/`DELETE /drucker/` | Drucker anlegen/ändern (Admin) | +| `GET /drucker?live=1` | Drucker mit Live-Zustand | | `POST /drucker//` | Pause, Fortsetzen, Abbrechen, Fehler löschen | | `POST /drucker//steuern` | Temperatur, Speed, Flow, Lüfter, ACE | | `POST /drucker//abraeumen` | Platte geräumt (`confirm`) | -| `GET /kamera/`, `/vorschau/` | Snapshot / Job-Thumbnail | -| `GET`/`POST /dateien`, `PATCH`/`DELETE /dateien/` | Bibliothek, Upload, Metadaten | -| `POST /dateien/neu-lesen`, `/dateien/ordner`, `/dateien//verschieben` | Watch-Sync, Ordner, Verschieben | -| `POST /senden`, `GET /sende-auftraege` | Sofort senden (`confirm`), Fortschritt | -| `GET`/`POST /druck-queue`, `PATCH /druck-queue/` | Warteschlange (`confirm` beim Einreihen) | -| `GET /laeuft`, `/aufgaben` | Direktstarts und Platte-belegt | -| `POST /ablauf`, `/schieben-testen` | Ablauf Kobra 3 / Schieben-Test | -| `GET /spulen`, `POST /spulen`, `POST /spulen//einlegen` | Spulen und Einlegen | -| `GET /spulen//akte`, `/spulen/by-code` | Spulenakte, Scan `S-…` | -| `GET`/`POST /materialien`, `/farben` | Sorten und Farbpalette | -| `GET /laeufe`, `/laeufe/aktuell`, `/laeufe/` | Protokoll und Druckbericht | -| `GET /statistik`, `/statistik.csv` | Auslastung und CSV | -| `GET`/`POST /projekte`, `/ideen` | Projekte und Ideen-Backlog | -| `GET /ereignisse`, `POST /ereignisse/gelesen` | Aktivität und Alerts | -| `POST /kalkulation` | Vorkalkulation Material+Strom | +| `GET`/`POST /dateien`, `PATCH`/`DELETE /dateien/` | Bibliothek | +| `POST /senden`, `GET`/`POST /druck-queue` | Senden und Warteschlange (`confirm`) | +| `GET /spulen`, `POST /spulen//einlegen` | Material | +| `GET /laeufe`, `/statistik`, `/ereignisse` | Protokoll und Aktivität | -MCP: `python -m grotti.mcp_server` mit `GROTTI_URL` und `GROTTI_TOKEN` (siehe `docs/internal/MCP.md`). +MCP: `python -m grotti.mcp_server` mit `GROTTI_URL` / `GROTTI_TOKEN` → `docs/internal/MCP.md`. ## Sicherheit -- Login Pflicht (Setup legt den ersten Admin an). Rollen: Admin, Operator. -- Druckstarts brauchen `confirm: true`. Die Oberfläche fragt per Zwei-Klick. -- Keine freie G-code-Konsole; Firmware-Neustart über Grotti ist gesperrt. -- Für Internet: Reverse Proxy mit TLS; nicht den Entwickler-Server öffentlich freigeben. +- 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 und Changelog +## Versionen -- Versionierung nach [SemVer](https://semver.org/lang/de/): Patch für Fehlerbehebung, Minor für neue Funktion, Major für Bruch an API oder Datenbankschema. -- Jede Änderung kommt in `CHANGELOG.md` unter `[Unreleased]` (Neu, Geändert, Behoben). -- Beim Release: Version in `grotti/version.py` setzen, `[Unreleased]` in `[x.y.z] – Datum` umbenennen, Git-Tag `vX.Y.Z`. -- Ändert sich `web/static/grotti.css` oder `api.js`, in `layout.html` den `?v=` hochzählen. +- SemVer in `grotti/version.py`, Einträge in [CHANGELOG.md](CHANGELOG.md). +- Release: `[Unreleased]` → `[x.y.z] – Datum`, Tag `vX.Y.Z`. +- CSS/JS-Cache: `?v=` in `layout.html` mitziehen. -## Repo +--- -Eigenes Repository: . Doku zum Tool gehört nach `docs/`. +

+
+ Repo: git.gundel.dev/dg/grotti +

diff --git a/docs/brand/readme-banner.png b/docs/brand/readme-banner.png new file mode 100644 index 0000000..af0527b Binary files /dev/null and b/docs/brand/readme-banner.png differ diff --git a/docs/community/README.md b/docs/community/README.md index 435ec0c..6e428cf 100644 --- a/docs/community/README.md +++ b/docs/community/README.md @@ -1,6 +1,8 @@ # Grotti — Community-Vorstellung -Screenshots aus dem laufenden Betrieb (v3.2.0, Okt. 2026). Zielgruppe: mittlere bis große Printfarmen. +Screenshots aus dem laufenden Betrieb (v3.4.0, Okt. 2026). Zielgruppe: mittlere bis große Printfarmen. + +Logo und Repo-Banner: [`docs/brand/`](../brand/). Haupt-README: [`../../README.md`](../../README.md). ---