OctoPrint auf einem Raspberry Pi

Vor ein paar Monaten habe ich ja beschrieben, wie ich einen RepetierHost-Server auf dem Raspberry Pi augesetzt hatte.
Es war schon cool, den 3D-Drucker endlich losgelöst vom PC zu haben. Endlich konnte ich Updates machen, Neustarten oder einen Bluescreen haben, ohne dass der ganze Druck den Bach runter ging.

Aber eine Funktion fehlte mir einfach!. Ich begann den 3D-Drucker aus der ferne zu steuern. Beim RepetierHost konnte ich zwar sehen, dass der Druck lief und die Temperaturen überwachen. Aber was da wirklich abging konnte ich nur erraten. Als ich zum dritten Mal nach einem Druck nach Hause kam und wieder einfach nur einen riesigen Fehldruck auf meiner Platte vorfand, war für mich klar, dass ich was daran ändern musste. Ich brauchte eine Server-Software die über eine Webcam-Anbindung verfügte um den Drucker auch optisch zu überwachen. Hier kommt nun OctoPrint ins Spiel.



 

Ich beginne hier wieder ganz vorne mit dem Einrichten des Raspberry Pi. Ich habe hier auch einige kleine aber sehr effektive Änderungen im Setup gemacht.

Vorbereitung / Einkaufsliste

Um auf dem RaspberryPi einen RepetierServer aufzusetzen braucht ihr folgendes:

  • 1x RaspberryPi (am besten den Typ B von der CPU-Leistung her)
  • 1x 4GB SD-Speicherkarte Class 4
  • 1x MicroUSB-Ladegerät (z.B. von einem Handy oder so … mind. 700mA/5V)
  • 1x LAN-Kabel (um den Server ins Netzwerk einzubinden)
  • 1x USB-Hub (Um Maus, Tastatur und Drucker gleichzeitig anzuhängen)
  • 1x Webcam (von der Liste https://github.com/foosel/OctoPrint/wiki/Webcams-known-to-work)
  • 1x USB-Tastatur und –Maus (temporär, am besten habt ihr eine zweite Reserve-Garnitur rumliegen, damit ihr nebenbei trotzdem noch auf dem normalen Rechner surfen könnt)
  • 1x Bildschirm mit HDMI-Kabel oder Adapter (temporär, auch hier habt ihr am besten einen Reserveschirm)
  • 1x SD-Card-Lesegerät (temporär, um das Betriebssystem aufzuspielen)
  • 1x Keine Angst vor Linux (PC-Kenntnisse, insbesondere von Linux sind von grossem Vorteil 😉 )
  • 1x etwas Geduld
  • Ca. 3h Zeit

Wenn ihr das alles habt, dann könnt ihr nun loslegen, den Server aufzusetzen.

Ein Gehäuse Drucken

http://www.thingiverse.com/thing:82435 Nun, da der RaspberryPi nur aus einer Platine besteht und ihr einen 3d-Drucker habt, drucken wir doch erst Mal ein Gehäuse dafür aus und packen den da mal rein.

Auf thingiverse.com findet ihr viele verschiedene Gehäuse dazu. Mir hat das thing:82435 von foosel am besten gefallen. Das sieht cool aus und es funktioniert einwandfrei! Im übrigen ist foosel auch die Programmiererin von OctoPrint!!!

Die SD-Karte vorbereiten (Betriebssystem aufspielen)

Bevor wir den RaspberryPi in Betrieb nehmen können, müssen wir erst einmal ein Betriebssystem auf die SD-Karte aufspielen.

Als erstes solltet ihr nun auf raspberrypi.com ein Image von einem Betriebssystem runterladen, ich habe mich für das Raspbian Wheezy (http://downloads.raspberrypi.org/raspbian/images/) entschieden, da dieses auch als Betriebssystem in der Installationsanleitung vom RepetierServer vorgeschlagen wird.

Während dem Download, ziehen wir das Tool “SD Formatter 4.0” und formatieren damit die SD-Karte.

 

Danach zieht ihr euch das Tool “Win32 Disk Imager”, dieses benötigen wir um das Image auf die SD-Karte zu kopieren. Dabei gehen wir wie folgt vor (Quelle: elinux.org):

  1. Extrahiert die Image-Datei aus dem Zip-File.
  2. Schiebt die SD-Karte in das Lesegerät und findet heraus, welchen Laufwerksbuchstaben sie hat.
  3. Öffnet den “Win32 Disk Imager”, je nachdem benötigt ihr Administratorrechte (Rechtsklick: Als Administrator ausführen)
  4. Win32DiskImagerWählt die Image-Datei im linken Bereich aus.
  5. Selektiert im rechten Bereich den Laufwerksbuchstaben der SD-Karte. Sei vorsichtig, wenn du hier die falsche Auswahl triffst, kannst du die ganzen Daten auf deiner Festplatte zerstören. Ein zweiter Blick lohnt sich auf jeden Fall!
  6. Klicke auf “Write” und warte bis der Prozess beendet ist.
  7. Schliessen den “Win32 Disk Imager” und wirf die SD-Karte aus.
  8. Nun sind wir bereit, den RaspberryPi zu verkabeln und das erste Mal zu starten.

Den RaspberryPi in Betrieb nehmen

Im Quick-Guide auf der RaspberryPi seht ihr, wo ihr all die Kabel an den RaspberryPi hängen müsst.

Sobald das Netzteil angeschlossen wird, startet der RaspberryPi auf.

Die Konfiguration startet in einem halbgrafischen Modus. Ich habe mich dabei an den Blogeintrag von ascii_ch gehalten.

Erst Mal das Filesystem expandieren. Dann die Ländereinstellungen und Tastaturlayout umstellen (wobei ich immer noch irgendwie eine Englische drin hab …) und dann noch das Betriebssystem direkt updaten.

Und nun, eine meiner wichtigsten Änderungen; an dieser Stelle aktivieren wir den SSH Server. Durch diese Option haben wir später die Möglichkeit, über das Netzwerk auf den Raspberry Pi zuzugreifen und brauchen nach dem Einrichten des Netzwerks keinen Bildschirm und keine Eingabegeräte (Maus und Tastatur) mehr am Raspberry Pi.

Zum Schluss die Bootsettings so stellen, dass man direkt auf den Desktop bootet und dann die Konfiguration beenden.

Nun können wir den RaspberryPi mit der Befehlszeile “sudo reboot” neu starten. Nun startet der RaspberryPi das erste Mal direkt auf den Desktop.

 

Dem RaspberryPi eine statische IP zuweisen

Damit wir später von überall im Netzwerk auf den Server zugreifen können, müssen wir dem RaspberryPi nun eine statische IP zuweisen. (Quelle: kevinhooke.com und elinux.org)

Dazu öffnen wir ein Konsolenfenster “LXTerminal” und geben die folgende Befehlszeile ein: “sudo nano /etc/network/interfaces

Nun öffnet sich ein Texteditor in der Konsole, darin suchen wir die Zeile:
iface eth0 inet dhcp

und ändern sie zu:
iface eth0 inet static

Unter dieser Linie geben wir den folgenden Text ein. Ersetze die X mit den entsprechenden Ziffern für deine Netzwerkkonfiguration.

address 192.168.x.x
netmask 255.255.255.0
network 192.168.x.0
broadcast 192.168.x.255
gateway 192.168.x.x




Die Datei sollte nun also so ähnlich wie bei mir aussehen:

auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.1.32
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam/etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Mit CTRL & O speichern wir das ganze im File und mit CTRL & X schliessen wir den Editor.

Nun können wir unten rechts auf den On/Off-Button klicken und den Rechner neu starten. Einmal klicken genügt … der RaspberryPi braucht ein Weilchen, bis das Fenster geöffnet wird 😉

Nach dem Neustart pingen wir den Rechner mal von unserem Hauptrechner aus an. Dazu geben wir im Suchfeld im Windows-Startmenü “cmd” ein und drücken “Enter”, daraufhin öffnet sich ein Konsolenfenster im Windows.

imageIn das geben wir dann “ping 192.168.1.32” ein und warten. Wenn das so aussieht wie in meinem Bild, war es erfolgreich und wir setzen uns wieder an den Raspberry.

Nun öffnen wir den Browser “Midori” und gehen auf google. Wenn das funktioniert hat, ist das Netzwerk funktionsfähig und fertig eingerichtet.


Per Remote auf den Raspberry Pi zugreifen

bitvise
An diesem Punkt entferne ich den Bildschirm, die Maus und die Tastatur vom Raspberry Pi. Von nun an benutze ich (auf Windows) das Programm “bitvise ssh client” um von meinem Hauptrechner aus auf die Konsole des Raspberry Pi zuzugreifen.

Voraussetzung dafür ist natürlich, dass ihr den “SSH Server” auf dem Raspberry Pi aktiviert habt.

Es gibt auch einen Weg um auf den Desktop des Raspberry Pi zuzugreifen, indem man mit der Befehlszeile “sudo apt-get install xrdp” das xrdp-Programmpacket installiert. Anschliessend kann man auch mit dem “bitvise ssh client” auf den optischen Remote-Desktop zugreifen.

bitvise2Das ist aber unnötig. Die komplette OctoPrint-Installation kann über die Kommandozeilen erfolgen und ist so auch schneller.

Wenn ihr den Bitvise SSH Client das erste Mal startet, dann müsst ihr erst die rot eingekreisten Felder mit euren Angaben füllen. Anschliessend auf Login drücken. Dann dauert es ein Weilchen … ca. 10-15 Sekunden und es öffnet sich ein Kommandozeilen-Fenster und ein FTP-Client, mit dem ihr direkten Zugriff auf den Raspberry Pi habt.


Die Notwendigen Programmpakete auf dem Raspberry Pi installieren

Nun beginnen wir mit den notwendigen Programmpaketen, die man noch auf den Raspberry Pi laden muss, damit wir OctoPrint mit der Webcam benutzen können. Wir geben nacheinander die folgenden Zeilen in das Kommandofenster vom Raspberry Pi ein. Die brauchen dann zum Teil etwas länger bis sie beendet sind. Ihr könnt die Befehlszeilen hier kopieren und im Bitvise Client über die rechte Maustaste und den Kontextmenüpunkt “Einfügen” direkt rein kopieren.

sudo apt-get install cmake

sudo apt-get install libboost-all-dev

sudo apt-get install git

Nun haben wir mal die elementaren Grundlagen gelegt. Wir gehen nun zu den Grundsteinen der Webcam über:

sudo apt-get install rpi-update

sudo apt-get install git-core

sudo wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update

sudo rpi-update

sudo reboot

Nach dem Neustart verbinden wir uns wieder mit dem Raspberry Pi. Nun updaten wir den Raspberry Pi mit:

sudo apt-get update

sudo apt-get upgrade

Dann installieren wir den Webcam-Viewer:

sudo apt-get install guvcview

Wir setzen die Rechte und aktivieren den Treiber

sudo usermod -a -G video pi

sudo modprobe uvcvideo

Und starten den Raspberry Pi neu. Um das Webcam-Plugin zu testen verbinden wir uns nun mit dem grafischen Remote-Desktop und geben in die Kommandozeile das folgende in:

guvcview –size=544×288 –format=yuyv

Wenn sich nun ein Fenster mit dem Webcam-Bild öffnet, haben wir auch diesen Teil erfolgreich abgeschlossen.


 

OctoPrint installieren

Nun beginnen wir mit der eigentlichen OctoPrint-Installation. Dazu benötigen wir nochmals ein paar Programmpakete, unter anderem Phyton 2.7.

cd ~

sudo apt-get install python-pip python-dev git

git clone https://github.com/foosel/OctoPrint.git

cd OctoPrint

sudo pip install -r requirements.txt

Nun setzen wir für den User Pi noch neue Rechte, damit wir auf den Seriellen Port firststart
zugreifen können:

sudo usermod -a -G tty pi

sudo usermod -a -G dialout pi

Nun sollten wir den OctoPrint Server starten können mit:

pi@raspberrypi ~/OctoPrint $ ./run
* Running on http://0.0.0.0:5000/


Webcamstream für Octoprint installieren

Jetzt installieren wir das Streamingpaket für die Webcam. Dazu müssen wir den MJPG-Streamer herunterladen und kompilieren:

cd ~

sudo apt-get install subversion libjpeg8-dev imagemagick libav-tools

git clone https://github.com/jacksonliam/mjpg-streamer.git

cd mjpg-streamer/mjpg-streamer-experimental

make

Wenn das sauber durchgelaufen ist, können wir den Streamingserver mit der folgenden Zeile starten:

./mjpg_streamer -i „./input_uvc.so“ -o „./output_http.so“

Das sollte zu folgendem Output führen:

MJPG Streamer Version: svn rev:
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 640 x 480
i: Frames Per Second.: 5
i: Format…………: MJPEG
[…]
o: www-folder-path…: disabled
o: HTTP TCP port…..: 8080
o: username:password.: disabled
o: commands……….: enabled

Wenn wir nun im Browser http://<your Raspi’s IP>:8080/?action=stream, eingeben, sollten wir ein bewegtes Bild mit 5fps sehen.

Öffne ~/.octoprint/config.yaml (wenn es nicht vorhanden ist, erstellen wir es einfach) und fügen der Datei folgende Zeilen hinzu:

webcam:
stream: http://<your Raspi’s IP>:8080/?action=stream
snapshot: http://127.0.0.1:8080/?action=snapshot
ffmpeg: /usr/bin/avconv

webcamNun starten wir den OctoPrint Server oder den ganzen Raspberry Pi neu. Nun solltest du den Webcam-Stream im “Control”-Tab sehen und ein “Timelapse”-Tab mit Optionen erhalten haben.


Automatischer start VON OCTOPRINT

Damit Octoprint automatisch gestartet wird, müssen wir die Datei /home/pi/bin/octoprint erstellen und mit dem folgenden Inhalt füllen …

Um das Skript zu erstellen, gib die folgenden Zeilen in das Terminal ein:

cd ~

mkdir bin

cd bin

touch octoprint

sudo nano octoprint

Füge diesen Text in die Datei:

#!/bin/sh
OCTOPRINT_HOME=/home/pi/OctoPrint
MJPEG_STREAMER_HOME=/home/pi/mjpg-streamer/mjpg-streamer-experimental

# start mjpeg streamer
$MJPEG_STREAMER_HOME/mjpg_streamer -i „$MJPEG_STREAMER_HOME/input_uvc.so -r SXGA -f 15“ -o „$MJPEG_STREAMER_HOME/output_http.so“ &

# start the webui
$OCTOPRINT_HOME/run –daemon start

Mit der Zeile (sudo chmod +x /home/pi/bin/octoprint) machen wir die Datei ausführbar.

Nun öffnen wir die Datei /etc/rc.local
sudo nano /etc/rc.local

Und fügen die folgende Zeile an beliebiger Stelle ein:
sudo -u pi /home/pi/bin/octoprint

Dann speichern wir die Datei mit CTRL+O und schliessen sie mit CTRL+X

 

Den Raspberry Pi über OctoPrint steuern

Nun habt ihr OctoPrint eigentlich fertig installiert. Aber um den Raspberry Pi neustarten zu können, müsst ihr entweder den Stecker ziehen oder mit der Konsole verbinden.
Das geht aber auch über die Oberfläche von OctoPrint. Dazu müssen wir die Datei “~/.octoprint/config.yaml “ ergänzen.

Zuerst öffnen wir die Datei mit

sudo nano ~/.octoprint/config.yaml

Wir fügen die die folgenden Zeilen nach dem Eintrag:
Server:
firstRun: false

ein.

actions:
– name: Reboot
action: reboot
command: sudo reboot
confirm: You are about to rebootthe system.
– name: Shutdown
action: shutdown
command: sudo shutdown -h now
confirm: You are about to shutdown the system.

dropdown
Dann speichern wir die Datei mit CTRL+O und schliessen sie mit CTRL+X.

 

Nach einem Neustart des Servers erhaltet ihr oben im Menüband ein Dropdown-Menü, über das ihr nun sogar den Raspberry Pi, Neustarten und Herunterfahren könnt.


Aus der Ferne auf OctoPrint zugreifen

Nun wollt ihr sicher auch auf Octoprint zugreifen, wenn ihr unterwegs seid.

Als allererstes solltet ihr nun einen Benutzer mit einem Passwort einrichten, damit niemand auf euer Drucker zugreifen kann!

webcam-settings
Das ist etwas knifflig und setzt voraus, dass ihr euren Router kennt. Ihr müsst nun den Router so konfigurieren, dass er den Port 5000 , auf dem OctoPrint läuft direkt zum Raspberry Pi weiterleitet.

Wenn ihr auch das Webcam-Bild auch ausserhalb sehen wollt, müsst ihr die IP von der Webcam auf die IP stellen, die euer Router gegen aussen hat. Das geht aber ganz einfach in der OctoPrint Oberfläche unter “Settings/Webcam”.

Jetzt müsst ihr noch herausfinden, ob euer Router gegen aussen eine statische oder eine dynamische IP hat. Die meisten haben eine dynamische IP. Nun müssen wir uns an einem Dienst anmelden, der dynamische DNS unterstützt (einfach googeln) und dann auf dem Raspberry Pi noch ein Programmpaket installieren, das diesen Dienst dann selbstständig updatet.

Ich beschreibe das nun hier nicht mehr im Detail, sondern poste hier einfach mal meine Quellen, die ich dazu benutzt habe.

http://www.ronnutter.com/raspberry-pi-ddns-client/

http://sourceforge.net/p/ddclient/wiki/Home/

 

Abschliessende Informationen

Nun solltet ihr einen OctoPrint-Server haben, der voll funktionsfähig ist und mit dem ihr den Drucker auch fernsteuern könnt, wenn ihr unterwegs oder im Büro seid.

OctoPrint auf dem Handy

Vom Handy aus ist es zwar etwas ein Gefummel, aber es geht. Wichtig ist, dass ihr den Browser-Tab sofort schliesst, nachdem ihr den Status gecheckt habt. Die Daten der Webcam werden auch übertragen, wenn ihr den Tab nicht offen habt. Und so ist schnell euer mobiles Guthaben aufgebraucht (Ich spreche aus Erfahrung 🙁 )

Firmware

Als ich auf meinem Mendelmax die Firmware Sprinter installiert hatte. Kam es regelmässig vor, dass die Drucke mitten drin einfach abbrachen. Seit ich die Marlin-Firmware installiert habe ist das kein Thema mehr!

USB-Hubs

Ich habe auch irgendwo gelesen, dass USB-Hubs ein Problem sein können. Aber wenn ihr per SSH auf den Raspberry Pi zugreift, benötigt ihr sowieso keinen mehr.

Viel Erfolg und Spass beim drucken ohne PC und aus der Ferne!

Das meiste, dass ich hier beschrieben habe, sind Übersetzungen und Schnipsel aus verschiedenen anderen Blogs. Weitere Informationen zu OctoPrint findet ihr im FAQ und Forum von Octoprint unter: https://github.com/foosel/OctoPrint

PS: Vielen Dank Gina Häussge für dieses hammermässige Tool!

 

 

13 Gedanken zu „OctoPrint auf einem Raspberry Pi

  1. Johannes Antworten

    Vielen, vielen Dank für diese super Anleitung. Vorallem der Teil mit dem Fernzugriff hat mich sehr interresiert. Für die Installation von OctoPrint und dem Webcamstreamer gibt es eine bessere Lösung: http://goo.gl/N0FSuS
    Schau dir das mal an.

    • b_key Autor des BeitragsAntworten

      Hättest du das nur früher gesagt … 😉

      Jetzt habe ich halt mein eigenes Image. Das kann man sich übrigens auch erstellen, indem man dasselbe Tool nimmt wie um das Image auf die SD-Karte zu schreiben. Damit kann man die SD-Karte mit seinen eigenen Settings wieder auslesen und ein eigenes Image damit erstellen.

  2. Bernhard Antworten

    Hallo ich habe das ihr nun versucht das ich die Erweiterungen bekomme zum runterfahren und so aber wen ich das eintrage kommt der server nicht mehr hoch muss man dar noch was einstellen oder woran kann das den liegen

    danke schon mal

    • b_key Autor des BeitragsAntworten

      Hallo Bernhard

      Wenn du den RaspberryPi mit dem Befehl runterfahren runter fährst, dann musst du den über das Netzteil (aus-/einstecken) wieder neustarten. Wenn du alles wie im Beitrag beschrieben gemacht hast, müsste alles funktionieren. Anscheinend tut das der Befehl runterfahren ja auch.

      LG Ben

  3. Bernhard Antworten

    Hallo danke für dein schreiben nur leider habe ich mich dar etwas blöd ausgedrückt anscheinend
    Meine eigentlich das wenn ich den Befehl sudo nano ~/.octoprint/config.yaml
    mache und das was fehlt dort einfühge dann habe ich immer den Fehler
    503 Service Unavailable

    No server is available to handle this request.

    hoffe du kannst mir da weiter helfen danke schon mal

  4. Juri Stöckli Antworten

    Raspberry pi A und B haben den selben CPU. Nur Ram ist anders und usb.

    Kein usb hub: jeder raspberry mit mehr als einem usb port hat einen internen hub. Das Nic ist auch über usb angeschlosse.

  5. UM2 Extended Antworten

    Hallo, hat mir sehr geholfen und es läuft auch lokal. Allerdings stimmt was mit den ip Einstellungen nicht, wenn ich diese wie oben berschrieben anpasse.

    LAN Verbindung
    IP DHCP .34
    IP static .91

    Erreichbar ist er jetzt über beide IP’s und die FritzBox erkennt ihn mal mit der einen, mal mit der anderen ip. Da zwei Router im Netzwerk sind muss er zwingend über den manuell zugewiesenen Router laufen, sonst wird das mit der Portweiterleitung nicht’s.

    Wo liegt der Fehler?

    • admin Antworten

      Da scheinst du beide Adapter noch aktiviert zu haben, du müsstest aber eigentlich
      iface eth0 inet dhcp

      und ändern zu:
      iface eth0 inet static

  6. Brandl Tobias Antworten

    Hallo,
    Ich habe OctoPi wie in dieser Beschreibung installiert und alles hat funktioniert wie es sollte. Als ich allerdings meinen Printrbot Simple Metal über USB an meinen Raspberry Pi 2 angeschlossen habe und versucht habe ihn mit OctoPi zu verbinden, wird mir bei „Druckerstatus“ angezeigt: „Error: Failed to autodetect serial port, please set it manually.“.
    An was könnte das liegen?

    Danke schonmal im Voraus
    Tobi

  7. Berti Antworten

    Gibt es ein fertiges Image für das aktuelle Raspbian Jessy ? Nach deiner Anleitung habe ich nach dem Reboot nur noch einen schwarzen Bildschirm mit einem blinkendem Corsur oben links. Hochfahren tut der RPi aber nicht mehr.
    Falls mir also jemand weiter helfen könnte Octoprint unter dem aktuellen Raspbian Jessy zu installieren wäre ich sehr dankbar. Der Grund ist, dass es Jessy in deutsch gibt und die WLan Einstellungen 100%ig sind.

    • admin Antworten

      Leider habe ich es mit Jessi noch nicht ausprobiert und weiss nicht, was das Problem ist.

      Aber du kannst doch ganz einfach das ganze mit Wheezy probieren.

  8. Luigi Antworten

    Hallo,

    Habe es nach dieser Anleitung geschafft. leider funktioniert unter einem Windows Phone lumiav640 der webstream nicht hat einer eine lösung fur mich?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Captcha loading...