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
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):
- Extrahiert die Image-Datei aus dem Zip-File.
- Schiebt die SD-Karte in das Lesegerät und findet heraus, welchen Laufwerksbuchstaben sie hat.
- Öffnet den “Win32 Disk Imager”, je nachdem benötigt ihr Administratorrechte (Rechtsklick: Als Administrator ausführen)
- Wählt die Image-Datei im linken Bereich aus.
- 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!
- Klicke auf “Write” und warte bis der Prozess beendet ist.
- Schliessen den “Win32 Disk Imager” und wirf die SD-Karte aus.
- 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.
In 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
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.
Das 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
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
Nun 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.
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!
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!
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.
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.
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
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
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
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.
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?
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
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
Könnte an falscher Baudrate liegen.
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.
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.
Hallo,
Habe es nach dieser Anleitung geschafft. leider funktioniert unter einem Windows Phone lumiav640 der webstream nicht hat einer eine lösung fur mich?