
Homeassistant und Octoprint
UPDATE: 18.01.2021
Ich habe zusätzlich einen Switch angelegt, der dem Raspberry Pi mit Octoprint nicht einfach den Strom klaut, sondern ihn vorher sauber über die Octoprint-API herunterfährt und dann erst vom Strom trennt.
Mein Raspberry Pi hängt an einer Gosund SP111 Steckdose, die mit Tasmota geflasht wurde und in Homeassistant eingebunden ist. Diese hat den Namen switch.strom_octoprint
. Ist diese Steckdose ausgeschaltet ist logischerweise auch Octoprint nicht verfügbar. Ziel war es Octoprint sauber auf dem Pi herunterzufahren, bevor er vom Strom getrennt wird. Dafür wird ein REST-Command und ein Template-Switch benötigt.
REST-Command anlegen
octopi_shutdown:
url: "http://OCTOPRINT-IP/api/system/commands/core/shutdown"
method: POST
headers:
content-type: application/json
X-Api-Key: !secret octoprint_api_key
In der secrets.yaml
sollte ein Eintrag für den Octoprint-API-Key angelegt werden. Die IP von der Octoprint Instanz muss in dem API-Aufruf entsprechend angepasst werden.
Template Switch anlegen
Nun fehlt noch ein Switch, der schaut ob die Steckdose bereits an ist und explizite Anweisungen enthält, was beim Ein- oder Ausschalten erfolgen soll:
- platform: template
switches:
octopi_shutdown:
friendly_name: Octopi Shutdown
value_template: "{{ is_state('switch.strom_octoprint', 'on') }}"
turn_on:
- service: switch.turn_on
entity_id: switch.strom_octoprint
turn_off:
- service: rest_command.octopi_shutdown
- delay: '00:00:45'
- service: switch.turn_off
entity_id: switch.strom_octoprint
icon_template: >-
{% if is_state('switch.strom_octoprint', 'on') %}
mdi:power-plug
{% else %}
mdi:power-plug-off
{% endif %}
Schaltet man den Switch nun aus, wird der Befehl zum herunterfahren des Raspberry Pis an Octoprint gesendet, gefolgt von 45 Sekunden Pause. Im letzten Schritt schaltet die Steckdose den Strom aus.
Der Switch erschein in Homeassistant unter dem Name switch.octoprint_shutdown
und sollte in der Lovelace-Card den vorhandenen Switch switch.strom_octoprint
ersetzen.
UPDATE: 21.12.2020
Ich habe die Lovelace Card überarbeitet und eine Variante entwickelt, die weniger Platz in der Höhe erfordert.
Die Card sieht nun folgendermaßen aus und beruht auf der picture elements card:

Verwendet wurde das Bild aus dem ursprünglichen Beitrag mit einer kleinen Abwandlung:

Der zugehörige Code zum erzeugen der Card mit allen dargestellten Informationen:
type: picture-elements
image: /local/entitypictures/anycubic.png
elements:
- type: state-icon
entity: switch.strom_octoprint
icon: 'mdi:power-plug'
style:
top: 14%
left: 68%
tap_action:
action: toggle
- type: state-label
entity: sensor.octoprint_energy_power
icon: 'mdi:power-plug'
style:
top: 14%
left: 76%
- type: state-icon
entity: binary_sensor.anycubic_printing_error
style:
top: 14%
left: 93%
- type: state-icon
entity: switch.strom_anycubic
icon: 'mdi:power-plug'
style:
top: 22%
left: 31%
tap_action:
action: toggle
- type: state-label
entity: sensor.anycubic_energy_power
icon: 'mdi:power-plug'
style:
top: 22%
left: 14%
- type: state-label
entity: sensor.anycubic_current_state
style:
top: 55%
left: 23%
- animation: true
color: '#90ee90'
entity: sensor.anycubic_job_percentage
entity_row: true
height: 36px
name: Progress
positions:
icon: 'off'
indicator: 'off'
minmax: inside
title: outside
speed: 1000
style:
left: 72%
top: 40%
width: 48%
type: 'custom:bar-card'
- animation: true
entity: sensor.anycubic_actual_bed_temp
entity_row: true
height: 36px
max: 60
name: Bed
positions:
icon: 'off'
indicator: 'off'
minmax: inside
title: outside
severity:
- color: '#f08080'
from: 0
to: 40
- color: '#ff9966'
from: 40
to: 55
- color: '#90ee90'
from: 55
to: 65
style:
left: 72%
top: 62%
width: 48%
type: 'custom:bar-card'
- animation: true
entity: sensor.anycubic_actual_tool0_temp
entity_row: true
height: 36px
max: 200
name: Nozzle
positions:
icon: 'off'
indicator: 'off'
minmax: inside
title: outside
severity:
- color: '#f08080'
from: 0
to: 120
- color: '#ff9966'
from: 120
to: 180
- color: '#90ee90'
from: 180
to: 220
style:
left: 72%
top: 84%
width: 48%
type: 'custom:bar-card'
ORIGINALPOST
Octoprint ist eine freie open-source Software, die es Laien ermöglicht in einer webbasierten Oberfläche 3D-Drucker anzusteuern und zu überwachen. Sie stellt eine vielseitige API zum monitoren des 3D-Druckers bereit, die einfach und unkompliziert in Homeassistant mit der offiziellen Octoprint Integration genutzt werden kann.
Octoprint API-Key generieren
Zur erfolgreichen Einbindung der Octoprint Integration muss ein Eintrag in der configuration.yaml
erfolgen, die anschließend Sensoren zum Drucker und weitere Binary Sensoren bereitstellt.
Im ersten Schritt muss jedoch ein API-Key in der Octoprint Weboberfläche erstellt werden. Dazu muss in der Weboberfläche zu Einstellungen > API
navigiert werden und der API-Key in die Zwischenablage kopiert werden.
Homeassistant Konfiguration
In der configuration.yaml
muss zwingend die IP-Adresse des Octoprint Servers angegeben werden. Diese sollte idealerweise statisch sein und sich nicht bei jedem Neustart ändern:
octoprint:
host: IP-ADDRESSE
api_key: API-KEY
name: Anycubic
number_of_tools: 1
bed: true
Je nach Druckermodell können mehrere Druckdüsen (Nozzles) vorhanden sein. Die Anzahl der Düsen sollte in der Konfiguration generell gesetzt werden, da sonst kein Sensor zur Überwachung der Temperatur bereitgestellt wird. Ebenso verhält es sich mit dem Eintrag bed: true
. Wenn ein beheiztes Druckbett vorhanden ist, sollte also der boolsche Wert auf true
gesetzt werden.
Lovelace Card
Was nützen einem Sensorwerte, wenn sie nicht auch anschaulich dargestellt werden. Ich nutze dafür eine Picture Elements Card und habe dafür, entsprechend meines Druckermodells (Anycubic i3 Mega), eine Bilddatei erstellt und diese in der Lovelace UI eingebunden. Dieses Bild kann micht einem Rechtsklick gespeichert und in Homeassistant ./config/www/
-Ordner platziert werden. In meinem Beispiel lautet der Pfad zum Bild ./config/www/entitypictures/anycubic.png
. Die Card sieht folgendermaßen aus:

Dieses Bild muss dazu mit einem Rechtsklick im ./config/www
Ordner gespeichert werden:

Custom Cards in HACS installieren
Zur Darstellung der Lovelace Card verwende ich 3 Custom Cards, die einfach über HACS installiert werden können:
- custom:bar-card, zur Darstellung der Fortschrittsbalken
- custom:button-card, zur Darstellung der unteren 4 Icons
- custom:vertical-stack-in-card, zur Anordnung der Karten übereinander, ohne sichtbare Abgrenzung zueinander
Darstellung in der Lovelace Card
Dargestellt werden Informationen zum Druckfortschritt, der Bett- und Düsentemperatur, zum Druckstatus, zur Fehlerindikation und zur verbleibenden Druckzeit.
Die gesamte Config der Card sieht wie folgend aus:
type: 'custom:vertical-stack-in-card'
cards:
- type: picture-elements
image: /local/entitypictures/anycubic.png
elements:
- type: 'custom:bar-card'
animation: true
color: '#90ee90'
entity: sensor.anycubic_job_percentage
entity_row: true
height: 36px
name: Progress
positions:
icon: 'off'
indicator: 'off'
minmax: inside
title: outside
speed: 1000
style:
left: 72%
top: 20%
width: 50%
- type: 'custom:bar-card'
animation: true
entity: sensor.anycubic_actual_bed_temp
entity_row: true
height: 36px
max: 60
name: Bed
positions:
icon: 'off'
indicator: 'off'
minmax: inside
title: outside
severity:
- color: '#f08080'
from: 0
to: 40
- color: '#ff9966'
from: 40
to: 55
- color: '#90ee90'
from: 55
to: 65
style:
left: 72%
top: 50%
width: 50%
- type: 'custom:bar-card'
animation: true
entity: sensor.anycubic_actual_tool0_temp
entity_row: true
height: 36px
max: 200
name: Nozzle
positions:
icon: 'off'
indicator: 'off'
minmax: inside
title: outside
severity:
- color: '#f08080'
from: 0
to: 120
- color: '#ff9966'
from: 120
to: 180
- color: '#90ee90'
from: 180
to: 220
style:
left: 72%
top: 80%
width: 50%
- type: horizontal-stack
cards:
- type: 'custom:button-card'
color: auto-no-temperature
color_type: icon
entity: binary_sensor.anycubic_printing
icon: 'mdi:printer-3d-nozzle'
name: Printing
show_name: true
show_state: false
size: 34%
tap_action:
action: more-info
- type: 'custom:button-card'
color: auto-no-temperature
color_off: 'rgb(54, 95, 140)'
color_type: icon
entity: binary_sensor.anycubic_printing_error
icon: 'mdi:printer-3d-nozzle-alert'
name: Error
show_name: true
show_state: false
size: 34%
tap_action:
action: more-info
units: d
- type: 'custom:button-card'
color: auto-no-temperature
color_off: 'rgb(54, 95, 140)'
color_type: icon
entity: sensor.anycubic_current_state
show_name: false
show_state: true
size: 34%
tap_action:
action: more-info
- type: 'custom:button-card'
color: auto-no-temperature
color_off: 'rgb(54, 95, 140)'
color_type: icon
entity: sensor.anycubic_time_remaining
name: Restart
show_name: false
show_state: true
size: 34%
tap_action:
action: more-info
Welche Werte müssen händisch angepasst werden?
Es müssen die jeweiligen max
-Werte in den Bar Cards angepasst werden, die festlegen mit welcher Bett- und Düsentemperatur gedruckt werden. Ebenso muss der vollständige Pfad zur Bilddatei angepasst werden. Danach ist die Konfiguration abgeschlossen.
Viel Spaß!