Lleva tu impresora 3D a otro nivel con OctoPrint y Home Assistant
- Pocho
- Home assistant , Octoprint , Impresora 3d , Smart plug , Video
- 8 de enero de 2025

Tabla de contenidos
¿Tenés una impresora 3D y querés aprovecharla al máximo? En este video te muestro como logré sumarle funcionalidades a mi impresora gracias OctoPrint, un enchufe inteligente y Home Assistant.
Desde encenderla desde el celular, calentar la impresora, que nos notifique por Telegram con una foto de la impresión finalizada o simplemente que se apague cuando termina de imprimir y detecta que no la vamos a usar más.
Video
Paso a compartir todas las automatizaciones, scripts y comandos RESTful de Home Assistant:
Automatizaciones
Reintentar conectar la impresora a OctoPrint al encender enchufe
alias: 3D Printer - Try to connect after turn on
description: ""
triggers:
- entity_id:
- <switch.nombre_del_switch_conectado_a_la_impresora>
from: "off"
to: "on"
trigger: state
conditions: []
actions:
- delay:
hours: 0
minutes: 3
seconds: 0
milliseconds: 0
- if:
- condition: state
entity_id: sensor.octoprint_current_state
state: unavailable
then:
- metadata: {}
data:
device_id: <device_id>
profile_name: <nombre_del_perfil_de_la_impresora_en_octoprinta>
action: octoprint.printer_connect
mode: single
Apagar impresora al terminar de imprimir
Esta automatización se encarga de apagar la impresora cuando termina de imprimir y detecta que no la vamos a usar más.
alias: 3D Printer - Shutdown after print
description: ""
triggers:
- entity_id:
- sensor.octoprint_job_percentage
to: "100.0"
trigger: state
conditions: []
actions:
- delay:
hours: 0
minutes: 10
seconds: 0
milliseconds: 0
- if:
- condition: and
conditions:
- condition: state
entity_id: sensor.octoprint_target_tool0_temp
state: "0.0"
- condition: state
entity_id: sensor.octoprint_target_bed_temp
state: "0.0"
then:
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: <switch.nombre_del_switch_conectado_a_la_impresora>
mode: single
Notificación de Alexa al terminar de imprimir
alias: Notification - 3D Printer finished
description: ""
triggers:
- entity_id:
- sensor.octoprint_job_percentage
to: "100.0"
trigger: state
conditions:
- condition: time
after: "09:00:00"
before: "23:59:00"
actions:
- metadata: {}
data:
message: "\"Pochito, se terminó la impresión 3D\""
action: <notify.nombre_de_tu_dispositivo_alexa_o_que_quieras_que_reciba_la_notificacion>
mode: single
Sacar foto y enviar por Telegram al finalizar la impresión
alias: Photo OctoPrint to Telegram
description: ""
triggers:
- entity_id:
- sensor.octoprint_job_percentage
to: "100.0"
trigger: state
conditions: []
actions:
- variables:
filename: >-
/config/www/snapshots/{{ now().strftime('%Y%m%d_%H%M%S') }}_{{
state_attr('camera.octoprint_camera', 'friendly_name') | slugify }}.jpg
- action: camera.snapshot
metadata: {}
data:
filename: "{{ filename }}"
target:
entity_id: camera.octoprint_camera
- action: telegram_bot.send_photo
metadata: {}
data:
authentication: digest
file: "{{ filename }}"
caption: Terminó la impresión 3D!
mode: single
Scripts
Calentar impresora
alias: Precalentar impresora
sequence:
- if:
- condition: state
entity_id: sensor.octoprint_current_state
state: Operational
then:
- metadata: {}
data: {}
action: rest_command.octoprint_set_bed_temp_60
- metadata: {}
data: {}
action: rest_command.octoprint_set_tool_temp_195
- wait_template: |-
{{
states('sensor.octoprint_actual_bed_temp')|float >= 59 and
states('sensor.octoprint_actual_tool0_temp')|float >= 194
}}
continue_on_timeout: false
timeout: "00:05:00"
- metadata: {}
data:
message: Impresora lista para imprimir
action: <notify.nombre_de_tu_dispositivo_alexa_o_que_quieras_que_reciba_la_notificacion>
description: ""
icon: mdi:heat-wave
mode: restart
Imprimir test de calibracion de la cama
Este script es valido para enviar cualquier tipo de impresión. Solo hay que cambiar el archivo que se envía.
alias: Imprimir calibracion
sequence:
- if:
- condition: device
type: is_on
device_id: <device_id>
entity_id: <entity_id>
domain: switch
- condition: state
entity_id: sensor.octoprint_current_state
state: Operational
then:
- action: rest_command.octoprint_set_bed_test_file
metadata: {}
data: {}
response_variable: octoprint_response
- if:
- condition: template
value_template: "{{ octoprint_response['status'] == 204 }}"
then:
- action: rest_command.octoprint_start_job
metadata: {}
data: {}
else:
- action: <notify.nombre_de_tu_dispositivo_alexa_o_que_quieras_que_reciba_la_notificacion>
metadata: {}
data:
message: No se pudo imprimir. Verificar el estado de la impresora
description: ""
icon: mdi:printer-3d-nozzle
Comandos RESTful
Para mantener el orden, agrupé todos los comandos en el archivo rest_command.yaml
, recuerden incluirlo en su configuración de Home Assistant.
Por otra parte, para utilizar la API de OctoPrint necesitamos obtener una API Key. Se obtiene desde OctoPrint, en la parte de User Settings.
Setear temperatura del fusor a 195°C
octoprint_set_tool_temp_195:
url: https://url_de_octoprint/api/printer/tool
method: POST
headers:
authorization: !secret octoprint_header_api_key
accept: "application/json, text/html"
user-agent: 'Mozilla/5.0 {{ useragent }}'
payload: '{ "command": "target", "targets": { "tool0": 195} }'
content_type: 'application/json; charset=utf-8'
verify_ssl: true
Setear temperatura de la cama a 60°C
octoprint_set_bed_temp_60:
url: https://url_de_octoprint/api/printer/bed
method: POST
headers:
authorization: !secret octoprint_header_api_key
accept: "application/json, text/html"
user-agent: 'Mozilla/5.0 {{ useragent }}'
payload: '{ "command": "target", "target": 60 }'
content_type: 'application/json; charset=utf-8'
verify_ssl: true
Enviar archivo de prueba de nivelación de la cama
octoprint_set_bed_test_file:
url: https://url_de_octoprint/api/files/local/Bed%20Level%20Test%20(full).gcode
method: POST
headers:
authorization: !secret octoprint_header_api_key
accept: "application/json, text/html"
user-agent: 'Mozilla/5.0 {{ useragent }}'
payload: '{ "command": "select", "print": true }'
content_type: 'application/json; charset=utf-8'
verify_ssl: true
Iniciar impresión
octoprint_start_job:
url: https://url_de_octoprint/api/job
method: POST
headers:
authorization: !secret octoprint_header_api_key
accept: "application/json, text/html"
user-agent: 'Mozilla/5.0 {{ useragent }}'
payload: '{ "command": "start" }'
content_type: 'application/json; charset=utf-8'
verify_ssl: true
Cancelar impresión
octoprint_cancel_job:
url: https://url_de_octoprint/api/job
method: POST
headers:
authorization: !secret octoprint_header_api_key
accept: "application/json, text/html"
user-agent: 'Mozilla/5.0 {{ useragent }}'
payload: '{ "command": "cancel" }'
content_type: 'application/json; charset=utf-8'
verify_ssl: true
Pausar/Reanudar impresión
octoprint_pause_job:
url: https://url_de_octoprint/api/job
method: POST
headers:
authorization: !secret octoprint_header_api_key
accept: "application/json, text/html"
user-agent: 'Mozilla/5.0 {{ useragent }}'
payload: '{ "command": "pause", "action": "toggle" }'
content_type: 'application/json; charset=utf-8'
verify_ssl: true
Mover ejes a la posición de home
octoprint_home:
url: https://url_de_octoprint/api/printer/printhead
method: POST
headers:
authorization: !secret octoprint_header_api_key
accept: "application/json, text/html"
user-agent: 'Mozilla/5.0 {{ useragent }}'
payload: '{ "command": "home", "axes": ["x", "y", "z"]}'
content_type: 'application/json; charset=utf-8'
verify_ssl: true
Espero que les guste y sea de utilidad. Si tienen alguna duda o sugerencia, te leo en los comentarios!