Grotti 2.2.0: Auth, API-Tokens, MCP und Doku-Trennung.
This commit is contained in:
1 parent
b20f8a7779
commit
5a3716b26a
65 files changed
+2212
-198
No files matched your search
@@ -0,0 +1,39 @@
|
||||
# ACE und Spulen
|
||||
|
||||
Stand **15.10.2026**. Mehrfarb-Drucke brauchen vor dem Start eine Zuordnung Datei-Farbe → ACE-Platz und eine passende Spule am Drucker.
|
||||
|
||||

|
||||
|
||||
## Spule einlegen
|
||||
|
||||
1. Unter **Material → Spulen** die Rolle wählen oder anlegen.
|
||||
2. Ort = Drucker und **ACE-Platz** (1–8) oder externe Spule.
|
||||
3. Materialtyp und Farbe sollten zur Slice-Datei passen.
|
||||
|
||||
Es gibt **kein freies Spulen-Dropdown** beim Start: Grotti nimmt die Rolle(n), die am Ziel-Drucker liegen. Material-Mismatch oder zu wenig Rest → Warnung vor dem Start.
|
||||
|
||||
Etiketten mit QR: [Material und mehr](Anleitung-Material).
|
||||
|
||||
## ACE-Map beim Senden
|
||||
|
||||
Unter **Dateien → Optionen → ACE-Zuordnung**:
|
||||
|
||||
- Jede Farbe aus der Datei (`paint_index`) einem **ACE-Platz** zuordnen
|
||||
- Ohne passende Map schreibt der Drucker oft **„cannot parse the file“** und startet nicht
|
||||
- Grotti legt die Sidecar `*.gcode.acm` an und schickt sie mit
|
||||
|
||||
Externe Spule / keine ACE-Slots: keine `.acm` nötig.
|
||||
|
||||
## Typische Fehler
|
||||
|
||||
| Symptom | Check |
|
||||
| --- | --- |
|
||||
| „cannot parse the file“ | ACE-Zuordnung vollständig? Farben richtig? |
|
||||
| Material-Warnung | Eingelegte Sorte ≠ Datei — Spule wechseln oder Slice prüfen |
|
||||
| Rest zu gering | Andere Spule oder leichteres Teil |
|
||||
| ACE blinkt nicht / kein Wechsel | Spule und Platz prüfen, ggf. Druck neu starten |
|
||||
|
||||
## Weiter
|
||||
|
||||
- [Dateien senden](Anleitung-Dateien)
|
||||
- [Material](Anleitung-Material)
|
||||
@@ -0,0 +1,49 @@
|
||||
# Dateien senden
|
||||
|
||||
Stand **15.10.2026**. Seite `/dateien` — Bibliothek links, Senden rechts.
|
||||
|
||||

|
||||
|
||||
## Bibliothek
|
||||
|
||||
- Suche, Filter nach Maschine und Projekt
|
||||
- Vorschaubild, Material, Zeit, Gewicht, Schichthöhe
|
||||
- Info-Popup mit Slice-Metadaten (Kopf und Footer)
|
||||
- **Hochladen** per Knopf oder Drag & Drop
|
||||
- **Ordner neu lesen**, wenn `watch_dir` in der Config auf den Slice-Ordner zeigt
|
||||
|
||||
Ohne `watch_dir` geht nur manueller Upload — das reicht für den Alltag.
|
||||
|
||||
## Senden: drei Schritte
|
||||
|
||||
1. **Datei** wählen (Klick in der Liste).
|
||||
2. **Drucker** wählen — Kacheln zeigen Live-Zustand und eingelegte Rolle. Passt die Maschine nicht, ist die Kachel blass.
|
||||
3. **Wann:**
|
||||
- **Jetzt** — sofort senden und starten (Zwei-Klick)
|
||||
- **Wenn frei** — in die Warteschlange für diesen Drucker
|
||||
- **Nächster freier** — erster passender freier Drucker
|
||||
|
||||
Auswahl merkt sich der Browser (`localStorage`).
|
||||
|
||||
### Optionen
|
||||
|
||||
Unter Optionen u. a.:
|
||||
|
||||
- **Bettnetz / Auto-Level** beim MQTT-Start (Anycubic)
|
||||
- Maschinen-Override, Projekt zuweisen
|
||||
- **ACE-Zuordnung** — siehe [ACE und Spulen](Anleitung-ACE)
|
||||
|
||||
## Warum es dauert
|
||||
|
||||
Große Dateien brauchen oft **eine Minute**. In der Sidebar unter **Senden** siehst du den MB-Fortschritt. Danach startet der Druck.
|
||||
|
||||
## Nach dem Start
|
||||
|
||||
- Fortschritt auf der [Wand](Anleitung-Wand) und in der Sidebar **Läuft jetzt**
|
||||
- Bei „Wenn frei“: Eintrag unter [Warteschlange](Anleitung-Warteschlange)
|
||||
- Später unter **Protokoll** mit **Nochmal** (inkl. gespeicherter ACE-Map)
|
||||
|
||||
## Weiter
|
||||
|
||||
- [ACE und Spulen](Anleitung-ACE)
|
||||
- [Warteschlange](Anleitung-Warteschlange)
|
||||
@@ -0,0 +1,66 @@
|
||||
# Einrichtung
|
||||
|
||||
Stand **15.10.2026**. Grotti auf dem Haus-PC installieren und den Browser öffnen. Die Drucker brauchen vorher Moonraker (Rinkhals auf Kobra 3 und S1).
|
||||
|
||||
## Was du brauchst
|
||||
|
||||
- Python 3.11
|
||||
- PostgreSQL (leere Datenbank `grotti` reicht; Schema legt Grotti an)
|
||||
- Drucker im selben Netz, Moonraker auf Port 80
|
||||
- Dieses Repo und eine `config.json`
|
||||
|
||||
## Einmalig einrichten
|
||||
|
||||
Im Projektordner:
|
||||
|
||||
```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. Die wichtigsten Schlüssel:
|
||||
|
||||
| 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, den Grotti beobachtet. Leer = nur manueller Upload. |
|
||||
| `token` | Optionaler Shared-API-Token (Übergang). Mit Benutzerverwaltung nutzt du API-Tokens unter Einstellungen. |
|
||||
| `fqdn` | Öffentliche Basis-URL für QR auf Spulen-Etiketten. Leer = Request-Host. |
|
||||
| `auto_queue` | `false` stoppt neue „wenn frei“-Starts. |
|
||||
| `energy`, `telegram`, `alerts` | Kosten im Protokoll und Telegram — später auch unter Einstellungen. |
|
||||
| `secret_key` | Für Login-Sessions. Beim ersten Start wird ein Wert erzeugt, wenn leer. |
|
||||
|
||||
Drucker beim ersten Start über `drucker.json` (Seed). Danach pflegt man sie unter [Einstellungen](Anleitung-Einstellungen).
|
||||
|
||||
```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 <http://127.0.0.1:8770/> öffnen. Beim ersten Start legst du den Admin-Benutzer an. Nach Code-Änderungen an Python oft neu starten.
|
||||
|
||||

|
||||
|
||||
## Sicherheit
|
||||
|
||||
- Druckstart nur mit Bestätigung (Zwei-Klick in der UI bzw. `confirm: true` in der API).
|
||||
- Keine freie G-code-Konsole; Firmware-Neustart über Grotti ist gesperrt.
|
||||
- Benutzer und API-Tokens unter Einstellungen. Für Zugriff aus dem Internet: Reverse Proxy mit TLS, nicht den Entwickler-Server öffentlich freigeben.
|
||||
- `config.json` und `data/` bleiben lokal, nicht im Git.
|
||||
|
||||
## Weiter
|
||||
|
||||
- [Oberfläche](Anleitung-Oberflaeche) — Navigation und Sidebar
|
||||
- [Dateien senden](Anleitung-Dateien) — erster Druck
|
||||
- Ausführlich im `README.md` im Projektordner
|
||||
@@ -0,0 +1,44 @@
|
||||
# Einstellungen
|
||||
|
||||
Stand **15.10.2026**. Seite `/einstellungen` — Drucker, Automatik, Anzeige, Telegram, Energie.
|
||||
|
||||

|
||||
|
||||
## Dieser Browser
|
||||
|
||||
- **Desktop** oder **Regal (Touch)** — nur lokal im Browser, siehe [Oberfläche](Anleitung-Oberflaeche).
|
||||
|
||||
## Automatik
|
||||
|
||||
Checkbox **Automatik-Warteschlange** (`auto_queue`). Aus = keine neuen „wenn frei“-Starts. Laufende Abläufe und manuelle „Jetzt“-Starts bleiben möglich.
|
||||
|
||||
## Drucker
|
||||
|
||||
Tabelle: Name, Host, Familie, **gesperrt**.
|
||||
|
||||
- Seed beim allerersten Start aus `drucker.json`, danach nur noch hier (Datenbank).
|
||||
- Familie aus dem Namen (Kobra 3 / S1) oder gesetzt.
|
||||
- **Gesperrt:** keine neuen Queue-Starts auf diesem Host.
|
||||
|
||||
## FQDN
|
||||
|
||||
Öffentliche Basis-URL für QR-Codes auf Spulen-Etiketten. Leer = Host aus dem aktuellen Request. Wichtig, wenn du Etiketten von einem Handy scannst, das nicht `127.0.0.1` kennt.
|
||||
|
||||
## Telegram und Alerts
|
||||
|
||||
Bot-Token und Chat-ID. Pro Ereignisart an/aus (Fertig, Fehler, Offline, Queue, …). Test-Knopf zum Prüfen. Wichtige Ereignisse stehen auch in der Sidebar unter Alerts.
|
||||
|
||||
## Benutzer und API-Tokens
|
||||
|
||||
Unter **Benutzer** (nur Admin) legst du Konten mit Rolle Admin oder Operator an. Unter **API-Tokens** erzeugst du Schlüssel für Home-Automation, App oder MCP — der Klartext erscheint nur einmal (`Authorization: Bearer grt_…`).
|
||||
|
||||
MCP (optional): Token erzeugen, dann `python -m grotti.mcp_server` mit `GROTTI_URL` und `GROTTI_TOKEN`. Für nur Lesen: `GROTTI_MCP_READ_ONLY=1`.
|
||||
|
||||
## Energie
|
||||
|
||||
Watt und Strompreis für die Kosten im **Protokoll**. Optional Trockner/Ausschuss/Auslastung für die Kalkulation.
|
||||
|
||||
## Weiter
|
||||
|
||||
- [Einrichtung](Anleitung-Einrichtung) (Config-Datei)
|
||||
- [Störungen](Anleitung-Stoerungen)
|
||||
@@ -0,0 +1,42 @@
|
||||
# Material und mehr
|
||||
|
||||
Stand **15.10.2026**. Spulen, Etiketten, Projekte, Protokoll, Kameras, Aktivität und Ideen.
|
||||
|
||||

|
||||
|
||||
## Material
|
||||
|
||||
Zwei Reiter: **Spulen** und **Sorten**.
|
||||
|
||||
**Spulen:** Filter Alle / Am Drucker / Regal / Wenig Rest. Formular bei Auswahl oder „Neue Spule“. Ort = Drucker · ACE/extern oder Regal. Scan-Feld im Seitenkopf (QR vom Etikett).
|
||||
|
||||
**Sorten:** Profile (Dichte, Preis, Maschinen). „Spule damit anlegen“ wechselt zum Spulen-Reiter.
|
||||
|
||||
### Etikett und QR
|
||||
|
||||
Pro Spule ein Etikett mit Chargennummer und QR. Der Code öffnet Material mit der Spule vorausgewählt. Dafür in den Einstellungen ggf. **FQDN** setzen (öffentliche URL), sonst gilt der Host aus dem Request.
|
||||
|
||||
## Projekte
|
||||
|
||||
Unter **Projekte** Aufträge mit Notiz und Kalkulation. Dateien lassen sich einem Projekt zuweisen (Bibliothek / Senden).
|
||||
|
||||
## Protokoll
|
||||
|
||||
Abgeschlossene Läufe: Dauer, Gramm, Kosten, Urteil. **Nochmal** startet denselben Job inkl. gespeicherter ACE-Map und Bettnetz-Option.
|
||||
|
||||
## Kameras
|
||||
|
||||
`/kameras` — alle Snapshots nebeneinander mit Live-Zustand. Praktisch auf dem Regal-Tablet.
|
||||
|
||||
## Aktivität
|
||||
|
||||
Zeitstrahl: Starts, Schritte, Fertig, Fehler, Abbrüche, offline. Filter nach Drucker, Art, Zeitraum. Ungelesene Alerts sind markiert; in der Sidebar kannst du sie als gelesen setzen.
|
||||
|
||||
## Ideen
|
||||
|
||||
`/ideen` — Notizen und Ideen für später. Kein Druckfluss, nur Merkliste.
|
||||
|
||||
## Weiter
|
||||
|
||||
- [ACE und Spulen](Anleitung-ACE)
|
||||
- [Einstellungen](Anleitung-Einstellungen)
|
||||
@@ -0,0 +1,37 @@
|
||||
# Oberfläche
|
||||
|
||||
Stand **15.10.2026**. Wie die App aufgebaut ist — Menü, Live-Leiste, Desktop und Regal.
|
||||
|
||||
## Navigation
|
||||
|
||||
Links (Desktop): **Drucker**, **Dateien**, **Kameras**, **Aktivität**, **Warteschlange**, **Protokoll**, **Material**, **Projekte**. Darunter **Einstellungen**, **Ideen**, **Doku**. Fuß: Version (öffnet die Doku).
|
||||
|
||||
Unter ca. 760 px: untere Leiste mit den wichtigsten Seiten. Das Seitenmenü lässt sich zur Icon-Rail einklappen.
|
||||
|
||||

|
||||
|
||||
## Live-Leiste
|
||||
|
||||
Unter dem Menü, eigene Scrollfläche. Boxen auf- und zuklappbar (Merker im Browser):
|
||||
|
||||
| Box | Inhalt |
|
||||
| --- | --- |
|
||||
| **Läuft jetzt** | Laufende Aufträge und Abläufe, Schrittleiste, Abbrechen. Auch Direktstarts ohne Queue-Zeile. |
|
||||
| **Wartet** | Wartende Aufträge: Priorität, Abbrechen. Gestoppte Abläufe mit Fortsetzen. |
|
||||
| **Aufgaben** | Platte belegt ohne laufenden Ablauf — **geräumt** (Zwei-Klick). |
|
||||
| **Senden** | Uploads mit MB-Fortschritt. |
|
||||
| **Alerts** | Ungelesene wichtige Ereignisse; als gelesen markieren oder zur Aktivität. |
|
||||
|
||||
## Desktop und Regal
|
||||
|
||||
Unter **Einstellungen → Dieser Browser**:
|
||||
|
||||
- **Desktop** — normale Dichte
|
||||
- **Regal (Touch)** — größere Bedienelemente, kompaktere Nav, Sidebar oft eingeklappt
|
||||
|
||||
Shortcut in der URL: `?shelf=1` bzw. `?shelf=0`. Nur dieser Browser (`localStorage`).
|
||||
|
||||
## Weiter
|
||||
|
||||
- [Druckerwand](Anleitung-Wand)
|
||||
- [Dateien senden](Anleitung-Dateien)
|
||||
@@ -0,0 +1,56 @@
|
||||
# Störungen
|
||||
|
||||
Stand **15.10.2026**. Was tun, wenn etwas hängt. Kurzfassung auch auf der [Doku-Startseite](/doku#haengt).
|
||||
|
||||
## Auftrag startet nicht
|
||||
|
||||
| Anzeige | Maßnahme |
|
||||
| --- | --- |
|
||||
| **Platte belegt** | Teil runter, dann **Platte geräumt** (Karte oder Sidebar → Aufgaben). |
|
||||
| Drucker **gesperrt** | Unter Einstellungen entsperren. |
|
||||
| Automatik aus | Einstellungen → Automatik-Warteschlange an. |
|
||||
| Falsche Maschine | Andere Datei oder anderen Drucker wählen. |
|
||||
|
||||
## Fehlerzustand auf dem Drucker
|
||||
|
||||
Auf der Karte **Fehler löschen** (Zwei-Klick). Grotti räumt den hängenden Fehler und schaltet die Heizung aus. Ein Neustart der Firmware über Grotti ist absichtlich nicht möglich — bei Bedarf Display-Neustart oder Strom aus/an.
|
||||
|
||||
Hängende Fehler vor einem Start räumt Grotti oft selbst, wenn kein Druck aktiv ist.
|
||||
|
||||
## Ablauf gestoppt
|
||||
|
||||
1. Grund in Sidebar / Karte / Aktivität lesen (Schieben, Tasten, Timeout, …).
|
||||
2. Mechanisch klären (Kiste, Teil, Platte).
|
||||
3. **Weiter** ab dem fehlgeschlagenen Schritt — oder Verwerfen und neu einreihen.
|
||||
|
||||
## Start scheitert nach Abbruch
|
||||
|
||||
Manchmal bleibt nach einem Abbruch ein alter Auftrag auf dem Drucker hängen. Der nächste Start scheitert dann oft mit einer Fehlermeldung (z. B. Code **10101**).
|
||||
|
||||
Was tun: Abbruch über Grotti (nicht nur am Display), auf der Wand den Task-Hinweis prüfen, erneut starten. Bleibt es hängen: Strom aus und wieder an.
|
||||
|
||||
## ACE / „cannot parse“
|
||||
|
||||
ACE-Zuordnung unter Dateien → Optionen prüfen. Spulen am richtigen Platz. Siehe [ACE und Spulen](Anleitung-ACE).
|
||||
|
||||
## Offline
|
||||
|
||||
Strom, WLAN und Erreichbarkeit des Druckers prüfen. Grotti meldet „wieder erreichbar“ unter Aktivität und ggf. Telegram.
|
||||
|
||||
## E-Stop
|
||||
|
||||
Im Cockpit (nur bei aktivem Druck/Heizen). Danach oft **Strom aus und wieder an**. Firmware-Neustart über Grotti ist absichtlich gesperrt.
|
||||
|
||||
## Upload hängt bei großen Dateien
|
||||
|
||||
Oft noch Verarbeitung auf dem Drucker. In der Sidebar unter **Senden** den Fortschritt beobachten. Nach einem Grotti-Update den Dienst einmal neu starten.
|
||||
|
||||
## Wo nachschauen
|
||||
|
||||
- Sidebar: Alerts, Läuft, Wartet, Senden
|
||||
- **Aktivität** — Zeitstrahl mit Filtern
|
||||
|
||||
## Weiter
|
||||
|
||||
- [Druckerwand](Anleitung-Wand)
|
||||
- [Warteschlange](Anleitung-Warteschlange)
|
||||
@@ -0,0 +1,54 @@
|
||||
# Druckerwand
|
||||
|
||||
Stand **15.10.2026**. Startseite `/` — eine Karte je Drucker. Klick öffnet das Cockpit.
|
||||
|
||||

|
||||
|
||||
## Karte
|
||||
|
||||
Pro Drucker siehst du:
|
||||
|
||||
- Zustand (Chip), Fertig-Uhrzeit, Fortschrittsbalken
|
||||
- Restzeit, Schicht, Laufzeit
|
||||
- Temperaturen Düse/Bett (mit Ziel)
|
||||
- Dateiname, bei ACE oft Farb-Swatches
|
||||
- Bei Ablauf: Schrittleiste und Abbrechen
|
||||
|
||||
Aktionen auf der Karte brauchen oft **zwei Klicks** (erster Klick „scharf“, zweiter bestätigt):
|
||||
|
||||
| Aktion | Wann |
|
||||
| --- | --- |
|
||||
| **Pause** / **Weiter** | Während des Drucks |
|
||||
| **Abbrechen** | Druck oder Pause |
|
||||
| **Fehler löschen** | Zustand Fehler — räumt den hängenden Fehler, Heizung aus |
|
||||
| **Platte geräumt** | Nach Fertig, wenn die Platte wieder frei ist |
|
||||
| **Weiter** (Ablauf) | Gestoppter Ablauf — ab dem fehlgeschlagenen Schritt, wenn die Kiste steht |
|
||||
|
||||
Während eines Abräum-Ablaufs blendet Grotti „Platte geräumt“ aus — der Ablauf räumt selbst.
|
||||
|
||||
## Cockpit
|
||||
|
||||
URL mit Hash: `/#<host>` (z. B. nach Klick auf die Karte).
|
||||
|
||||

|
||||
|
||||
Inhalt:
|
||||
|
||||
- **Kamera** — nur wenn eine Webcam erreichbar ist; sonst bleibt der Platz weg
|
||||
- Status, Temps inkl. Bauraum wo verfügbar, Lüfter
|
||||
- **Steuerung:** Zieltemperaturen, Speed, Flow, Fan — fest vorgegebene Befehle, keine freie Konsole
|
||||
- **E-Stop** nur bei printing/paused/heating (Zwei-Klick). Danach oft Strom aus/an
|
||||
- **3D-Pfad** der laufenden oder gewählten Datei; Objekte ausschließen (mit Bestätigung)
|
||||
- **Bettnetz**-Heatmap, wenn vorhanden
|
||||
|
||||
## Tipps
|
||||
|
||||
- Gesperrte Drucker (Einstellungen) starten keine neuen „wenn frei“-Jobs.
|
||||
- Live-Daten kommen mit wenigen Sekunden Verzögerung.
|
||||
- Ein Task-Hinweis auf der Karte zeigt, wenn auf dem Drucker noch ein alter Auftrag hängt — siehe [Störungen](Anleitung-Stoerungen).
|
||||
|
||||
## Weiter
|
||||
|
||||
- [Dateien senden](Anleitung-Dateien)
|
||||
- [Warteschlange und Ablauf](Anleitung-Warteschlange)
|
||||
- [Störungen](Anleitung-Stoerungen)
|
||||
@@ -0,0 +1,52 @@
|
||||
# Warteschlange und Ablauf
|
||||
|
||||
Stand **15.10.2026**. Aufträge „wenn frei“, Priorität, und der Kobra-3-Ablauf (drucken → abkühlen → schieben → tasten).
|
||||
|
||||

|
||||
|
||||
## Seite Warteschlange
|
||||
|
||||
Filter: **Läuft** / **Wartet** / **Fehler** / **Historie** (und „Alle aktiv“).
|
||||
|
||||
Pro Auftrag:
|
||||
|
||||
- Priorität hoch/runter
|
||||
- **Abbrechen**
|
||||
- Bei gestopptem Ablauf: **Fortsetzen** (ab dem fehlgeschlagenen Schritt)
|
||||
|
||||
Unter **Läuft** siehst du auch Direktstarts ohne Queue-Zeile (Link zur Wand).
|
||||
|
||||
Dieselbe Information steht kompakt in der Sidebar (**Läuft jetzt** / **Wartet**).
|
||||
|
||||
## Wann startet ein wartender Auftrag?
|
||||
|
||||
Sobald der Drucker bereit ist (`standby` / fertig / abgebrochen), die **Platte frei** ist und der Drucker nicht gesperrt. Automatik aus (`auto_queue`) oder gesperrt → keine neuen Starts; laufende Abläufe laufen weiter.
|
||||
|
||||
## Ablauf (nur Kobra 3)
|
||||
|
||||
Unter **Dateien → Ablauf** eine Kette bauen und einreihen:
|
||||
|
||||
```text
|
||||
Drucken → Abkühlen → Schieben → Tasten → (Wiederholung)
|
||||
```
|
||||
|
||||
| Schritt | Bedeutung |
|
||||
| --- | --- |
|
||||
| **Abkühlen** | Wartet, bis Bett und Düse unter der Grenze sind. PLA löst sich oft von selbst. |
|
||||
| **Schieben** | Extruder schiebt das Teil von hinten nach vorn in die Kiste. |
|
||||
| **Tasten** | LeviQ-Netz tippt; Maß aus `Result is z=`. Über 1 mm stoppt den Ablauf. |
|
||||
|
||||
Aktueller Schritt: auf der Druckerkarte und in der Sidebar. Abbrechen an beiden Stellen. Jeder Schritt landet unter **Aktivität**.
|
||||
|
||||
**Schieben testen** und „Bett ist leer“: im Ablauf-Reiter, bevor du unbeaufsichtigt läuft.
|
||||
|
||||
## Gestoppter Ablauf
|
||||
|
||||
1. Ursache beheben (Kiste voll, Teil hängt, Tasten zu hoch, …).
|
||||
2. Auf der Karte oder in der Sidebar **Weiter** — nicht nur neu einreihen.
|
||||
3. Oder verwerfen / abbrechen und später neu starten.
|
||||
|
||||
## Weiter
|
||||
|
||||
- [Druckerwand](Anleitung-Wand)
|
||||
- [Störungen](Anleitung-Stoerungen)
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -8,7 +8,7 @@ Jede Spule in Grotti bekommt automatisch eine `chargen_nr` der Form `S-YYYYMMDD-
|
||||
|
||||
Scannen: auf Material den Code tippen oder per USB-Handscanner (Tastatur + Enter). Lookup `GET /api/v1/spulen/by-code/<code>`. QR auf dem Etikett öffnet `/material?spool=<id>`.
|
||||
|
||||
Etikett: `/etikett/<id>`, Druck über den Browser. QR per qrcode.js (CDN). Basis-URL für den QR kommt aus Einstellungen → **FQDN** (`config.json` Key `fqdn`); leer = Host der aktuellen Anfrage. Beispiel: `https://grotti.example.de/material?spool=12`.
|
||||
Etikett: `/etikett/<id>`, Druck über den Browser. QR per lokalem `qrcode.min.js` (`web/static/`). Basis-URL für den QR kommt aus Einstellungen → **FQDN** (`config.json` Key `fqdn`); leer = Host der aktuellen Anfrage. Beispiel: `https://grotti.example.de/material?spool=12`.
|
||||
|
||||
## 3D-Pfad
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -0,0 +1,30 @@
|
||||
# MCP-Server
|
||||
|
||||
Stand **15.10.2026**. Agenten steuern Grotti nur über die HTTP-API mit einem API-Token.
|
||||
|
||||
## Start
|
||||
|
||||
```powershell
|
||||
$env:GROTTI_URL = "http://127.0.0.1:8770"
|
||||
$env:GROTTI_TOKEN = "grt_…" # unter Einstellungen → API-Tokens
|
||||
$env:GROTTI_MCP_READ_ONLY = "1" # optional: nur lesen
|
||||
.\.venv\Scripts\pip install mcp
|
||||
.\.venv\Scripts\python.exe -m grotti.mcp_server
|
||||
```
|
||||
|
||||
## Tools
|
||||
|
||||
| Tool | Schreibend | Confirm |
|
||||
| --- | --- | --- |
|
||||
| `list_printers`, `get_printer`, `list_running`, `list_queue`, `list_events`, `list_files`, `list_spools`, `get_version` | nein | — |
|
||||
| `pause_printer`, `resume_printer` | ja | — |
|
||||
| `cancel_printer`, `clear_bed`, `enqueue_*` | ja | `confirm=true` |
|
||||
| `steer_temp`, `steer_speed`, `steer_fan` | ja | — |
|
||||
|
||||
Nicht exponiert: freie G-code, Firmware-Restart, E-Stop, User/Token/Settings.
|
||||
|
||||
## Sicherheit
|
||||
|
||||
- Token mit Rolle Operator reicht für den Alltag; Admin-Token vermeiden.
|
||||
- Read-only-Flag für vorsichtige Agents.
|
||||
- Server ideal nur lokal; Grotti selbst hinter Login/TLS.
|
||||
File renamed without changes.
@@ -0,0 +1,5 @@
|
||||
# Interne Technik-Notizen
|
||||
|
||||
Diese Dateien sind für Entwicklung und Agenten — **nicht** unter `/doku` in der App.
|
||||
|
||||
Nutzer-Handbuch: `docs/Anleitung-*.md`.
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user