Lleva tu impresora 3D a otro nivel con OctoPrint y Home Assistant

Lleva tu impresora 3D a otro nivel con OctoPrint y Home Assistant
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!

comments powered by Disqus

Posts relacionados

Así convertí los ventiladores de techo en smart con el iFan03 de Sonoff

Así convertí los ventiladores de techo en smart con el iFan03 de Sonoff

En estos dos videos quiero compartir como logré convertir todos los ventiladores de casa en smart con el iFan03 de Sonoff.

Leer más...
Hace tu casa inteligente con Home Assistant - Guía de instalación

Hace tu casa inteligente con Home Assistant - Guía de instalación

Conocé sobre Home Assistant, sus alternativas y por qué lo prefiero sobre el resto. Además te muestro rápidamente como podes hacer para instalarlo dentro de una Raspberry Pi y comenzar en este mundo del hogar inteligente.

Leer más...
Enchufe inteligente con ESPHome, es el ideal para Home Assistant?

Enchufe inteligente con ESPHome, es el ideal para Home Assistant?

En Smart Plug v2 de la marca Athom, que viene preflasheado con ESPHome, ideal para utilizar con Home Assisant ya que se integra localmente a nuestra instalación.

Leer más...