Table des matières

www.pihomeserver.fr_wp-content_uploads_2017_01_octoprint-octopi-raspberry-pi-300x300.jpg

Octoprint

Octoprint est un logiciel qu'on installe sur un mini pc ARM, un Raspberry, qui va permettre de gérer l'imprimante PC éteint, la gérer a distance, de faire des films, des timelapse et j'en passe via des plugins qui peuvent être rajouter.

Installation d'octoprint

Je ne vais pas refaire le monde, c'est très bien expliqué sur octoprint. Mais dans les grandes lignes…

Brancher la carte SD sur le pc, décompresser le zip d'octoprint, et éxécuter Etcher. Dans le 1er champs, mettre l'image de Etcher, dans le second la carte SD qui doit être reconnu automatiquement.

Et reste a faire Flash! Après quelque minutes, octoprint est installé sur la carte SD.

Configuration du wifi

Si on a pas configuré le wifi avec son éditeur de texte préféré, moi notepad++ sur son Windows, dans chez moi E:/boot/octopi-network.txt, et la flemme de tout démonter, alors ce connecter en SSH sur le raspberry via le câble ethernet ou via VNC ou en local si le l'interface graphique est installer et si un écran et clavier est relier a celui ci.

Editer le fichier script /boot/octopi-network.txt

------------------------------------------------------------------------------
Access OctoPrint from a web browser on your network by navigating to any of:
 
    http://octopi.local
    http://192.168.1.232
    http://2a01:e35:8bd8:6ce0:b666:4e0e:1697:30be
 
https is also available, with a self-signed certificate.
------------------------------------------------------------------------------
This image comes without a desktop environment installed because it's not
required for running OctoPrint. If you want a desktop environment you can
install it via
 
    sudo /home/pi/scripts/install-desktop
------------------------------------------------------------------------------
OctoPrint version : 1.3.4
OctoPi version    : 0.14.0
------------------------------------------------------------------------------
 
pi@octopi:~ $ sudo nano /boot/octopi-network.txt

Repérer la section ##WPA/WPA2, et modifier afin qu'elle ressemble a ci-dessous après avoir renseigner votre SSID et mot de passe.

## WPA/WPA2 secured
iface wlan0-octopi inet manual
    wpa-ssid "Nomdevotrereseauwifi"
    wpa-psk "Motdepasse"

Pour enregistrer le fichier faite les touches CTRL+X, puis Y pour oui et entrée pour le nom de fichier.

Le plus simple, sans taper 36 commandes lol, rebooter le raspberry via la commande sudo reboot.

pi@octopi:~ $ sudo reboot

Votre BOX ou encore votre routeur attribuera une ip via le DHCP. Le réseau wifi est censé être opérationnel!

Franciser Octoprint

Pour passer OctoPrint en Français, il faut télécharger le pack de langue FR. Pack FR d'octoprint

Ce rendre sur la partie configuration, donc Settings et l'apparence, en Anglais Appearance suivi de Manage et dans Upload chercher l'archive ZIP précédemment téléchargé.

Revenir dans la page Appearence et dans le menu déroulant il devrait y avoir français dans default language. Si ce n'ai pas le cas rebooter le raspberry, et déconnecté bien de votre session octopi.

octoprint_2webcam.sh

J'ai écrit un petit script shell afin de simplifier et gagner du temps pour installer une seconde webcam sur le raspberry. Pour le moment, il fonctionne uniquement dans le cadre, ou la première webcam est une picam. La seconde, peut importe tant qu'elle est supporté par raspberry.

Il est disponible ici.

A savoir qu'il date du 12 décembre 2017 donc pas encore eu de retour d'expérience d'utilisateur. Le script fonctionne chez moi sous un rpi2 avec l'image d'octoprint, une picam v2 et une logitech C270.

Pour l’exécute faire ceci

pi@octopi:~ $ sudo -s
root@octopi:~ $ wget https://www.leduteil.eu/Imprimante_3D/octoprint_2webcam.sh
root@octopi:~ $ chmod +x octoprint_2webcam.sh
root@octopi:~ $ ./octoprint_2webcam.sh

Vous pouvez faire le choix 2 afin de voir si la cam est identifié.

MAJ: Je vais reprendre la partie identification webcam.

Ouvrir Octoprint a l'extérieur

Chez moi Octoprint est ouvert à l'extérieur et pour tout le monde! Afin de ne pas router un port 8080 venant de l'extérieur par exemple sur le port 80 de octoprint dans mon LAN, j'ai préféré de tout faire transparent avec une popup de login sous Ngnix en reverse proxy. Je ne vais pas détailler l'installation de nginx, mais la conf est simple.

############################
# myoctoprint.mydomain ###
############################
 
upstream "webcam" {
    server 192.168.1.x:8080;
}
 
 
server {
    listen 80;
    server_name myoctoprint.mydomain;
 
    location / {
            proxy_pass http://192.168.1.x;
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
    client_max_body_size 0;
 
    auth_basic "Login please";
    auth_basic_user_file /path/to/my/.htpasswd;
 
    }
 
    location /webcam/ {
            proxy_pass http://192.168.1.x;
    }
 
    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
}

Grace a ce bout de conf, j'ai une popup de demande de m'identifier, et je reste sur le port 80 tout est transparent.
Et avec printoid, vous allez me dire que sa ne fonctionne plus. Et bien si, dans les paramètres de l'application il faut dans les paramètres optionnel des profils des serveurs octoprint, activé l'authentification basique.
On ce retrouve avec un octoprint plus sécurisé en dehors de chez sois :)

Ajouter des entrées de menu

Il est possible d'ajouter des scripts qui peuvent être exécuter via le menu.

Pour celà, il faut modifier le fichier config.yaml.
Une fois connecté avec le compte pi

pi@octopi-cr10:~ $ vi .octoprint/config.yaml

Il suffit d'ajouter ce qu'on souhaite ;)
Ajouter le bloc system, l'action, la commande, la description dans le menu et si besoin une confirmation. Par exemple la solution que j'utilise pour éteindre ou démarré mes imprimantes.

system:
  actions:
  - action: Creality CR10-Mini ON
    command: sudo /root/bin/CR10_on.sh
    name: Allumer l'imprimante Creality CR10-Mini
  - action: Creality CR10-Mini OFF
    command: sudo /root/bin/CR10_off.sh
    confirm: ATTENTION, cette commande envoie un OFF a la domotique qui éteindra l'imprimante
      CR10-Mini.
    name: Eteindre l'imprimante Creality CR10-Mini

Script que j'utilise :

#!/bin/sh
IP_JEEDOM=192.168.1.XX
CLEF_API=XXXXXXXXXXXXXXXXXXXXXXXXX
ID_CMD=XXX
 
curl -X POST "http://$IP_JEEDOM/core/api/jeeApi.php?api=$CLEF_API&type=cmd&id=$ID_CMD"
#!/bin/sh
IP_JEEDOM=192.168.1.XX
CLEF_API=XXXXXXXXXXXXXXXXXXXXXXXXX
ID_CMD=XXX
 
curl -X POST "http://$IP_JEEDOM/core/api/jeeApi.php?api=$CLEF_API&type=cmd&id=$ID_CMD"

On configure sudo.

pi@octopi:~ $ visudo
 
Defaults:pi !requiretty
pi@octopi:~ $ vi /etc/sudoers.d/CR10_on
 
pi      ALL=(ALL) NOPASSWD: /root/bin/CR10_on.sh
pi@octopi:~ $ vi /etc/sudoers.d/CR10_off
 
pi      ALL=(ALL) NOPASSWD: /root/bin/CR10_off.sh

Dans mon cas je peux éteindre comme allumer mes imprimantes via jeedom. Jeedom est une solution de domotique. J'utilise des prises ZWAVE perso qui me remonte la conso dans ma console domotique, mais on peu s'y prendre autrement, un esp8266 avec un relay par exemple ou autre.

Latence wifi

J'habite en appartement et je capte grosso modo 33 réseau wifi en 2.4Ghz. Impossible d'avoir le flux de ma picam fluide comme ma Logitech C270. Sur mon PI3, j'ai installé une clef wifi Netgear 5Ghz comme j'ai un routeur 5Ghz en plus de ma freebox revolution 1 1ère génération qui ne fais que 2.4Ghz et non pas le duo 2.4/5Ghz. Je n'accroche pas deux bandes de fréquence donc pour pallier a ce problème passage en 5Ghz ou personne utilise cette fréquence chez moi :)

Pour la clef Netgear A6100-100PES afin qu'elle soit bien reconnu, j'installe un petit module pour le noyau.

pi@octopi:~ $ sudo wget http://downloads.fars-robotics.net/wifi-drivers/install-wifi -O /usr/bin/install-wifi
pi@octopi:~ $ sudo chmod +x /usr/bin/install-wifi

Lancer l'installation du module, il téléchagera le module par rapport a la version du noyau utilisé sur le PI

pi@octopi:~ $ sudo /usr/bin/install-wifi
 
 *** Raspberry Pi wifi driver installer by MrEngman.
 *** Performing self-update
 *** Relaunching after update
 
 *** Raspberry Pi wifi driver installer by MrEngman.
 
Your current kernel revision = 4.9.78-v7+
Your current kernel build    = #1084
 
Checking for a wifi module to determine the driver to install.
 
Your wifi module is Bus 001 Device 005: ID 0846:9052 NetGear, Inc. A6100 AC600 DB Wireless Adapter [Realtek RTL8811AU]
 
And it uses the 8812au driver.
 
Checking for a 8812au wifi driver module for your current kernel.
There is a driver module available for this kernel revision.
Downloading the 8812au driver.
Installing the 8812au driver.
 
Installing driver module 8812au.ko.
Syncing changes to disk
A version of the 8812au driver is already loaded and running.
You will need to reboot to load the new driver, 8812au.ko.

La clef est parfaitement reconnu.

pi@octopi:~ $ sudo lsmod|grep 8812au
8812au               1676813  0
cfg80211              544609  1 8812au
 
pi@octopi:~ $ sudo lsusb
Bus 001 Device 005: ID 0846:9052 NetGear, Inc. A6100 AC600 DB Wireless Adapter [Realtek RTL8811AU]

Là nous avons deux possibilités. Conserver le wifi interne du PI3, et créer une seconde interface. Ou remplacer le wifi du PI3.

Conservation du wifi du PI3

Editer le fichier /boot/octopi-network.txt

pi@octopi:~ $ sudo vi /boot/octopi-network.txt
## WPA/WPA2 secured
iface wlan0-octopi inet manual
    wpa-ssid "SSID_2.4Ghz"
    wpa-psk "############"
 
iface wlan1-octopi inet manual
    wpa-ssid "SSID_5Ghz"
    wpa-psk "############"

Editer le fichier /boot/octopi-wpa-supplicant.txt

pi@octopi:~ $ sudo vi /boot/octopi-wpa-supplicant.txt

Ajouter les réseau

network={
  ssid="SSID_2.4Ghz"
  psk="#############"
}
 
network={
  ssid="SSID_5Ghz"
  psk="##############"
}

Rendre le fichier /etc/network/interfaces comme ceci si vous utilisez le DHCP de votre box/routeur.

# interfaces(5) file used by ifup(8) and ifdown(8)
 
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
 
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
 
auto lo
iface lo inet loopback
 
iface eth0 inet manual
 
allow-hotplug wlan0
iface wlan0-raspbian inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 
allow-hotplug wlan1
iface wlan1-raspbian inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
mapping wlan0
  script /root/bin/map_iface
mapping wlan1
  script /root/bin/map_iface
source /boot/octopi-network.txt

Relancer le réseau

pi@octopi:~ $ sudo service networking restart

Via la commande ifconfig, si tout est ok, il doit avoir deux interface wlan et une ip attaché via le DHCP.

pi@octopi:~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:96:d0:b3
          adr inet6: fe80::ef77:ec8a:4bb6:88f4/64 Scope:Lien
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
lo        Link encap:Boucle locale
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:9928733 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9928733 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1
          RX bytes:284592980223 (265.0 GiB)  TX bytes:284592980223 (265.0 GiB)
 
wlan0     Link encap:Ethernet  HWaddr 8c:3b:ad:12:48:76
          inet adr:192.168.1.**  Bcast:192.168.1.255  Masque:255.255.255.0
          adr inet6: fe80::6901:3d59:39a0:1262/64 Scope:Lien
          adr inet6: 2a01:e35:****:****:****:****:****:****/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:80124295 errors:0 dropped:105981 overruns:0 frame:0
          TX packets:193416706 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:4167777557 (3.8 GiB)  TX bytes:1455359396 (1.3 GiB)
 
wlan1     Link encap:Ethernet  HWaddr b8:27:eb:23:ff:56
          inet adr:192.168.1.**  Bcast:192.168.1.255  Masque:255.255.255.0
          adr inet6: fe80::6901:3d59:39a0:8746/64 Scope:Lien
          adr inet6: 2a01:e35:****:****:****:****:****:****/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:0 (0 GiB)  TX bytes:0 (0 GiB)

Si il n'y a pas d'ip, rebooter le pi, ou faire ceci sur l'interface qui n'a rien.

pi@octopi:~ $ sudo wpa_supplicant -B -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -Dwext
pi@octopi:~ $ sudo dhclient wlan0

Remplacement du wifi du PI3

Editer le fichier /etc/modprobe.d/fbdev-blacklist.conf pour blacklister les modules utilisé par le wifi interne

pi@octopi:~ $sudo vi /etc/modprobe.d/fbdev-blacklist.conf

Ajouter

#wifi
blacklist brcmfmac
blacklist brcmutil

Rebooter le PI, ensuite un ifconfig devrait donne ceci

pi@octopi:~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:96:d0:b3
          adr inet6: fe80::ef77:ec8a:4bb6:88f4/64 Scope:Lien
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
lo        Link encap:Boucle locale
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:9928733 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9928733 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1
          RX bytes:284592980223 (265.0 GiB)  TX bytes:284592980223 (265.0 GiB)
 
wlan0     Link encap:Ethernet  HWaddr 8c:3b:ad:12:48:76
          inet adr:192.168.1.**  Bcast:192.168.1.255  Masque:255.255.255.0
          adr inet6: fe80::6901:3d59:39a0:1262/64 Scope:Lien
          adr inet6: 2a01:e35:****:****:****:****:****:****/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:80124295 errors:0 dropped:105981 overruns:0 frame:0
          TX packets:193416706 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:4167777557 (3.8 GiB)  TX bytes:1455359396 (1.3 GiB)