77 lines
5.2 KiB
HTML
77 lines
5.2 KiB
HTML
{% extends "layout.html" %}
|
|
{% from "_doc_toc.html" import doc_toc with context %}
|
|
{% block body %}
|
|
<div class="doc-layout">
|
|
{{ doc_toc('start') }}
|
|
<article class="prose">
|
|
<h1 id="grotti">Grotti <span class="badge">v{{ version }}</span></h1>
|
|
<p class="lede">Grotti steuert die Drucker im Haus von einer Seite aus: sehen, was läuft, Dateien schicken, Aufträge einreihen und nachlesen, was passiert ist.</p>
|
|
<p>Sie läuft auf diesem Rechner und spricht jeden Drucker an. Alles, was die Seiten zeigen, gibt es auch unter <code>/api/v1</code> — mit Login oder API-Token.</p>
|
|
<blockquote>Sicherheit: Ein Druck startet nur nach ausdrücklicher Bestätigung. Es gibt keine freie G-code-Konsole.</blockquote>
|
|
|
|
<h2 id="druck">Ein Druck von A bis Z</h2>
|
|
<div class="flow-diagram">
|
|
<span class="step done">Datei</span><span class="step-sep"></span>
|
|
<span class="step done">Drucker</span><span class="step-sep"></span>
|
|
<span class="step now">Jetzt · Wenn frei · Nächster freier</span><span class="step-sep"></span>
|
|
<span class="step">Druck</span><span class="step-sep"></span>
|
|
<span class="step">Platte räumen</span>
|
|
</div>
|
|
<ol>
|
|
<li><strong>Datei wählen.</strong> Unter <a href="/dateien">Dateien</a> links in der Bibliothek. Der Slice-Ordner wird beobachtet, Hochladen geht per Knopf oder Ziehen.</li>
|
|
<li><strong>Drucker wählen.</strong> Die Kacheln zeigen live, was jeder Drucker gerade tut. Passt die Maschine nicht zur Datei, ist die Kachel blass.</li>
|
|
<li><strong>Wann.</strong> <em>Jetzt</em> startet sofort. <em>Wenn frei</em> reiht für diesen Drucker ein. <em>Nächster freier</em> lässt Grotti den ersten freien passenden Drucker nehmen.</li>
|
|
<li><strong>Starten.</strong> „Jetzt“ will zwei Klicks. Der zweite ist die Bestätigung.</li>
|
|
<li><strong>Während des Drucks</strong> zeigt die <a href="/">Wand</a> Fortschritt, Fertig-Uhrzeit und Temperaturen. Ein Klick auf die Karte öffnet das Cockpit mit Kamera (falls vorhanden), Steuerung, Bettnetz und 3D-Pfad. Die Seitenleiste zeigt immer, was läuft und was wartet.</li>
|
|
<li><strong>Danach</strong> ist die Platte belegt. Ein wartender Auftrag startet erst, wenn auf der Karte <em>Platte geräumt</em> gedrückt wurde, oder ein Ablauf sie selbst freischiebt.</li>
|
|
</ol>
|
|
<p>Ausführlich mit Screenshots: <a href="/doku/Anleitung-Dateien">Dateien senden</a>, <a href="/doku/Anleitung-Wand">Druckerwand</a>.</p>
|
|
|
|
<h2 id="kapitel">Anleitung</h2>
|
|
<p>Schritt für Schritt mit Screenshots. Kurzfassung oben, Details in den Kapiteln.</p>
|
|
<ul class="doc-chapters">
|
|
{% for name in anleitung %}
|
|
<li><a href="/doku/{{ name }}">{{ anleitung_title(name) }}</a></li>
|
|
{% endfor %}
|
|
</ul>
|
|
|
|
<h2 id="haengt">Wenn etwas hängt</h2>
|
|
<dl class="terms">
|
|
<dt>Auftrag wartet und startet nicht</dt><dd>Auf der Karte steht <em>Platte belegt</em>. Platte räumen, dann <em>Platte geräumt</em> drücken.</dd>
|
|
<dt>Drucker im Fehlerzustand</dt><dd>Auf der Karte <em>Fehler löschen</em>. Grotti räumt hängende Fehler vor einem Start selbst, wenn kein Druck aktiv ist.</dd>
|
|
<dt>Ablauf gestoppt</dt><dd>Auf der Karte oder in der Seitenleiste Ursache beheben, dann <em>Weiter</em> (ab dem fehlgeschlagenen Schritt) oder Verwerfen. Unter <a href="/aktivitaet">Aktivität</a> steht, welcher Schritt zuletzt lief.</dd>
|
|
<dt>Drucker offline</dt><dd>Strom und WLAN prüfen. Grotti meldet, wenn er wieder da ist.</dd>
|
|
<dt>ACE startet nicht</dt><dd>Unter Optionen die ACE-Zuordnung prüfen. Ohne Zuordnung kommt oft „cannot parse“.</dd>
|
|
</dl>
|
|
<p>Mehr Fälle: <a href="/doku/Anleitung-Stoerungen">Störungen</a>.</p>
|
|
|
|
<h2 id="begriffe">Begriffe</h2>
|
|
<dl class="terms">
|
|
<dt>Auftrag</dt><dd>Ein Eintrag in der Warteschlange: eine Datei für einen Drucker oder für den nächsten freien.</dd>
|
|
<dt>Ablauf</dt><dd>Auftrag mit mehreren Schritten und Wiederholungen. Nur Kobra 3.</dd>
|
|
<dt>Wenn frei</dt><dd>Startet, sobald der Drucker bereit und die Platte geräumt ist.</dd>
|
|
<dt>Platte belegt</dt><dd>Nach jedem Druck gesetzt. Blockiert den nächsten Auftrag auf diesem Drucker.</dd>
|
|
<dt>Alert</dt><dd>Wichtiges Ereignis (Fertig, Fehler, Abbruch, offline). Steht in der Seitenleiste und geht auf Wunsch an Telegram.</dd>
|
|
<dt>Ereignis</dt><dd>Jeder Eintrag unter Aktivität. Ablauf-Schritte und Starts sind Ereignisse, aber keine Alerts.</dd>
|
|
<dt>API-Token</dt><dd>Persönlicher Schlüssel für App, Home-Automation oder MCP — unter Einstellungen erzeugen.</dd>
|
|
</dl>
|
|
</article>
|
|
</div>
|
|
{% endblock %}
|
|
{% block script %}
|
|
<script>
|
|
(() => {
|
|
const links = [...document.querySelectorAll(".doc-toc a[data-sec]")];
|
|
const sections = links.map((a) => document.getElementById(a.dataset.sec)).filter(Boolean);
|
|
if (!sections.length || !("IntersectionObserver" in window)) return;
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach((entry) => {
|
|
if (!entry.isIntersecting) return;
|
|
links.forEach((a) => a.classList.toggle("on", a.dataset.sec === entry.target.id));
|
|
});
|
|
}, { rootMargin: "0px 0px -70% 0px" });
|
|
sections.forEach((s) => observer.observe(s));
|
|
})();
|
|
</script>
|
|
{% endblock %}
|