3D-Drucker in Home Assistant: Neptune 4 Pro mit Moonraker einbinden

von Patrick · · 6 Min. Lesezeit · DIY

Dieser Artikel enthält Affiliate-Links. Kaufst du darüber, bekomme ich eine kleine Provision – für dich ändert sich am Preis nichts. Mehr dazu


Mein 3D-Drucker, ein Elegoo Neptune 4 Pro, stand lange als Insel im Haus: Druck starten, ab und zu hinlaufen, nachschauen, am Ende von Hand ausschalten. Weil auf dem Drucker ohnehin Klipper mit Moonraker läuft, lag die Idee nahe, ihn in Home Assistant zu holen. Hier erzähle ich euch, wie ich das umgesetzt habe, welche Automationen bei mir laufen und wo es unerwartet gehakt hat.

Ausgangslage: Klipper, Moonraker und Fluidd ab Werk

Der Neptune 4 Pro bringt ab Werk Klipper als Firmware mit. Dazu gehören Moonraker, eine API-Schicht, über die andere Programme mit Klipper sprechen, und Fluidd als Weboberfläche. Das ist für Home Assistant eine sehr gute Ausgangslage, denn Moonraker liefert praktisch alles, was man wissen will: Druckstatus, Fortschritt, Restzeit, Temperaturen, Dateiname und mehr.

Diagramm: Der Neptune 4 Pro liefert über Moonraker Daten an Home Assistant, das die Steckdose nach dem Abkühlen abschaltet, Fehler aufs Handy sendet und Wartung nach Verbrauch erinnert. Moonraker macht den Drucker für Home Assistant sichtbar – darauf bauen alle Automationen auf.

Wer mit dem Gedanken spielt, sich einen Drucker zuzulegen, und ihn später ins Smart Home holen will: Achtet darauf, dass er Klipper mit Moonraker nutzt. Den Elegoo Neptune 4 Pro kann ich dafür empfehlen, auch wenn der Weg ins WLAN etwas holprig war.

Erster Stolperstein: WLAN ohne Menüpunkt

Bei mir hing der Drucker anfangs per Kabel am Netz. Für den Dauerbetrieb wollte ich WLAN, und hier kam die erste Überraschung: Am Touchscreen gibt es keinen Menüpunkt für WLAN oder Netzwerk. Die Einrichtung läuft ausschließlich per SSH auf dem kleinen Linux-Rechner im Drucker.

Viele Anleitungen im Netz empfehlen dafür nmtui vom NetworkManager. Bei meinem Gerät ist der NetworkManager aber deaktiviert, der Weg funktioniert also nicht. Stattdessen läuft das Netzwerk über wpa_supplicant mit einer eigenen Konfigurationsdatei für das WLAN-Interface, die per systemd-Dienst beim Booten geladen wird. Nachdem ich das verstanden hatte, war es schnell erledigt und hat auch mehrere Neustarts überstanden.

Noch ein Hinweis zur Hardware: Der WLAN-Stick belegt den einzigen USB-A-Port. Wer gleichzeitig einen USB-Stick für Druckdateien oder Updates nutzen will, braucht einen kleinen Hub.

Die Integration: Moonraker über HACS

Für die Anbindung nutze ich die HACS-Integration Moonraker (von marcolivierarsenault). Nach der Installation über HACS und einem Neustart legt ihr sie ganz normal unter Einstellungen → Geräte & Dienste an.

Zwei Kleinigkeiten haben mich dabei kurz aufgehalten:

  • Die Integration erwartet die Adresse als URL bzw. Hostname und den Port separat. Wenn eine Fehlermeldung wie „expected str“ auftaucht, liegt es meist an einem falsch formatierten Feld.
  • Ohne API-Key klappt die Verbindung, solange Moonraker Anfragen aus dem Heimnetz zulässt. Das ist bei Elegoo ab Werk der Fall.

Danach tauchen gut 60 Entitäten auf: Druckstatus, Fortschritt, geschätzte Restzeit, Düsen- und Betttemperatur, aktueller Dateiname, dazu Buttons für Pause, Fortsetzen, Abbrechen, Not-Aus und Homing sowie ein Vorschaubild des aktuellen Drucks als Kamera-Entität.

Ehrlicher Hinweis: Das Projekt ist im README als „currently unmaintained“ markiert, auch wenn es zuletzt noch Releases gab. Falls die Integration irgendwann bricht, kann man die Werte auch direkt per REST aus der Moonraker-API holen. Für mich ist das der Plan B.

Außerdem schön: Wenn der Drucker aus- und wieder eingeschaltet wird, kommen die Entitäten von selbst zurück. Im Log erzeugt das Ausschalten allerdings Verbindungsfehler. Wen das stört, kann in den Optionen der Integration unerreichbare Geräte stumm schalten.

Automation 1: Steckdose aus – aber erst nach dem Abkühlen

Der Drucker hängt bei mir an einer Matter-Steckdose, die über Thread angebunden ist. Das Ziel: Nach einem fertigen oder abgebrochenen Druck soll sie sich selbst abschalten.

Die naheliegende Lösung „Druck fertig → Strom aus“ ist allerdings keine gute Idee. Wird der Strom bei heißer Düse gekappt, steht auch der Hotend-Lüfter still. Die Restwärme wandert dann nach oben in den Kühlkörper (Heat Creep), und das Filament kann dort weich werden und die Düse verstopfen. Deshalb wartet meine Automation, bis der Extruder unter 50 °C gefallen ist.

Vereinfacht sieht das so aus:

triggers:
  - trigger: state
    entity_id: sensor.drucker_current_print_state
    from: printing
    to:
      - complete
      - cancelled
actions:
  - wait_for_trigger:
      - trigger: numeric_state
        entity_id: sensor.drucker_extruder_temperature
        below: 50
    timeout: "00:30:00"
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.drucker_current_print_state
        state: printing
  - action: switch.turn_off
    target:
      entity_id: switch.drucker_steckdose

Zwei Details sind mir dabei wichtig:

  • Der Trigger reagiert nur auf den Wechsel aus „printing“ heraus. Würde ich stattdessen auf „Drucker ist bereit/aus“ reagieren, würde die Steckdose sofort wieder abschalten, wenn ich sie per App oder Sprachbefehl einschalte.
  • Die Bedingung vor dem Abschalten verhindert, dass mir die Automation einen neuen Druck abwürgt, den ich während der Wartezeit gestartet habe.

Ein Hinweis noch: Wenn die Steckdose in Home Assistant als „nicht verfügbar“ erscheint, ist sie bei mir meist schlicht ausgesteckt – nicht gleich an ein Thread-Problem denken.

Automation 2: Fehler direkt aufs Handy

Die zweite Automation schickt mir eine Push-Nachricht, wenn etwas schiefgeht. Sie hat zwei Auslöser: den Druckstatus, der auf „error“ springt, und den Status von Klipper selbst. Der zweite ist wichtig, weil schwere Fehler wie ein Thermal Runaway oder eine abgerissene Verbindung zum Mainboard nicht immer im Druckstatus auftauchen.

In der Nachricht stehen Fehlermeldung, Dateiname, Fortschritt und Temperaturen. Tippe ich darauf, öffnet sich direkt Fluidd. Bewusst schaltet diese Automation nichts ab. So bleibt der Fehlerzustand erhalten und ich kann in Ruhe nachsehen, was passiert ist.

Beim Testen bin ich über eine Template-Falle gestolpert: Wenn man eine Automation manuell ausführt, ist die Variable trigger trotzdem definiert, nur ist trigger.platform dann leer. Eine Prüfung auf trigger is defined erkennt eine Testauslösung also nicht. Wer das unterscheiden will, sollte auf trigger.platform is none prüfen.

Eine eigene Push-Nachricht „Druck fertig“ habe ich übrigens nicht gebaut. Mein Signal ist die Steckdose, die sich ausschaltet, und die Restzeit sehe ich jederzeit im Dashboard. Wer eine Fertig-Meldung möchte, hängt einfach eine notify-Aktion an den Trigger von Automation 1.

Bonus: Wartung nach Verbrauch statt nach Kalender

Weil Moonraker die Gesamtmenge an Filament und die gesamte Druckzeit mitzählt, habe ich mir noch eine verbrauchsabhängige Wartungserinnerung gebaut: Extruder, Lüfter, Mechanik und Düse haben jeweils ein einstellbares Intervall in Kilogramm oder Stunden. Wird es überschritten, kommt eine Push-Nachricht mit „Erledigt“-Button.

Dabei gab es drei Fallen:

  • Der Filament-Gesamtwert kommt in der Integration in Metern, obwohl Moonraker intern Millimeter liefert.
  • Die Gesamtdruckzeit ist ein Textfeld im Format „1350h 33m 57s“ und muss per Template zerlegt werden.
  • Die Summen zählen erst am Ende eines Jobs hoch, nicht während des Drucks.

Rein zeitbasierte Aufgaben wie das Druckbett waschen stehen bei mir dagegen einfach im Kalender. Nicht alles muss in Home Assistant landen.

Für das Dashboard nutze ich eine Fortschrittskarte aus HACS, die Jinja-Templates erlaubt. Tipp: Den Prozentwert auf 100 deckeln, sonst sprengt ein überfälliges Intervall den Balken.

Fazit

Klipper und Moonraker machen es Home Assistant leicht: Die Integration ist schnell eingerichtet und liefert mehr Werte, als ich je brauche. Der eigentliche Mehrwert entsteht aber erst durch zwei, drei durchdachte Automationen – vor allem das Abschalten nach dem Abkühlen. Die größte Hürde war bei mir nicht Home Assistant, sondern das WLAN auf dem Drucker. Wenn ihr wisst, dass das nur per SSH geht, spart ihr euch eine Menge Sucherei.

Die Geräte aus diesem Artikel

SONOFF ZBDongle-E (Zigbee/Thread-USB-Stick)
Mein Gerät

SONOFF ZBDongle-E (Zigbee/Thread-USB-Stick)

Mein Thread-Funkmodul für den Border Router – darüber hängt auch die Matter-Steckdose, die den Drucker mit Strom versorgt.

Kommentare

Fragen, Ergänzungen oder eigene Erfahrungen? Ich freue mich über deinen Kommentar. Zum Kommentieren brauchst du ein kostenloses GitHub-Konto.

Beim Laden werden Daten an GitHub übertragen. Mehr dazu in der Datenschutzerklärung.