Manejo de las impresoras

Para el servicio de impresión se utilizará una sola computadora para manejar las impresoras disponibles. Se usará Octoprint para tener una interfaz web.

Computadora

El sistema operativo es Debian GNU/Linux 8.6 (Jessie). Las características de la computadora son:

Architecture:          i686
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
Vendor ID:             GenuineIntel
CPU family:            15
Model:                 4
Model name:            Intel(R) Celeron(R) CPU 2.66GHz
Stepping:              9
CPU MHz:               2659.975
BogoMIPS:              5319.95
L1d cache:             16K
L2 cache:              256K
             total       used       free     shared    buffers     cached
Mem:          499M       256M       242M       4,6M        23M       105M
-/+ buffers/cache:       128M       371M
Swap:         953M         0B       953M
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0      2:0    1    4K  0 disk 
sda      8:0    0 37,3G  0 disk 
├─sda1   8:1    0 18,6G  0 part /
├─sda2   8:2    0  954M  0 part [SWAP]
├─sda3   8:3    0    1K  0 part 
└─sda5   8:5    0 17,7G  0 part /home
sr0     11:0    1 1024M  0 rom 

Octoprint

La instalación y configuración de Octoprint están basadas en este tutorial http://rambo.co.za/?p=499

Instalación

Mediante aptitude se instalaron los siguientes paquetes:

python-pip
python-dev
python-setuptools
git
libyaml-dev
build-essential

Primero se clonó el repositorio de Octoprint

user@host:~$ cd ~
user@host:~$ git clone https://github.com/foosel/OctoPrint.git

Cuando termina de clonar, entrar al directorio e instalar:

user@host:~$ cd OctoPrint
user@host:~$ su
Contraseña: 
user@host:~# python setup.py install

Y crear el directorio:

user@host:~$ mkdir ~/.octoprint

Agregar al usuario a los grupos tty y dialout para que tenga acceso a los puertos serie

user@host:~$ su
Contraseña: 
user@host:~# usermod -a -G tty,dialout username

Para comprobar que la instalación funcione correctamente, primero agregamos el proxy a la consola donde vayamos a correr el programa y luego lo ejecutamos

user@host:~$ export http_proxy=http://proxy.fi.uba.ar:8080
user@host:~$ ~/OctoPrint/run

Posteriormente entramos a http://<tu-ip>:5000 en un navegador. La primera vez que se ingresa hay que configurar el usuario y la contraseña.

Seleccionar el puerto donde se encuentre la impresora, el baudrate y cargamos la configuración.

Manejar varias impresoras

Para manejar varias impresoras con una sola computadora se necesita una instancia de Octoprint por cada impresora. Para esto realizar copias del directorio .octoprint.

user@host:~$ cd ~
user@host:~$ cp -r .octoprint .octoprint1
user@host:~$ cp -r .octoprint .octoprint2

En este caso se necesitan 3 instancias, por lo que se copia 2 veces con nombres distintos.

Luego se realizó un script para ejecutar cada instancia de Octoprint como demonio y en puertos distintos. Finalmente no se utilizó este script.

user@host:~$ vim ~/octoprint_startup.sh

El contenido del script es:

#!/bin/sh

OCTOPRINT_HOME=/home/user/OctoPrint

# start the webui 1
$OCTOPRINT_HOME/run --daemon start

# start the webui 2
$OCTOPRINT_HOME/run --daemon start --port 5001 --pid /tmp/octoprint1 --basedir ~/.octoprint1

# start the webui 3
$OCTOPRINT_HOME/run --daemon start --port 5002 --pid /tmp/octoprint2 --basedir ~/.octoprint2

Modificar el nombre de usuario con el correspondiente y, si se necesitan más instancias, agregar otros puertos.

Luego cambiar los permisos al archivo

user@host:~$ chmod 755 octoprint_startup.sh

y ejecutarlo

user@host:~$ sh octoprint_startup.sh

Se debería poder ingresar a cada instancia en http://<tu-ip>:5000 , http://<tu-ip>:5001 etc.

Configuración de puertos

Cada vez que una impresora se conecta o se desconecta del puerto USB, o cuando reinicia la PC, puede ser asignada a un puerto distinto. Para esto se van a agregar reglas UDEV.

Primero se conectan las impresoras. Si, por ejemplo, está en el puerto ttyACM0 realizamos lo siguiente:

user@host:~$ udevadm info /dev/ttyACM0

Y tomamos nota de la información de los campos ID_MODEL_ID, ID_SERIAL_SHORT y ID_VENDOR_ID

Luego creamos el archivo /etc/udev/rules.d/10-local.rules con esos datos. En este caso el contenido es:

SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0042", ATTRS{serial}=="85430343238351602130" SYMLINK+="ImpresoraNegra" 
SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0042", ATTRS{serial}=="754393134373519080D0" SYMLINK+="ImpresoraRoja" 

Y reiniciamos la computadora.

Podemos comprobar que todo funciona haciendo

user@host:~$ ls -l /dev/Impresora*

Esta configuración sirve siempre y cuando no se cambie el arduinio.

Para configurar las instancias de OctoPrint editamos el archivo config.yaml en ~/.octoprint/ , ~/.octoprint1/, etc, de la siguiente manera:

user@host:~$ vim ~/.octoprint/config.yaml
serial:
  # Instead of Prusa1, use a name for your printer
  port: /dev/ImpresoraNegra
  # Default is false, but configuring it to true will do the job, well, not really always
  autoconnect: true
  # Instead of Prusa, use you specific prefix
  additionalPorts:
  - /dev/Impresora*
  #set your baudrate
  baudrate: 115200

server:
  # Use a different port number for each printer
  port: 5000

appearance:
  # Give each of your printer a suggestive name that will appear in the title and navigation bars
  name: Impresora Negra
  # Customize the color of the navigation bar (limited choice of colors)
  color: black
server:
  # set to true if you want to make different login credentials for each instance. 
  firstRun: false

Este archivo se debe modificar para cada instancia de OctoPrint que necesitemos.

Iniciar OctoPrint al encender la PC

(Aclaración: Para que sea más fácil habilitar las instancias se renombró el directorio .octoprint/ a .octoprint0/)

Se hizo un servicio de systemd para que las instancias de OctoPrint se inicien cuando se enciende la PC. En el directorio /etc/systemd/system crear el archivo octoprint@.service, que será una plantilla para las instancias que necesitemos.

user@host:~$ su
Contraseña: 
root@host:~# vim octoprint@.service
[Unit]
Description=Inicializa la instancia %I de OctoPrint

[Service]
Environment="http_proxy=http://proxy.fi.uba.ar:8080" 
Type=forking
ExecStart=/usr/local/bin/octoprint --daemon start --port 500%i --pid /tmp/octoprint%i.pid --basedir /home/impresora/.octoprint%i
ExecStop=/usr/local/bin/octoprint --daemon stop --port 500%i --pid /tmp/octoprint%i.pid --basedir /home/impresora/.octoprint%i
RemainAfterExit=yes
User=impresora

[Install]
WantedBy=multi-user.target

Luego reiniciar el systemd

root@host:/etc/systemd/system# systemctl daemon-reload

Y habliltar el servicio

root@host:/etc/systemd/system# systemctl enable octoprint@.service

Para iniciar la instancia 0, hacer

root@host:/etc/systemd/system# systemctl start octoprint@0.service

Para iniciar las instancias 1, 2, ... reemplazar el 0 de la línea anterior por el número que se necesite. El archivo octoprint@.service es una plantilla, donde cada %i es reemplazado por lo que se escriba después de la @ al iniciarlo, pararlo, etc. Para ver una explicación más detallada ir a http://0pointer.de/blog/projects/instances.html

Finalmente, para que se inicie al prenderse la máquina, hacer los siguientes links

root@host:/etc/systemd/system# ln -s /lib/systemd/system/octoprint@.service /etc/systemd/system/multi-user.target.wants/octoprint@0.service
root@host:/etc/systemd/system# ln -s /lib/systemd/system/octoprint@.service /etc/systemd/system/multi-user.target.wants/octoprint@1.service

Configuración de las impresoras

La primera vez que se ingresa a la página de cada impresora hay que definir el usuario y la contraseña. Luego de loguearse se debe cargar la configuración de la impresora (modelo, medidas de la cama, etc), las mismas se encuentran en Settings -> Printer profiles.

Para cada impresora se creó un perfil nuevo con los siguientes parámetros:
Configuración de la impresora negra en el Octoprint

Y se estableció como predeterminado para que la impresora lo utilice cada vez que se conecta.

Instalación de plugins

Para instalar plugins de OctoPrint loguearse como root y ejecutar el comando que figura en la página del plugin

user@host:~$ su
Contraseña:
root@host:~# pip install <url del plugin> 

Luego reiniciar los servicios

root@host:/etc/systemd/system# systemctl restart octoprint@0.service
root@host:/etc/systemd/system# systemctl restart octoprint@1.service

o reiniciar la pc

Al recargar las páginas de las impresoras se podrán ver los plugins instalados.

Plugins instalados

Print History
Printer Statistics
Cost Estimator

config_octoprint_negra.png - Configuración de la impresora negra en el Octoprint (43,9 KB) Giselle Tello de Meneses, 07/09/2016 16:22