J’aime beaucoup OctoPrint pour gérer mon imprimante 3D. Il existe beaucoup de plugins pour enrichir les fonctionnalités et il est bien intégré dans Cura. L’ensemble fait un duo parfait pour gérer les impressions 3D. il existe même un plugin OctoFusion pour l’intégrer directement dans Fusion360 (non testé encore). Seul problème, l’installation recommandée est sur raspberry pi. Je dispose du premier modèle, qui est peu puissant par rapport aux récents, et déconseillé pour OctoPi, une distribution OctoPrint prête à l’emploi. Je l’ai utilisé avec succès pendant presque deux ans, mais depuis la mise à jour vers la dernière version, il est devenu vraiment lent, au point de multiplier par deux le temps d’impression, et causer des problèmes car l’imprimante se retrouve à attendre les commandes et laisse couler du filament en attendant. Cela crée alors des boursouflures problématiques sur les impressions… Comme j’ai mon serveur sous Debian qui tourne à coté de l’imprimante, c’était dommage d’acheter un raspberry rien que pour ça, d’autant que même les anciens modèles ne sont pas bradés, j’ai donc opté pour installer OctoPrint directement sur mon serveur.
Installation d’OctoPrint
L’installation est super bien décrite sur la page setting up octoprint on a raspberry pi running raspbian , il suffit de quelques adaptations pour s’adapter à un non raspberry :
Le mode d’emploi installe OctoPrint sous l’utilisateur pi ; plutôt que de créer un utilisateur pi qui ne correspondrait à rien sur mon serveur, j’ai :
- créé un utilisateur octoprint qui va exécuter le serveur pour qu’il ne tourne pas en root : sudo useradd octoprint
- installé dans /opt/OctoPrint plutôt que dans le home de l’utilisateur
Les séquences ci-dessous sont les scripts de la page octoprint adaptés avec les choix ci-dessus.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sudo su cd /opt apt update apt install python-pip python-dev python-setuptools python-virtualenv git libyaml-dev build-essential mkdir OctoPrint && cd OctoPrint virtualenv venv source venv/bin/activate pip install pip --upgrade pip install octoprint useradd octoprint usermod -a -G tty octoprint usermod -a -G dialout octoprint chown -R octoprint:octoprint /opt/OctoPrint |
A noter, si la version python par défaut de votre système diffère de celle octoprint vous devrez spécifier la version à utiliser avec le paramètre --python= ; consulter la page de migration python d’Octoprint ou le commentaire de Neocorp en dessous de l’article. Si vous avez une erreur sur gcc non trouvé, quelques paquets supplémentaires à installer dans le commentaire de Neocorp.
Puis pour le lancement automatique :
1 2 3 4 |
wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.init && sudo mv octoprint.init /etc/init.d/octoprint wget https://github.com/foosel/OctoPrint/raw/master/scripts/octoprint.default && sudo mv octoprint.default /etc/default/octoprint sudo chmod +x /etc/init.d/octoprint sudo update-rc.d octoprint defaults |
En ajustant dans le fichier /etc/defaults/octoprint les lignes :
1 2 3 4 5 |
OCTOPRINT_USER=octoprint BASEDIR=/opt/OctoPrint/.octoprint PORT=5000 DAEMON=/opt/OctoPrint/venv/bin/octoprint START=yes |
Customisation d’OctoPrint
Lors de la première connexion à OctoPrint, l’installation se déroule sans problème. OctoPrint répond à la vitesse de l’éclair sur un PC 🙂
Pour qu’OctoPrint sache se redémarrer tout seul il est nécessaire de lui donner les droits correspondant pour éviter d’avoir à le faire à la main, ce qui devient vite pénible. Comme il tourne sous l’utilisateur octoprint, il est nécessaire de donner à cet utilisateur des droits supplémentaires. Plutôt que de donner les droits sudoers sur n’importe quelle commande comme décrit sur la page (autant faire tourner le serveur en root !), j’ai préféré limiter aux commandes nécessaires.
Créer un fichier /etc/sudoers.d/octoprint avec le contenu :
1 2 3 4 |
# Pour autoriser le redémarrage d'octoprint par lui-même octoprint ALL = (root) NOPASSWD: /etc/init.d/octoprint # Pour autoriser le démarrage/arrêt de la webcam (cf la suite :)) octoprint ALL = (root) NOPASSWD: /opt/OctoPrint/webcam |
Puis dans la configuration d’OctoPrint, dans l’entrée “Server”, indiquer comme commande “Restart OctoPrint” sudo /etc/init.d/octoprint restart
Comme j’allume l’imprimante seulement lorsque j’en ai besoin, j’ai rencontré un petit souci :
- d’une part si je laisse Cura ouvert, celui-ci va se connecter automatiquement à l’imprimante dès que je l’allume, et je ne pourrais pas connecter OctoPrint ; pour résoudre cela, il suffit de désactiver le plugin “USB Printing”
- d’autre part OctoPrint ne se reconnecte pas automatiquement ; pour ce faire il suffit d’ajouter le plugin PortLister !
J’utilise par ailleurs les plugins suivants :
- MultiCam pour le support de plusieurs prises de vues dans l’interface et Fullscreen pour en profiter en plein écran
- ABL Expert Plugin et Bed Visualizer pour l’autolevel du plateau
- Change Filament pour faciliter le changement de filament
- Detailled Progress pour afficher la progression de l’impression
- DisplayZ pour afficher la hauteur actuelle de l’impression
- EEPROM Marlin Editor pour éditer les paramètres du firmware enregistrés dans l’EEPROM
Installation de la webcam
J’utilisais beaucoup la caméra raspberry, très pratique car très fine et que j’avais fixée à l’axe des Z avec cette petite impression 3D, pour pouvoir surveiller que l’impression se passe bien. Comme je n’ai pas réussi à installer une webcam plus grosse de la même façon, je vais conserver le raspberry seulement pour streamer la camera raspberry et ajouter le flux via le plugin multicam en attendant de trouver un autre moyen, sans doute en fixant une mini caméra endoscope directement sur la tête d’impression (moins de 3€ sur AliExpress).
Mais je voulais aussi une webcam fixe pour avoir une vue d’ensemble, et potentiellement ensuite utiliser octolapse pour des jolis timelapse. Après avoir testé et positionné la webcam avec es outils classique cheese ou webcamoid, il faut installer sur la debian un outil pour streamer le flux. Dans la distribution est intégré motion, qui fonctionne très bien, mais consomme inutilement du CPU pour de la détection de mouvement. Je me suis donc résolu à ajouter mjpg-streamer manuellement comme indiqué sur le site :
1 2 3 4 5 6 7 8 |
sudo su cd /opt/OctoPrint apt install subversion libjpeg62-turbo-dev imagemagick ffmpeg libv4l-dev cmake git clone https://github.com/jacksonliam/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental export LD_LIBRARY_PATH=. make chown -R octoprint:octoprint /opt/OctoPrint |
(sous Ubuntu remplacer libjpeg62-turbo-dev par libjpeg62-dev)
Il faut ensuite copier les deux scripts webcam et webcamDaemon ci-dessous dans /opt/OctoPrint.
Script /opt/OctoPrint/webcam :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash # Start / stop streamer daemon case "$1" in start) /opt/OctoPrint/webcamDaemon >/dev/null 2>&1 & echo "$0: started" ;; stop) pkill -x webcamDaemon pkill -x mjpg_streamer echo "$0: stopped" ;; *) echo "Usage: $0 {start|stop}" >&2 ;; esac |
Script /opt/OctoPrint/webcamDaemon :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#!/bin/bash MJPGSTREAMER_HOME=/opt/OctoPrint/mjpg-streamer-experimental MJPGSTREAMER_INPUT_USB="input_uvc.so" MJPGSTREAMER_INPUT_RASPICAM="input_raspicam.so" # init configuration camera="auto" camera_usb_options="-r 640x480 -f 10" camera_raspi_options="-fps 10" http_port=" -p 8080 " if [ -e "/opt/OctoPrint/webcam.txt" ]; then source "/opt/OctoPrint/webcam.txt" fi # runs MJPG Streamer, using the provided input plugin + configuration function runMjpgStreamer { input=$1 pushd $MJPGSTREAMER_HOME echo Running ./mjpg_streamer -o "output_http.so -w ./www $http_port " -i "$input" LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www $http_port" -i "$input" popd } # starts up the RasPiCam function startRaspi { logger "Starting Raspberry Pi camera" runMjpgStreamer "$MJPGSTREAMER_INPUT_RASPICAM $camera_raspi_options" } # starts up the USB webcam function startUsb { logger "Starting USB webcam" runMjpgStreamer "$MJPGSTREAMER_INPUT_USB $camera_usb_options" } # we need this to prevent the later calls to vcgencmd from blocking # I have no idea why, but that's how it is... vcgencmd version # echo configuration echo camera: $camera echo usb options: $camera_usb_options echo raspi options: $camera_raspi_options # keep mjpg streamer running if some camera is attached while true; do if [ -e "/dev/video0" ] && { [ "$camera" = "auto" ] || [ "$camera" = "usb" ] ; }; then startUsb elif [ "`vcgencmd get_camera`" = "supported=1 detected=1" ] && { [ "$camera" = "auto" ] || [ "$camera" = "raspi" ] ; }; then startRaspi fi sleep 120 done |
Ces scripts sont issus de cette page de la communauté octoprint en version 19, les scripts actuels ayant été modifiés pour des scripts utilisant systemd. Ces scripts ont été adaptés comme suit:
- Dans le script webcam : le répertoire a été modifié par /opt/OctoPrint/webcamDaemon
- Dans webcamDaemon :
- le fichier de configuration a été remplacé par /opt/OctoPrint/webcam.txt plutôt que /boot/octopi.txt
- pour permettre de customiser le port de mjpg-streamer, ajouter un paramètre http_opts :
- dans les paramètres (ou webcam.txt)
1 |
http_port=" -p 5100 " |
-
-
- dans la fonction runMjpgStreamer
-
1 2 |
echo Running ./mjpg_streamer -o "output_http.so -w ./www $http_port " -i "$input" LD_LIBRARY_PATH=. ./mjpg_streamer -o "output_http.so -w ./www $http_port" -i "$input" |
La camera est alors fonctionnelle lorsqu’on lance le script webcam start, et il suffit de configurer l’url http://localhost:5110/?action=stream dans MultiCam.
Cependant c’est dommage de streamer tout le temps alors que ce n’est utile que lorsque l’imprimante est allumée. On va pouvoir mettre en place le démarrage et l’arrêt automatique à la connexion / déconnexion de l’imprimante via les events OctoPrint. Bizarrement je n’ai pas trouvé de possibilité de régler ça par l’interface, il faut donc modifier à la main le fichier config.yaml qui est dans le répertoire .octoprint (/opt/OctoPrint/.octoprint pour mon installation), puis redémarrer OctoPrint pour qu’il soit pris en compte
1 2 3 4 5 6 7 8 9 |
events: enabled: True subscriptions: - event: Disconnected command: sudo /opt/OctoPrint/webcam stop type: system - event: Connected command: sudo /opt/OctoPrint/webcam start type: system |
Vous retrouverez ici la seconde commande que nous avions ajoutée dans le fichier /etc/sudoers.d/octoprint.
L’installation est désormais complètement fonctionnelle, vous pouvez laisser octoprint et cura fonctionner en permanence. Lorsque vous allumerez l’imprimante (via une prise commandée par Domoticz pour mon cas), alors OctoPrint se connectera automatiquement, démarrera la webcam et vous pourrez imprimer directement depuis Cura.
A vos impressions 3D !
Super mémo / Tuto,
pour ma part j’ai eu 2 sourcies, python 2 par default
J’ai remplacer
virtualenv venv
par
virtualenv –python=python3 venv
et une erreur: error: command ‘aarch64-linux-gnu-gcc’ failed with exit status 1
j’ai installer
sudo apt-get install python3 python-dev python3-dev \
build-essential libssl-dev libffi-dev \
libxml2-dev libxslt1-dev zlib1g-dev \
python-pip
Puis nickel. Merci.
Je le mets en commentaire si ça peu servir 😉
Ma config orangepi lite 2 – debian stretch by orangepi upgrade à buster clean avant install
Merci pour ces compléments ! J’ai modifié l’article pour y faire référence.
E: Impossible de trouver le paquet libjpeg62-turbo-dev
Essayez en remplaçant par libjpeg62-dev
Merci
Par contre je ne trouve ni webcam ni webcamDaemon ou ce trouve ses scripts?
Sur la page d’installation d’OctoPrint mentionnée en début d’article (https://community.octoprint.org/t/setting-up-octoprint-on-a-raspberry-pi-running-raspbian-or-raspberry-pi-os/2337)
bonjour
(Il faut ensuite copier les deux scripts webcam et webcamDaemon sur la page octoprint dans /opt/OctoPrint, et adapter légèrement :
Dans le script webcam : adapter le répertoire /opt/OctoPrint/webcamDaemon dans le script webcam
Dans webcamDaemon :
rechercher le fichier de configuration /opt/OctoPrint/webcam.txt plutôt que /boot/octopi.txt
pour permettre de customiser le port de mjpg-streamer, ajouter un paramètre http_opts :
dans les paramètres (ou webcam.txt) )
dans /opt/OctoPrint et /opt/OctoPrint je n’est pas les fichiers webcamDaemon et webcam.txt est ce que je doit les crée ou il devrait y être ?
Bonjour, oui il faut les créer à partir des instructions données dans la page mentionnée : https://community.octoprint.org/t/setting-up-octoprint-on-a-raspberry-pi-running-raspbian-or-raspberry-pi-os/2337 (au paragraphe “Optional: Webcam Automatic Startup”)
Bonjour, lors de la mise en place du fichier /etc/sudoers.d/octoprint cela me fait une erreur : octoprint : parse error in /etc/sudoers.d/octoprint near line 4 ; TTY=unknown ; PWD=/ ; USER=root ;
cela concerne le démarrage de la webcam.
je n’arrive pas a corriger cette erreur. quel qu’un aurait il une idée?
Pouvez-vous coller en commentaire le contenu de votre fichier ? Avez-vous utilisé exactement les memes paramètres ? (chemin, utilisateur,…)
Bonjour le voici :
# Pour autoriser le redémarrage d’octoprint par lui-même
octoprint ALL = (root) NOPASSWD: /etc/init.d/octoprint
# Pour autoriser le démarrage/arrêt de la webcam (cf la suite :))
# octoprint ALL = (root) NOPASSWD: /opt/OctoPrint/webcam
Il suffit juste de dé commenter la dernière ligne pour avoir l’erreur.
j’ai utiliser exactement les mêmes paramètres que le tuto
le contenu du fichier webcam :
[Unit]
Description=Camera streamer for OctoPrint
After=network-online.target OctoPrint.service
Wants=network-online.target
[Service]
Type=simple
User=octoprint
ExecStart=/opt/OctoPrint/webcamDaemon
[Install]
WantedBy=multi-user.target
Bon j’ai avancé un peu, je n’ai plus l’erreur par contre le stream de la webcam ne fonctionne pas. il fonctionne bien uniquement si je le lance la commande en manuellement
Tout s’explique! En effet les instructions du site octoprint ont été modifiées pour utiliser le système de démarrage systemd plutôt que init précédemment. Le texte que vous avez copié n’est pas celui du fichier “webcam” (script executable, pour le système init), mais celui du fichier “webcamd.service” (pour systemd seulement, n’est pas un script executable, d’où les erreurs que vous avez eues).
Voici le script webcam tel que présent dans la révision 19 du post de la communauté octoprint:
#!/bin/bash
# Start / stop streamer daemon
case "$1" in
start)
/home/pi/scripts/webcamDaemon >/dev/null 2>&1 &
echo "$0: started"
;;
stop)
pkill -x webcamDaemon
pkill -x mjpg_streamer
echo "$0: stopped"
;;
*)
echo "Usage: $0 {start|stop}" >&2
;;
esac
Si vous souhaitez lancer le streaming de la webcam seulement lorsque l’imprimante est connectée, je vous conseille de suivre les étapes ci-dessus avec le fichier copié dans ce commentaire (je modifierai ultérieurement l’article pour l’intégrer). Si vous souhaitez simplement lancer le streaming de la webcam au démarrage de l’ordinateur, vous pouvez suivre la nouvelle méthode proposée par l’article de la communauté octoprint utilisant systemd.
Merci d’avoir signalé
Ok merci de votre aide. Entre temps j’étais tombé sur un autre tuto qui parlais de ce script. Aujourd’hui tous fonctionne bien avec octoprint sous OpenMedia Vault 5 et avec prise connectée de chez Action gérer par le plugin Tuya sur Octoprint et une webcam logitech C270.
Bonjour et merci pour ce tuto, il m’a permis d’installer octoprint sur mon serveur Debian (qui me sert à pas mal de choses).
S’il te plait, te serait-il possible d’indiquer comment gérer le multi instances car j’ai peur de faire des bêtises vu que tout fonctionne.
Merci 🙂
Bonjour, par multi-instances tu mentionnes le fait de piloter simultanément plusieurs imprimantes 3D à partir d’Octoprint ? Si oui, comme je n’ai qu’une imprimante 3D, je n’ai pas eu ce problème. A priori ce n’est pas supporté par Octoprint mais il y a quelques solutions semblant faciliter la mise en place de plusieurs instances, comme celle décrite dans cette vidéo : https://www.youtube.com/watch?v=J5VzI4AFav4&t=0s (je n’ai pas testé). Cependant comme l’installation initiale diffère de celle décrite dans cet article, je ne sais pas si ça se passe bien. Je pense que sur un serveur Debian je regarderai plutôt l’installation dans de multiples containers docker : https://hub.docker.com/r/octoprint/octoprint (pas encore testé).
Bonjour Rémi 🙂
En adaptant les lignes issues de ce tuto ( https://jandra.wordpress.com/2019/10/07/octoprint-running-multiple-instances-webcam/ ) j’y suis arrivé sans soucis, fallait juste trouver et adapter.
Merci encore et bonne continuation ! 🙂
Super tuto, ça marche impeccable (Ubuntu Server 20.04 sur un laptop HP et une Artillery 3D Genius Pro).
Pour mjpg-streamer, on peut passer par snap, c’est plus simple, notamment pour les scripts de démarrage :
https://snapcraft.io/install/mjpg-streamer/ubuntu
En 2 lignes, c’est installé :
snap install mjpg-streamer
snap connect mjpg-streamer:camera
Le paramétrage du port, de la camera et du démarrage auto se fait dans le fichier /var/snap/mjpg-streamer/current/config
Merci pour l’info. Je déconseille cependant de laisser le service mjpg-streamer tourner en permanence car ça consomme quand même un peu de ressource inutilement (ça doit pouvoir se résoudre via snap start/stop mjpg-streamer dans .octoprint/config.yaml). Egalement le snap ne semble pas avoir été mis à jour depuis 2018, ce qui me permet de rappeler qu’il ne faut pas exposer directement mjpg-streamer en dehors d’un réseau sécurisé, qu’il s’agisse de la version git ou du snap.
De mon côté, le pc que j’utilise n’est allumé que quand je veux lancer une impression donc ça ne pose pas de problème de lancer mpjg-streamer au démarrage 😉 .
Par contre je te rejoins sur l’age du snap. Au delà de pb de secu, la version github doit apporter la prise en charge de nouveaux matériels ou une meilleure compatibilité.
Salut,
J’ai finalement abandonné mpeg-streamer, car trop de problème de perf pour passer sur ustreamer qui fonctionne super bien (Ubuntu sur un vieux laptop) :
https://github.com/pikvm/ustreamer