Verificar la versión, al final de la página de octoprint verás que versión tienes, esta guía es válida para la versión de OctoPi 0.18.0.
Primero entramos por SSH a octoprint, por ejemplo desde Windows con la aplicación PuTTy, introducimos la IP de la raspberry, marcamos SSH y finalmente a Open.
Duplicamos este fichero para tantas webcams queramos poner:
sudo cp /root/bin/webcamd /root/bin/webcamd2
sudo cp /root/bin/webcamd /root/bin/webcamd3
sudo cp /root/bin/webcamd /root/bin/webcamd4
Explicaré primero como configurar una Pi Cam, posteriormente se detalla como configurar las webcams por USB.
1. PI CAM
Editamos el primer fichero:
sudo nano /root/bin/webcamd
Solo editaremos estos dos parámetros para la pi cam:
camera="raspi"
camera_raspi_options="-x 1280 -y 720 -fps 15 -q 75"
Podéis poner la configuración que prefiráis.
Guardamos con CRTL+X, luego Y (yes), finalmente ENTER.
2. WEBCAM por USB
2.1. Renombrar puerto USB para las webcam USB
Vamos a configurar la webcam por usb, en este caso será un Logitech C270 y una HERCULES HD.
Para otros modelos de webcam, en este hilo del foro de OctoPrint, encontraréis varias configuraciones válidas.
Antes que nada, tenemos que detectar el puerto de video de la webcam. Con este comando podremos determinar que /dev/video
tiene cada camara. En este ejemplo vemos que la Logitech c270 viene con el nombre UVC Camera y la camera de Hercules HD con el nombre de Hercules HD Twist. Apuntamos el primer valor de /dev/video#
, de cada una de las webcam.
v4l2-ctl --list-devices
Mandamos este comando, con el número de video que no as dado en la captura anterior, en este caso, video2
para la Logitech y video0
para la Hercules.
udevadm info -q all -n /dev/video2 --attribute-walk
Saldrán muchos números, buscamos y apuntamos estos valores:
ATTR{index}=="0"
ATTRS{idVendor}==""
ATTRS{idProduct}==""
En el caso que las webcams tengan los mismos valores, hay que apuntar un cuarto valor, el puerto usb en que se conecta la webcam, con lo que siempre se tendrá que conectar a ese puerto usb.
ATTRS{devpath}==""
Editamos este fichero, si es la primera vez que accedes saldrá en blanco.
sudo nano /etc/udev/rules.d/99-usb.rules
Dentro añadimos una línea para cada webcam, rellenándolo con los valores conseguidos anteriormente. En SYMLINK+
, añadimos el nombre que le daremos al nuevo puerto. Quedando así:
SUBSYSTEM=="video4linux", ATTR{index}=="0", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="0825", SYMLINK+="LOGI"
SUBSYSTEM=="video4linux", ATTR{index}=="0", ATTRS{idVendor}=="06f8", ATTRS{idProduct}=="301a", SYMLINK+="HERCU"
Guardamos y reiniciamos la raspberry con:
sudo reboot now
Vamos a comprovar si el renombrado de puertos es correcto, con:
ls -l /dev
Como se aprecia en la captura, podemos ver que la webcam Logitech, que le se le ha dado el nombre LOGI
, apunta a video0
, y la Hercules con nombre HERCU
, apunta a video2
, con lo que podemos verificar que todo es correcto.
2.2. Configurando cada una de las Webcam
Entramos el fichero duplicado de la segunda webcam usb:
sudo nano /root/bin/webcamd2
En este caso editaremos estas líneas, y las dejaremos como se indica aquí, añadiendo el puerto 8081
para la segunda camera, 8082
para la tercera …
camera="usb"
camera_usb_options="-r 1280x720 -f 15"
camera_http_options="-p 8081 -n --listen 127.0.0.1"
Sin salir del fichero, vamos bajando y buscamos el apartado # starts uo the USB webcam
en device
sustituimos video0
por el nombre del puerto renombrado, en el caso de la guia, seria por LOGI
o HERCU
.
device="video0"
En este caso por:
device="LOGI"
o
device="HERCU"
Continuando en el fichero, vamos bajando y buscamos el apartado # add list of raspi camera into an array
, más abajo (como se muestra en la captura, en startUsb
modificamos video_device
por device
.
startUsb "${device}"
Guardamos y salimos de este fichero.
Repetimos este proceso para cada webcam, con su webcamd y puerto renombrado correspondiente.
Pasmos a definir el servicio para la segunda webcam webcamd2.service
, o para tantas como quieras webcamd3.service
, webcamd4.service
, etc.
Duplicamos este fichero:
sudo cp /etc/systemd/system/webcamd.service /etc/systemd/system/webcamd2.service
Abrimos el fichero duplicado:
sudo nano /etc/systemd/system/webcamd2.service
Editamos estos parámetros:
Description=the OctoPi webcam2 daemon with the user specified config
StandardOutput=append:/var/log/webcamd2.log
StandardError=append:/var/log/webcamd2.log
ExecStart=/root/bin/webcamd2
Activamos porque se inicie el servicio de la segunda webcam al arrancar la raspberry.
sudo systemctl enable webcamd2
NOTA: En caso de tener más cámaras, repite lo anterior cambiando el 2 por el 3, 4, 5, etc.
3. Editamos HAProxy para poder ver las webcams en Octoprint
Ahora editaremos el archivo haproxy para añadir la webcam 2.
sudo nano /etc/haproxy/haproxy.cfg
Hay dos tipos de configuración:
En caso de tener 2 instancias de octoprint, dejar el apartado de frontend public2
, así:
frontend public2
bind :::81 v4v6
bind :::444 v4v6 ssl crt /etc/ssl/snakeoil.pem
option forwardfor except 127.0.0.1
use_backend webcam2 if { path_beg /webcam/ }
default_backend octoprint2
backend octoprint2
acl needs_scheme req.hdr_cnt(X-Scheme) eq 0
reqrep ^([^\ :]*)\ /(.*) \1\ /\2
reqadd X-Scheme:\ https if needs_scheme { ssl_fc }
reqadd X-Scheme:\ http if needs_scheme !{ ssl_fc }
option forwardfor
server octoprint2 127.0.0.1:5001
errorfile 503 /etc/haproxy/errors/503-no-octoprint.http
backend webcam2
reqrep ^([^\ :]*)\ /webcam/(.*) \1\ /\2
server webcam2 127.0.0.1:8081
errorfile 503 /etc/haproxy/errors/503-no-webcam.http
En el caso que solo tengáis una instancia de octoprint y 2 cameras, hay que añadir en frontend public
la nueva línea de la webcam.
frontend public
bind :::80 v4v6
bind :::443 v4v6 ssl crt /etc/ssl/snakeoil.pem
option forwardfor except 127.0.0.1
use_backend webcam if { path_beg /webcam/ }
use_backend webcam2 if { path_beg /webcam2/ }
use_backend webcam_hls if { path_beg /hls/ }
use_backend webcam_hls if { path_beg /jpeg/ }
default_backend octoprint
.... añadir al final ....
backend webcam2
reqrep ^([^\ :]*)\ /webcam2/(.*) \1\ /\2
server webcam2 127.0.0.1:8081
errorfile 503 /etc/haproxy/errors/503-no-webcam.http
Guardamos el fichero y comprobamos que todo esté correcto con:
sudo service haproxy restart
Si no da ningún error es que todo es correcto.
En el caso de salir un error como este, volver a editar haproxy, revisad bien el fichero y que no este algún valor mal introducido.
Reiniciamos la raspberry con:
sudo reboot now
Una vez reiniciado octoprint, podremos verificar fácilmente si las cámaras funcionan, entrando en estos enlaces:
Camera pi cam:
http://octopi.local/webcam/
http://octopi.local:8080
http://192.168.X.XXX/webcam/
http://192.168.X.XXX:8080
Segunda webcam con multi-instancia:
http://octopi.local:81/webcam/
http://192.168.X.XXX:81/webcam/
Segunda webcam sin multi-instancia:
http://octopi.local/webcam2/
http://octopi.local:8081
http://192.168.X.XXX/webcam2/
http://192.168.X.XXX:8081
Finalmente solo queda configurar la segunda webcam en la segunda instancia de octoprint.
Vamos a Settings
–> Webcam & Timelapse
Activamos Enable webcam support
En la casilla Stream URL: /webcam/?action=stream
Probamos con el botón test
.
Activamos la opción de Timelapse Recordings
, luego añadimos estos valores en:
Snapshot URL: http://127.0.0.1:8081/?action=snapshot
Path to FFMPEG: /usr/bin/ffmpeg
Probamos con el botón test
.
Esto es todo lo necesario para poder tener múltiples cameras en octoprint 0.18.0
Si tenéis alguna duda poder entrar en la magnífica comunidad de octoprint para telegram:
Y quiero dar mención a Chris Riley y Thomas Messmer por sus manuales para la versión de octoprint 0.17.0