# Makros und G-code: Kobra S1 und Kobra 3 Stand **19.10.2026**. Interne Referenz — nicht unter `/doku`. Messwerte und Bettnetz-Story: `D:\Projekte\3DP\FDM\Wissen\Drucker\` (`Kobra S1.md`, `Kobra 3.md`). Stack: [Anycubic-Stack](Anycubic-Stack.md). Quellen: `printer/gcode/help` (11.10. auf den Maschinen), GoKlipper/`extras_ace.go`, Rinkhals-RE `GOKLIPPER_ACE_GCODE_COMMANDS.md`, Grotti-Policy. --- ## Nicht tun | Nicht | Warum | Stattdessen | | --- | --- | --- | | `FIRMWARE_RESTART` / `RESTART` | gklib Deadlock bis Power-Cycle (Rinkhals #32) | Display-Reboot oder Strom; hängenden Job: **Fehler löschen** (`SDCARD_RESET_FILE`) | | `LEVIQ` / `LEVIQ2` aus Mainsail | Heizung + volle Nivellierfolge, fährt unerwartet | Am Display Auto-Level; Einzelschritte nur bewusst | | `SAVE_CONFIG` aus Mainsail | schreibt u. a. Z-Offset mit | Dauerhaft nur gezielt / nach Display-Nivellieren | | Nur Moonraker-Cancel | Anycubic-Task bleibt → Start-Code **10101** | Cancel + MQTT-stop (Grotti `abbrechen`) | | Community-`ACE_SET_SLOT` / manuelles `G9111` als Grotti-Pfad | Grotti mappt über `.acm` + MQTT | Map in der App; Slice-`G9111` im Start-G-code belassen | | `minimum_cruise_ratio` auf **0** (S1) | Moonraker hängt auf dieser Firmware | bei **0,05** belassen | | `G28 Y` mit Teilen auf dem Bett (K3) | Sensorless-Home nach **vorn** über die Teile | Bett leeren; Abräumen ohne `G28 Z` | | Blind `FEED` / `FEED_FILAMENT` ohne Unwind | Blockade bis Neustart (RE-Doku) | Unload/Unwind-Sequenz einhalten | | `SET_KINEMATIC_POSITION` mit erfundener Z nach Stepper-aus | Portal sackt → Null daneben, Probe „No trigger“ oder Crash | echte letzte XYZ; oder Bett leer + `G28` | | Freie G-code-Konsole in Grotti für Experimente | Policy | nur bekannte, bestätigte Scripts | | Abräumen-Makro in `printer.cfg` pflegen | Rinkhals schreibt Config neu | Grotti schickt Scripts per Moonraker | --- ## Vanilla-Klipper-Alltag (beide Typen) Befehl → was er macht. Anycubic-Hinweis nur wo nötig. ### Homes und Bewegung | Befehl | Funktion | | --- | --- | | `G28` | Homed die genannten Achsen (ohne Argument: alle). **K3:** Y-Home fährt nach vorn — Bett muss leer sein. | | `G0` / `G1` | Lineare Bewegung / Extrusion. Absolute/relative Modi wie üblich (`G90`/`G91`, `M82`/`M83`). | | `M400` | Wartet, bis alle Moves fertig sind. | | `SET_VELOCITY_LIMIT` | Limits für Speed/Accel zur Laufzeit. | | `SET_KINEMATIC_POSITION` | Setzt die interne Position ohne zu fahren. Nach `M84`/Leerlauf riskant — siehe „Nicht tun“. | | `SET_IDLE_TIMEOUT` | Idle-Zeit bis Stepper aus. Abräumen hält Idle bewusst länger. | | `M84` / `M18` | Stepper aus → Achsen unhomed. Slice-Ende K3 macht das oft; Abräumen entfernt es beim Upload. | ### Heizen | Befehl | Funktion | | --- | --- | | `M104` / `M109` | Düse Soll / warten bis erreicht. | | `M140` / `M190` | Bett Soll / warten. | | `TURN_OFF_HEATERS` | Düse und Bett aus. | | `PID_CALIBRATE` | PID für Extruder oder Bett kalibrieren. Danach oft `SAVE_CONFIG` — auf diesen Maschinen vorsichtig. | | `M106` / `M107` | Teilkühlung an / aus. | ### Drucklauf | Befehl | Funktion | | --- | --- | | `PAUSE` / `RESUME` / `CANCEL_PRINT` | Rinkhals-Makros um Pause/Weiter/Abbruch. Moonraker-Cancel allein räumt den Anycubic-Task nicht. | | `SDCARD_RESET_FILE` | Löscht hängenden virtual-sdcard-/Druckstatus („Fehler löschen“ in Grotti). | | `PRINT_STATS` | Status des laufenden/letzten Jobs (Objekt auch über Moonraker). | ### Bettnetz und Probe | Befehl | Funktion | | --- | --- | | `BED_MESH_CALIBRATE` | Tastet das Netz und schaltet es aktiv. | | `BED_MESH_OUTPUT` | Gibt die Punkte aus, ohne zu fahren. | | `BED_MESH_MAP` | Schreibt das interpolierte Netz in die Konsole. | | `BED_MESH_CLEAR` | Schaltet die Korrektur aus. | | `BED_MESH_OFFSET` | Verschiebt das Netz in X/Y. | | `BED_MESH_PROFILE` | `LOAD` / `SAVE` / `REMOVE` für Profile. Dauerhaft erst mit `SAVE_CONFIG`. | | `PROBE` | Ein Tastpunkt an der aktuellen Position. | | `PROBE_ACCURACY` | Mehrfach tasten, Streuung ausgeben. | | `PROBE_CALIBRATE` | Sensor kalibrieren (nicht der Z-Regler am Display). | | `Z_OFFSET_APPLY_PROBE` | Laufenden G-code-Offset in `probe.z_offset` schreiben. | | `SET_GCODE_OFFSET` | Offset nur für den aktuellen Auftrag. | | `SAVE_CONFIG` | Schreibt Config dauerhaft — **nicht** blind aus Mainsail. | ### Diagnose | Befehl | Funktion | | --- | --- | | `QUERY_ENDSTOPS` / `M119` | Endstop-Zustände. | | `GET_POSITION` / `M114` | Toolhead-/Stepper-Position. | | `QUERY_ADC` | ADC-Werte (z. B. Thermistoren). | | `DUMP_TMC` | TMC-Register (Stepper nennen). | ### Slice-Start Anycubic | Befehl | Funktion | | --- | --- | | `G9111` | Vorheizen aus dem Slicer: typisch `bedTemp=…` und `extruderTemp=…`. Steht im Maschinen-Start-G-code. Grotti ersetzt das nicht und startet auch nicht darüber. | --- ## ACE (gemeinsam) Zwei Namenswelten: 1. **Open-Source** GoKlipper `extras_ace.go` (BunnyACE-Stil): `ACE_CHANGE_TOOL`, `ACE_FEED`, `ACE_RETRACT`, `ACE_SET_SLOT`, `ACE_QUERY_SLOTS`, `ACE_START_DRYING` / `ACE_STOP_DRYING`, Feed-Assist, Endless Spool, … 2. **Ausgeliefertes Binary** (Rinkhals-RE): u. a. `FEED_FILAMENT`, `UNWIND_FILAMENT`, `UNWIND_ALL_FILAMENT`, `SET_CURRENT_FILAMENT`, `ACE_INFO`, `ACE_STATUS`, Cutter-/Pipe-Befehle. Grotti nutzt **keine** Community-Makros `ACE_SET_SLOT` / manuelles Tool-Mapping per G-code. Zuordnung: Sidecar `.acm` + MQTT `ams_settings` ([Senden-Queue](Senden-Queue.md), [ACE-Live](ACE-Live.md)). Slots anzeigen: Moonraker-Objekt `mmu` (Rinkhals). Trocknen: Moonraker `POST /server/filament_hub/start_drying` (nicht zwingend der G-code). | Befehl (Auswahl) | Funktion | | --- | --- | | `ACE_CHANGE_TOOL` / Tool-Macros `T0`… | Werkzeugwechsel über ACE. | | `ACE_FEED` / `FEED_FILAMENT` | Filament vom Gate zur Düse laden. **Vorher unloaden.** | | `ACE_RETRACT` / `UNWIND_FILAMENT` | Zurückziehen / parkieren. | | `ACE_SET_SLOT` | Inventar Slot setzen — Grotti meidet das. | | `ACE_START_DRYING` / `ACE_STOP_DRYING` | Trockner; alternativ `filament_hub`-API. | | `ACE_ENABLE_ENDLESS_SPOOL` / `…_DISABLE` / `…_STATUS` | Endless Spool. | Details und Parameter: Rinkhals `docs/GOKLIPPER_ACE_GCODE_COMMANDS.md` (lokal unter `D:\Projekte\_ref\Rinkhals\`). --- ## Kobra S1 — Anycubic-Makros Config-Sektion heißt `[leviQ3]`, die Befehle auf dem Gerät heißen **`LEVIQ2`**. Stecken in GoKlipper. Hilfe gelesen 11.10. über `printer/gcode/help`. ### LeviQ2 | Befehl | Funktion | | --- | --- | | `LEVIQ2` | Ganze Nivellierfolge: heizen, wischen, antasten. **Nicht** aus Mainsail. `SYNC=enable` startet danach neu. | | `LEVIQ2_PREHEATING` | Vorheizen: Bett 55 °C, Düse 170 °C, dann `HOME_XY`. `S` = Düsentemp, `E` = Temp nach dem Wischen. | | `LEVIQ2_WIPING` | Wischen: Netz löschen, Düse auf 140 °C, intern `G9112`, dann `G28 Z`. | | `LEVIQ2_PROBE` | Antasten: `BED_MESH_CALIBRATE`, Lüfter/Bett aus, Z auf 20 mm, `HOME_XY`, Düse aus. | | `LEVIQ_SET_ZERO` | Z-Basis und Home-Position auf 0. | | `LEVIQ2_AUTO_ZOFFSET` | Löscht laut Hilfe den Koeffizienten K. | | `LEVIQ2_AUTO_ZOFFSET_ON_OFF` | Schaltet automatischen Z-Offset. | | `LEVIQ2_TEMP_OFFSET` | Temperaturausgleich (`expansion_factor` / `zoffset_base` in der Config). Fehlt im veröffentlichten Quelltext. | | `HOME_XY` | Nur X/Y homen (von LeviQ-Schritten genutzt). | Netz: 5×5, X/Y 5–245 mm. Details: Wissen `Kobra S1.md`. ### Wipe (Pad hinten) | Befehl | Funktion | | --- | --- | | `WIPE_ENTER` | Anfahrt Pad (Y 250 → X 81, Y 273). | | `WIPE_NOZZLE` | Wischbahn; wiederholt die Strecke X 96↔81. | | `WIPE_STOP` | Kurze Stopp-Bahnen, dann X 75. | | `WIPE_EXIT` | Weg vom Pad (X 83, Y 250). | | `TO_THROW_POSITION` | Position zum Abwerfen (~X 47, Y 276). | | `MOVE_TO_SWEEP_POSITION` | Wisch-/Kehrposition (gleiche Gegend). | | `MOVE_TO_IMPACT_POSITION` | Weg vom Pad nach vorn rechts (Y 25, X 261). | | `PRINT_LINE` | Purge-Linie bei Y 251, Z 0,28 bis X 125. | --- ## Kobra 3 — Anycubic-Makros Befehle gelesen 11.10. auf `da26` (`92ee`/`6e41` gleiche `printer.generated.cfg`). Im veröffentlichten Quelltext heißen Teile noch `LEVIQ3_*` / `LEVIQ2_PROBE` — auf den drei Druckern gelten die Namen unten. ### LeviQ | Befehl | Funktion | | --- | --- | | `LEVIQ` | Ganze Folge inkl. Z-Offset-Rechnung. **Nicht** aus Mainsail. `SYNC=enable` startet danach neu. | | `LEVIQ_PREHEATING` | Z-Basis 0, Bett 60 °C, Düse 170 °C, `HOME_XY`, auf Düse warten. `S` / `E` wie bei S1. | | `LEVIQ_WIPING` | Netz löschen, Düse 140 °C, `G9112`, `G28 Z`. | | `LEVIQ_PROBE` | `BED_MESH_CALIBRATE`, Lüfter/Bett aus, Z auf 30 mm, `HOME_XY`, Düse aus. | | `LEVIQ_SET_ZERO` | Z-Basis und Home auf 0. | | `LEVIQ_AUTO_ZOFFSET` | Löscht Koeffizient K (Hilfe). | | `LEVIQ_AUTO_ZOFFSET_ON_OFF` | Automatischen Z-Offset schalten (oft an). | | `LEVIQ_TEMP_OFFSET` | Temperaturausgleich (Hilfezeile „LEVIQ3 TEMP OFFSET“). Fehlt im Open-Source-Code. | | `HOME_XY` | Nur X/Y homen. | Netz: 5×5, X 15–240, Y 15–235 mm. Details: Wissen `Kobra 3.md`. ### Wipe | Befehl | Funktion | | --- | --- | | `WIPE_NOZZLE` | Dreimal `SINGLE_WIPE_NOZZLE` (Y 260/259, X 46–90, Z −0,8↔1, Lüfter an). | | `SINGLE_WIPE_NOZZLE` | Eine einzelne Wischbahn. | | `MOVE_HEAT_POS` | Z 15, dann X 278 (Heiz-/Parknahe Position). | | `UNDERLINE` | Purge-Linie Z 0,28 bis X 180, ~40 mm Extrusion. | | `MOVE_END_POS` | Ende/Park X 5, Y 242. | ### Wägezelle | Befehl | Funktion | | --- | --- | | `CS1237_DUMP` | Debug-Ausgabe zum CS1237 (Z-Sensor / Kraft). Moonraker liefert keine laufende Gramm-Anzeige; `probe.last_z_result` fehlt. | --- ## Siehe auch - [Anycubic-Stack](Anycubic-Stack.md) — MQTT-Start/Stop, 10101, kein Firmware-Restart - [Senden-Queue](Senden-Queue.md) — `.acm`, kein Community-ACE-Makro - [Abraeumen](Abraeumen.md) — K3 Farm-Scripts statt Druckermakro - [ACE-Live](ACE-Live.md) — Live-Mapping und Trailer