Um meinen 3D-Drucker, ein Prusa i4, sinnvoll zu verwenden, habe ich immer nach einer optimalen, autonomen Lösung gesucht, bei welcher ich einfach meine Modelle hochladen kann und der Rest +passiert+ einfach so von alleine. Also habe ich angefangen mir auf einem RaspberryPi selber etwas zusammen zu bastelnmit Pronterface und anderen Tools. So ganz zufrieden war ich aber nie wirklich…
Seit dem Tag an dem ich nach einem Update von Slic3r die Optionen zu OctoPrint gesehen habe, verwende und empfehle ich nur noch dieses Setup. Hier wie ich mein System aufgebaut habe - ein wenig Linux kenntnisse sind vorausgesetzt, vorallem wenn es um das installieren von paketen und Anhängigkeiten geht (die habe ich nicht mehr alle im Kopf).
Vorbereitungen
Man braucht:
- …einen 3D-Drucker
- …ich empfehle Marlin als Firmware, bei Repetier und Mendelmax hatte ich immer Aussetzer und andere Probleme
- …einen RaspberryPi
- …das Kameramodul zum RaspberryPi
- …oder ein UVC-Kompatible Webcam
RaspberryPi installieren
Den RaspberryPi normal mit einem simplen Raspbian installieren und betriebsbereit machen. Hierzu gibt es schon genug Anleitungen.
- Raspbian herunterladen
- Raspbian auf die Flash entpacken
- Bildschirm und Tastatur anhängen
- RaspberryPi starten
Für das ganze Setup wird kein Xorg oder anderer Window-Manager gebraucht, also nur in den Init-3 starten!
Wenn man nicht als root
arbeitet für den ganzen Setup-Prozess, den verwendeten User den Gruppen tty, dialout, video
hinzufügen und sudo
nicht vergessen.
RaspberryPi Setup
Den RaspberryPi konfigurieren:
$ raspi-config
- Kein X-Server/Window-Manager
- Netzwerk
- SSH-Server
- Webcam - Wenn das Webcam-Modul verwendet wird
- Alles andere nach eigenem Bedarf
Firmware-Upgrade
Anschliessend empfehle ich mit rpi-update
alles auf den neusten Stand zu bringen:
$ apt-get install rpi-update
$ rpi-update
Wenn rpi-update nicht mittels apt-get installiert werden kann:
$ wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update && chmod +x /usr/bin/rpi-update
Pakete installieren
Folgende Pakete müssen installiert werden:
$ apt-get install python-pip gcc cmake git git-core libav-tools libjpeg-dev
Installation und Setup abschliessen
Nach dem Setup und Update den RaspberryPi neu starten!
Anschliessend sollten alle Pakete aktualisiert werden:
$ apt-get update
$ apt-get upgrade
Webcam mit MJPG-Streamer
Der Originale MJPG-Streamer unterstützt das Kamera-Modul vom RaspberryPi nicht, es gibt aber einen Fork von Liam. Jackson unter GitHub: MJPEG-Streamer mit RaspiCam.
Installation
Einfach das Git-Repo klonen und installieren:
$ cd /opt/
$ git clone https://github.com/jacksonliam/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental
$ make
Wenn alles gut läuft mjpg-streamer
kompiliert mit einigen input- und output-Plugins. Diese werden direkt in den mjpg-streamer/mjpg-streamer-experimental
Ordner kopiert und können von dort ausgeführt werden.
$ cd /opt/mjpg-streamer/mjpg-streamer-experimental
$ ./mjpg_streamer -i "./input_raspicam.so" -o "./output_http.so -p 8080 -w www"
Anschliessend sollte man über den Browser direkt darauf zugreifen können: http://RASPI.IP.ADRESSE:8080/
Für eine UVC-Webcam muss noch das Modul geladen werden, der rest bleibt sich gleich:
$ modprobe uvcvideo
$ ./mjpg_streamer -i "./input_uvc.so" -o "./output_http.so -p 8080 -w www"
OctoPrint installieren
Die installation von OctoPrint braucht relativ viele Python-Module welche einfach mittels pip
installiert werden können. Das Problem dabei ist, dass bei einer normalen Raspbian-Installation das /tmp
als 60MB tmpfs
gemountet wird, was im Normalfall total ausreichend ist.
Für pip und die 10k Python-Module ist das jedoch zu wenig, deswegen:
$ umount /tmp
Herunterladen und Installieren
Auch OctoPrint wieder unter /opt installieren:
$ cd /opt
$ git clone https://github.com/foosel/OctoPrint.git
Bei meiner Installation bin ich bei mindestens einem Python-Modul gescheitert, deswegen sollte mindestens dieses über apt-get installiert werden:
$ apt-get install python-babel
Alle anderen können dann über pip automatisch installiert werden:
$ cd /opt/OctoPrint
$ pip install -r requirements.txt
Schlägt ein Paket fehl, die Ausgabe prüfen und die Abhängigkeiten auflösen oder das Modul mittels apt-get manuell installieren.
OctoPrint starten
Sind alle Abhängigkeiten installiert, kann OctoPrint gestartet werden:
$ cd /opt/OctoPrint
$ ./run serve --iknowwhatimdoing --port 80
Das dauert immer eine Weile, anschliessend kann dann über den Webbrowser alles weitere gemacht werden: http://RASPI.IP.ADRESSE/
Nützliche Einstellungen
Die Settings von OctoPrint werden im Home des jeweiligen Benutzers gespeichert: ~/.octoprint/config.yaml
Zugangsbeschränkung
Unter: Einstellungen -> Funktionen -> Zugangsbeschränkung
Neuen Benutzer erstellen um den Zugriff zu beschränken
Webcam
Unter: Einstellungen -> Webcam & Zeitraffer
- Stream URL http://RASPI.IP.ADRESSE:8080/?action=stream
- Snapshot URL http://RASPI.IP.ADRESSE:8080/?action=snapshot
- FFMPEG Pfad /usr/bin/avconv
System-Settings
Unter: Einstellungen -> OctoPrint -> Server
- Restart OctoPrint /etc/init.d/octoprint restart
- Restart System /sbin/reboot
- Shutdown System /sbin/halt
Plugins
OctoPrint kann mit vielen Plugins ausgestattet werden. Sinnvolle und Sinnlose :)
Telegram
Um ein komplett autonomes System zu haben, welches man auch mal ein paar Stundenunbeaufsichtigt laufen lassen kann, bietet sich das Telegram-Plugin an.
Unter: Einstellungen -> PluginManager -> Mehr… Nach dem Plungin Telegram suchen und installieren. Wie man den Telegram-Bot erstellt wird gut auf der GitHub-Seite erklärt: Create Telegram Bot.
Wenn der Bot erstellt ist, meine Empfehlung ist dass man die Group und Privacy Dinger abstellt, kann man nach dem eigenen Bot suchen und per Kommando /start
anfangen mit dem Bot zu sprechen. Jeden benutzer und jede Gruppe in welche man den Bot haben will, muss man dann noch in den OctoPrint Einstellungen freischalten: Unter: Einstellungen -> Plugins -> Telegram
Z-Distance
Dieses Plugin zeigt einem die Z-Distanz in der Sidebar an, an welcher der Printer aktuell ist.
Unter: Einstellungen -> PluginManager -> Mehr… Nach dem Plungin Z-Distance suchen und installieren.
Automatisch starten
SysV basierend
Folgende Scripts können verwendet werden um MJPG-Streamer und OctoPrint automatisch zu starten und beenden:
#!/bin/sh
### BEGIN INIT INFO
# Provides: octoprint
# Required-Start: $network $mjpeg-streamer
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run Octoprint
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/init/vars.sh
. /lib/lsb/init-functions
OCTO_DIR=/opt/OctoPrint
do_start() {
if [ -x $OCTO_DIR/run ]; then
[ "$VERBOSE" != no ] && log_begin_msg "Starting OctoPrint on port 80"
cd $OCTO_DIR && ./run serve --iknowwhatimdoing --port 80 &
[ "$VERBOSE" != no ] && log_end_msg 0
fi
}
do_stop() {
if [ -x $OCTO_DIR/run ]; then
[ "$VERBOSE" != no ] && log_begin_msg "Stopping OctoPrint on port 80"
ps ax | grep "./run serve --iknowwhatimdoing" | awk '{print $1}' | head -1 | xargs kill -s SIGQUIT
[ "$VERBOSE" != no ] && log_end_msg 0
fi
}
case "$1" in
start)
do_start
;;
restart)
do_stop
sleep 5
do_start
;;
status|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
do_stop
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
#!/bin/sh
### BEGIN INIT INFO
# Provides: mjpeg-streamer
# Required-Start: $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: MJPEG-Streamer for streaming
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/init/vars.sh
. /lib/lsb/init-functions
MJPG_DIR=/opt/mjpg-streamer/mjpg-streamer-experimental
do_start() {
if [ -x $MJPG_DIR/mjpg_streamer ]; then
[ "$VERBOSE" != no ] && log_begin_msg "Stopping MJPEG-Streaming Server on port 8080"
$MJPG_DIR/mjpg_streamer -i "$MJPG_DIR/input_raspicam.so -x 1280 -y 720 -fps 5" -o "$MJPG_DIR/output_http.so -p 8080 -w $MJPG_DIR/www" &
[ "$VERBOSE" != no ] && log_end_msg 0
fi
}
do_stop() {
if [ -x $MJPG_DIR/mjpg_streamer ]; then
[ "$VERBOSE" != no ] && log_begin_msg "Stopping MJPEG-Streaming Server on port 8080"
ps ax | grep mjpg_streamer | awk '{print $1}' | head -1 | xargs kill -s SIGINT
[ "$VERBOSE" != no ] && log_end_msg 0
fi
}
case "$1" in
start)
do_start
;;
restart)
do_stop
sleep 5
do_start
;;
status|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
do_stop
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
Einfach nach /etc/init.d/octoprint
resp. /etc/init.d/mjpg-streamer
kopieren und Ausführbar machen: chmod +x /opt/bin/{octoprint,mjpg-streamer}
Anschliessend mit den üblichen verdächtigen die Links ins SysV Verzeichniss machen: update-rc.d octoprint defaults
und update-rc.d mjpg-streamer defaults
SystemD basierend
Dazu müssen im Verzeichniss /etc/systemd/system/
folgende Dateien erstellt werden:
# nano /etc/systemd/system/mjpg-streamer.service
[Unit]
Description=MJPG-Streamer
[Service]
WorkingDirectory=/opt/mjpg-streamer/mjpg-streamer-experimental/
ExecStart=/opt/mjpg-streamer/mjpg-streamer-experimental/mjpg_streamer -i "input_raspicam.so -x 1280 -y 720 -fps 5" -o "output_http.so -p 8080 -w www"
KillMode=process
[Install]
WantedBy=default.target
# nano /etc/systemd/system/octoprint.service
[Unit]
After=networking.service
Description=OctoPrint 3D Printer Software
[Service]
WorkingDirectory=/opt/OctoPrint/
ExecStart=/opt/OctoPrint/run serve --iknowwhatimdoing --port 80
KillMode=process
[Install]
WantedBy=default.target
Diese müssen dann noch registert werden:
# systemctl enable mjpg-streamer.service
# systemctl enable octoprint.service
Und natürlich gestartet: service mjpg-streamer start
sowie service octoprint start
Um zu prüfen ob das ganze geklappt hat: journalctl -u mjpg-streamer.service
resp. journalctl -u octoprint.service
Slic3r Integration
Um den ganzen Prozess zu vereinfachen, kann man bei Slic3r ab Version 1.9.2 (oder schon früher) den OctoPrint-Server als Option eingeben und anschliessend wenn man alles plaziert hat, den gCode direkt auf den Server laden. Anschliessend muss man dann nur noch im WebInterface das File auswählen und drucken.
Dazu wechselt man in Slic3r auf den Tab Printer Settings und gibt dort bei OctoPrint upload den Host und API-Key an. Den API-Key kann man auf dem Webinterface in den Einstellungen einsehen und neu generieren.
Ist das gemacht, einfach wenn man alle Objekte positionliert hat (im Tab Plater) über die Schaltfläche Send to printer den gCode hochladen.