OctoPrint sur debian/ubuntu

  • Post category:3D
  • Post comments:22 commentaires
  • Post last modified:13 février 2022
  • Temps de lecture :11 min de lecture

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.

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 :

En ajustant dans le fichier /etc/defaults/octoprint les lignes :

 

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 :

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 :

(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 :

Script /opt/OctoPrint/webcamDaemon :

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)
      • dans la fonction runMjpgStreamer
Il y aura quelques erreurs liées à l’absence de vcgencmd qui est un outil qui permet d’interroger le raspberry, mais ce n’est pas grave puisque justement ce n’est pas un raspberry 🙂

 

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

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 !

 

 

 

Cet article a 22 commentaires

  1. Neocorp

    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

  2. Rémi Peyronnet

    Merci pour ces compléments ! J’ai modifié l’article pour y faire référence.

  3. Clems

    E: Impossible de trouver le paquet libjpeg62-turbo-dev

  4. clems

    Merci
    Par contre je ne trouve ni webcam ni webcamDaemon ou ce trouve ses scripts?

  5. dany fuchey

    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 ?

  6. Nico

    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?

    1. Rémi Peyronnet

      Pouvez-vous coller en commentaire le contenu de votre fichier ? Avez-vous utilisé exactement les memes paramètres ? (chemin, utilisateur,…)

      1. Nico

        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

        1. Nico

          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

          1. Nico

            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

          2. Rémi Peyronnet

            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é

  7. Nico

    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.

  8. Skwal

    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 🙂

    1. 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é).

  9. Fred

    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

    1. 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.

      1. Fred

        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é.

  10. Fred

    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

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.