Múltiples instancias Klipper
Última actualización
Última actualización
Hemos comentado muchas veces la versatilidad y modularidad de Klipper, en este caso os vamos a mostrar como tener varias instancias Klipper para controlar múltiples impresoras desde un host.
En nuestro caso vamos a usar Kiauh (Klipper Installer And Update Helper) que nos va a facilitar enormemente la vida.
Es aconsejable que tengamos nuestra instalación totalmente limpia o si partimos de una instancia tenerla totalmente actualizada y funcionando.
Desde Octubre 2022 Moonraker ha introducido cambios en la estructura de la configuración que pueden afectar al proceso ya sea bien por la instalación existente o por el propio Kiauh.
Os recordamos que a más instancias tengáis en un host Klipper más probabilidades de que cualquier fallo en este afecte a vuestras impresiones.
Además, es importante dimensionar correctamente el host Klipper al número de instancias que queramos montar para evitar que esté saturado y pueda ocasionar problemas también.
Kiauh nos permite instalar Klipper y sus componentes, además de otros y algunas utilidades, de una forma extremadamente sencilla y mediante menús. A partir de este punto usaremos nuestro terminal SSH para realizar el proceso.
Para seguir los pasos siguientes se ha de tener instalado Kiauh, podéis encontrar las instrucciones para hacerlo aqui.
Lanzaremos Kiauh desde nuestro terminal SSH:
Como indicador interesante Kiauh en su menú inicial nos indicará el número de instancias y versión de cada componente, en nuestro ejemplo no teníamos nada instalado.
Seleccionaremos la opción #1 Install
Volveremos a seleccionar la opción #1 Klipper
Seleccionaremos nuestra versión de Phyton
Seleccionaremos el número de instancias Klipper que queremos instalar
Nos preguntará si queremos personalizar los nombres de nuestras instancias o dejarlas por defecto
Klipper comenzará a descargarse e instalarse. Una vez finalizado volverá al menú inicial.
Moonraker es una API y se encarga de las comunicaciones entre Klipper y terceros, como por ejemplo una UI como Mainsail/Fluidd.
Seleccionaremos de nuevo la opción #1 Install
En este caso seleccionaremos #2 Moonraker
Kiauh nos preguntará el número de instancias a instalar de Moonraker, recuerda que este debe de coincidir con el número de instancias de Klipper... aunque en el propio menú ya nos lista las instaladas.
Moonraker comenzará a descargarse e instalarse. Una vez finalizado volverá al menú inicial.
Una vez finalizado el proceso nos indicará las IP y puertos para Moonraker de cada una de las instancias instaladas
Revisar estado y puertos de nuestras instancias:
Podemos revisar el estado y puertos de nuestras instancias mediante el comando sudo ss -lntp
o con sudo netstat -ltnp
el cual nos dirá que procesos están escuchando en que puertos:
En el ejemplo anterior, para una instancia, podremos ver la siguiente información:
tenemos en el puerto 80 un interfaz web de Klipper usando el proceso nginx
en el puerto 22 tenemos el demonio sshd para conexión SSH+
en el puerto 7125 tenemos un proceso Klipper (python) de una instancia
Ahora que ya tenemos diferentes instancias de Klipper/Moonraker y para gestionarlas/configurarlas tal como hacemos con una instancia deberemos acceder a ellas por separado.
Podremos hacerlo desde nuestra UI favorita además que os mostramos como hacerlo en el caso que usemos KlipperScreen o el módulo de Telegram.
Para añadir diferentes IPs a nuestro Mainsail tan solo necesitamos conocer la IP y puerto de Moonraker para la o las instancias que queramos añadir.
Podemos hacerlo siguiendo estos sencillos pasos
desde el interfaz de Mainsail iremos a las opciones pulsando en el icono de los engranajes:
En las opciones de Mainsail iremos al apartado PRINTERS y ADD PRINTER, y nos aseguraremos que añadimos las IPs/puerto de cada una de nuestras instancias antes creadas:
Ahora que ya disponemos de varias instancias y tenemos acceso a cada una mediante la interfaz web ya podemos ponernos a trabajar en nuestros printer.cfg, os aconsejamos revisar nuestra guía de primeros pasos por las secciones más importantes.
Volviendo al tema de múltiples instancias, en ocasiones vamos a querer gestionar impresoras iguales o con la misma electrónica y esto puede ser un problema. Normalmente, al generar el firmware Klipper para nuestra electrónica/MCU por defecto genera el serial ID basado en valores fijos dependiendo del tipo de MCU... simplificando que va a utilizar el mismo ID de USB en todas las MCU similares siendo un problema a la hora de montar múltiples instancias.
Para solventar esto tenemos varias opciones siendo las más comunes:
Utilizar como serial la cadena de conexión obtenida utilizando un ls /dev/serial/by-path/*
, by-path en lugar de by-serial (recordemos lo comentado anteriormente sobre el ID de USB a la hora de crear el firmware).
Los puntos de montaje serial usando by-path se basan en el puerto USB físico y no en el dispositivo. El problema por contra es que las impresoras siempre ha de estar conectada al mismo puerto USB.
Si nos gusta tener una pantalla para la gestión de nuestras impresoras, no necesitaremos tener múltiples de ellas si tenemos varias bajo Klipper, estén o no en el mismo host.
Para poder añadir diferentes impresoras en KlipperScreen editaremos nuestro KlipperScreen.conf y añadiremos la configuración de cada una tal como vemos a continuación:
En el caso que usemos el módulo de Telegram para controlar nuestras impresoras de forma remota podremos tener diferentes instancias de este para poder gestionarlas de forma individual.
No vamos a entrar en el proceso de instalación o configuración detallado, el cual podéis encontrar aquí.
Comenzaremos clonando el repositorio e instalando:
IMPORTANTE!!
en el comando git clone la parte final indica el directorio donde lo instalaremos. Os aconsejamos usar moonraker-telegram2, moonraker-telegram3,...
en el comando cd lo adaptaremos dependiendo a lo usado en el punto anterior
Durante la instalación nos solicitará el path de Moonraker y de Klipper de cada instancia, aseguraos de poner el correcto para cada instancia ya que ahí dejará el fichero de configuración necesario para su configuración.
Por último nos preguntará el identificador del servicio que es útil para poder evitar problemas de arranque, parada o reinicio del serivicio.
Por ejemplo si usamos 2 la instalación creará una instancia de servicio de arranque llamada moonraker-telegram2.service
Revisaremos en cada instancia nuestro telegram_config.sh ajustando el puerto de Moonraker para que coincida con el de cada instancia.
Además si contamos con varias cámaras nos aseguraremos que la URL en el valor webcam (sobretodo el puerto) es el correcto de nuestra instancia.
Crowsnest es un gestor de cámaras que en el caso de disponer de varias instancias/impresoras y estas cuenten con cámaras separadas deberemos de instalar múltiples instancias en caso de que no queremos dependencias entre ellas.
Dado que una instancia de Crowsnest puede gestionar varias cámaras nuestra sugerencia es de usar una única instancia con todas las cámaras que necesitemos y configurar en cada instancia/impresora de Klipper la que utilicemos en cada caso.
Lo primero de todo comentar que a día de hoy Crowsnest no está preparado para su instalación en multi instancia, por lo que el proceso va a ser manual.
Ejecutaremos los siguientes comandos desde la linea de comandos SSH:
Nos aparecerá un "wizard" desde el cual nos preguntará el path, donde podremos encontrar los ficheros de configuracion crowsnest.conf crowsnest.env y crowsnest.log, para realizar la instalación y que utilizaremos tantas veces como necesitemos para crear nuestras instancias.
Una vez finalizada la generación del fichero de configuración desde el asistente ejecutaremos:
Seguiremos las instrucciones y una vez finalizado no olvides reiniciar tu host. Recuerda añadir en el Update Manager de Moonraker cada una de tus instancias respectivamente.
Personalizar el ID USB al crear el firmware, otra opción es poner un ID USB personalizado a la creación del firmware Klipper para nuestra impresora, con esto podremos seguir utilizando by-id. Para ello en make menuconfig
personalizaremos la opción USB ids
:
Por contra, tendremos que recordarnos de este paso cada vez que realicemos el proceso de creación de nuestro firmware.