Octoprint & Homeassistant

Wer Hobbymäßig mit 3D-Druckern unterwegs ist, kennt Octoprint sicherlich. Bei mir ist es so, dass meine Werkstatt im Keller ist. Damit ich längere Jobs auch mal ohne direkte Anwesenheit laufen lassen kann, habe ich Octoprint auf einem RaspberryPi installiert. Natürlich gibt es auch schon direkt Apps, um Octoprint zu steuern, aber ich finde eine Integration in Home Assistant trotzdem schön. Tatsächlich gibt es hier eine fertige Integration.

Integration

Wenn wir unter Einstellungen – Integrationen gehen und das Icon unten rechts drücken, öffnet sich das Suchfeld. Hier können wir einfach Octo eintippen. Diese können wir dann Installieren.

Ggf. hat HomeAssistant euer Octoprint sogar automatisch gefunden. Dann müssen wir einfach auf den großen Konfigurieren Button drücken.

Dann öffnet sich das Fenster wo wir einen Username, die IP und den Port eingeben müssen:

Als nächstes müssen wir auf die Octoprint Interface Seite wechseln. Hier taucht ein Pop-Up auf, welches die Zugriffsanfrage durch HomeAssistant anzeigt. Das müssen wir erlauben.

Das wars im Prinzip auch schon. Nun können wir auf unserem Dashboard eine Kachel für Octoprint hinzufügen und nach unserem Geschmack einrichten.

Smarte Steckdose

Zusätzlich habe ich den Drucker an einer smarten Steckdose angeschlossen. Diese ist etwas gehackt, denn ich habe Tasmota aufgeflasht und steure sie über MQTT an. Um diese zu Steuern, habe ich einen MQTT Switch definiert. (Achtung, hier alte Syntax)

switch:
  - platform: mqtt
    unique_id: anycubic_switch
    name: "Anycubic Switch"
    state_topic: "stat/anycubic/POWER"
    command_topic: "cmnd/anycubic/power"
sensor:
  - platform: mqtt
    unique_id: anycubic_sensor
    name: "Anycubic Sensor"
    state_topic: "stat/anycubic/POWER"

Update: Im letzten HA Update wurde die Syntax für die YAML Config angepasst. Switch und Sensor werden jetzt unter einem eigenen mqtt Block eingebunden, und nicht mehr per Plattform.

mqtt:
  switch:
    - name: "Anycubic Switch"
      unique_id: anycubic_switch
      state_topic: "stat/anycubic/POWER"
      command_topic: "cmnd/anycubic/power"

  sensor:
    - name: "Anycubic Sensor"
      state_topic: "stat/anycubic/POWER"
      unique_id: anycubic_sensor

Notifications

Jetzt kommt aber der coole Teil. Wenn man Octoprint mit Home Assistant verbunden hat, kann man sich je nach Druckerstatus ein paar coole Automationen und Push-Notifications überlegen. Hier gilt mein dank an den User „Krash“ der hier seine Scripte veröffentlich hat, an denen ich mich orientiert hab.

Dabei gibt es einfache Dinge, wie z.B. eine Drucker-Status Benachrichtigung. Hier kann man auch ein Bild mitschicken, wenn man eine Kamera am Octoprint angeschlossen hat.

alias: Octoprint - Halbzeit Update ans Handy
description: >-
  Wenn Octoprint 50% fertig ist, wird ein Update ans Handy geschickt mit Bild
  von der Kamera
trigger:
  - platform: numeric_state
    entity_id: sensor.octoprint_job_percentage
    above: 50
condition:
  - condition: state
    entity_id: binary_sensor.octoprint_connected
    state: "on"
action:
  - service: notify.mobile_app_daniel_nothing
    data:
      title: Halbzeit!
      message: >-
        Der 3D-Druck ist zur Hälfte fertig!
        ({{states.sensor.octoprint_job_percentage.state}}%)
      data:
        image: http://192.168.178.39/webcam/?action=snapshot
mode: single

Oder wenn der Druck fertig ist. Hier wird auch ein Shut-down Script gestartet. Dazu weiter unten mehr.

alias: Octoprint - Druck fertig Notification
description: >-
  Wenn Octoprint fertig ist, wird ein Update ans Handy geschickt mit Bild von
  der Kamera
trigger:
  - platform: state
    entity_id: sensor.octoprint_current_state
    from: Printing
    to: Operational
condition:
  - condition: state
    entity_id: binary_sensor.octoprint_connected
    state: "on"
action:
  - service: notify.mobile_app_daniel_nothing
    data:
      title: 3D-Drucker ist fertig!
      message: Der letzte 3D-Druck ist fertig!
      data:
        image: http://192.168.178.39/webcam/?action=snapshot
        actions:
          - action: kill_script_3dprint_off
            title: Cancel Shutdown
  - service: homeassistant.turn_on
    data: {}
    target:
      entity_id: script.octoprint_3d_drucker_shutdown
mode: single

Man kann aber auch sehr komplexe Sachen machen. Beispielsweise habe ich hier eine zeitgesteuerte Startautomatik (mit NodeRed) umgesetzt. Diese Scannt die Files auf dem Octoprint und man kann diese dann aussuchen und zu einem Datum / Uhrzeit starten lassen.

Shut-Down Script

Wenn man Scripte und Automatisierung und Push-Nachrichten kombiniert, kann man sich z.B. ein Printer-Shutdown Script basteln, welches auch mit einem Cancel-Button in der Benachrichtigung abgebrochen werden kann.

Ich hab z.B. das folgende Script um den Drucker auszuschalten.

alias: Octoprint 3D-Drucker Shutdown
mode: single
icon: mdi:power-plug
sequence:
  - delay:
      minutes: 10
  - condition: state
    entity_id: sensor.octoprint_current_state
    state: Operational
  - wait_template: "{{ states('sensor.octoprint_actual_tool0_temp_c')|int < 40 }}"
  - service: notify.mobile_app_daniel_nothing
    data:
      message: Printer Shutdown in 30 seconds
  - delay:
      seconds: 30
  - service: switch.turn_off
    data: {}
    target:
      entity_id:
        - switch.anycubic_switch
        - switch.anycubic_lamp_switch

Dabei wird zunächst geprüft ob sich der Drucker im „operational“ Status befindet und nicht gerade ein Druck läuft. Dann wird zusätzlich geprüft, ob die Nozzle Temperatur unter 40° C ist. Das ist auch einfach ein Sicherheitsaspekt, da wir die Temperatur ja nur Tracken können, solange Octoprint und Drucker eine aktive Verbindung haben.
Als nächstes bekomme ich eine Push-Nachricht das der Drucker gleich aus geht und dann werden die SmartPlugs für den Drucker und die Lampe auf aus gesetzt.

Automatisierungen

Das Script löse ich über eine Automatisierungen aus. Z.B. wenn der Drucker einfach im „Stand-By“ vor sich her wartet:

alias: Octoprint - Printer Idle Shut down
description: Wenn der Drucker länger ohne nutzung ist, wird er ausgeschaltet
trigger:
  - platform: state
    entity_id: sensor.octoprint_current_state
    to: Operational
    for: "01:20:00"
action:
  - service: notify.mobile_app_daniel_nothing
    data:
      message: Drucker langweilt sich, Drucker will schlafen
      title: Drucker Shut-Down!
      data:
        actions:
          - action: kill_script_3dprint_off
            title: Cancel Shutdown
  - service: homeassistant.turn_on
    data: {}
    target:
      entity_id: script.octoprint_3d_drucker_shutdown

Durch das drücken auf den Cancel Button wird eine automatisierung gestartet, die das Script stoppt.

alias: Octoprint - Cancel Shutdown
description: ""
trigger:
  - platform: event
    event_type: mobile_app_notification_action
    event_data:
      action: kill_script_3dprint_off
action:
  - service: script.turn_off
    entity_id: script.3dprint_off

Oder man kann das Shutdown Script auch automatisch stoppen lassen, wenn man den Octoprint bedient, also sprich einen neuen Druck startet. Der Status wechselt dabei ja von Operational zu einem anderen.

alias: Octoprint - Cancel Shutdown bei activity
description: ""
trigger:
  - entity_id: sensor.octoprint_current_state
    from: Operational
    platform: state
condition:
  - condition: state
    entity_id: script.3dprint_off
    state: "on"
action:
  - service: script.turn_off
    entity_id: script.octoprint_3d_drucker_shutdown
mode: single

Happy Printing!

$ Die mit einem $ gekennzeichneten Links, sind Affiliate Links. Wenn du über diese in den Shop gelangst und etwas kaufst, bekomme ich eine kleine Provision

Schreibe einen Kommentar

Geb mir einen aus :)

Wenn du das Zeug hier magst, denk doch über eine Spende nach um Server und Domain zu finanzieren.

$ Die mit einem $ gekennzeichneten Links, sind Affiliate Links. Wenn du über diese in den Shop gelangst und etwas kaufst, bekomme ich eine kleine Provision.

Suche & Filter