{"id":55,"date":"2021-04-02T10:47:38","date_gmt":"2021-04-02T10:47:38","guid":{"rendered":"https:\/\/blog.jantle.de\/?p=55"},"modified":"2021-04-15T09:50:48","modified_gmt":"2021-04-15T09:50:48","slug":"55","status":"publish","type":"post","link":"https:\/\/blog.jantle.de\/?p=55","title":{"rendered":"OctoPrint auf Orange Pi Zero"},"content":{"rendered":"\n<p>Bisher habe ich meinen 3D-Drucker mit einem alten Notebook angesteuert auf dem neben Prusaslicer noch RepetierHost installiert war. Die 3D-Modelle habe ich via Dateifreigabe oder USB-Stick auf den Laptop gebracht, dort gesliced und dann mit RepetierHost an den Drucker gestreamt.<\/p>\n\n\n\n<p>Seit einiger Zeit (ich glaube seit Version 2.3) unterst\u00fctzt der Prusaslicer das direkte hochladen der generierten G-Codes auf den Drucker bzw den vorgeschalteten G-Code-Streamer (Repetier Server, Octoprint, Astroprint, &#8230;)<\/p>\n\n\n\n<p>Seitdem l\u00e4uft auf dem Notebook eigentlich nur noch der Repetier Server \u00fcber den ich vom Schreibtisch aus den Drucker bedienen kann..<br>Da ist der alte Laptop nat\u00fcrlich overkill und Platzverschwendung, -Monitor und Tastatur brauchts beim 3D-Drucker jetzt nicht mehr.<\/p>\n\n\n\n<p>Ich habe hier noch einen Orange Pi Zero rumliegen, der soll ab jetzt den alten Laptop ersetzten und direkt in den 3D-Drucker eingebaut werden. Bisher habe ich den Repetier Server genutzt, da ich jetzt aber eh alles neu installieren muss, probiere ich mal OctoPrint aus. <\/p>\n\n\n\n<p>Nachdem der Orange Pi Zero mit einem frischen Armbian Image gestartet wurde, kann&#8217;s mit der Installation losgehen.<\/p>\n\n\n\n<p>Zuerst einmal das System auf den neuesten Stand bringen und die ben\u00f6tigten Pakete installieren:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt update\nsudo apt upgrade -y\nsudo apt install python3-pip python3-dev python3-setuptools python3-venv git libyaml-dev build-essential<\/pre>\n\n\n\n<p>Verbunden wird der Orange Pi Zero mit dem Drucker nicht \u00fcber die USB-Schnittstelle, sondern direkt \u00fcber die internen seriellen Schnittstellen. Dadurch entf\u00e4llt ein potentieller St\u00f6rfaktor und Flaschenhals in der Verbindung. Auch wenn die seriellen Schnittstellen unter <code>\/dev<\/code> schon auftauchen, m\u00fcssen die gpio-pins noch korrekt konfiguriert werden. Dies geschieht \u00fcber <code>sudo armbian-config<\/code>  .<br>Dort k\u00f6nnen unter  <code>System -> Hardware<\/code> die ben\u00f6tigten Ports aktiviert werden. Nach einem Neustart l\u00e4sst sich nun die ben\u00f6tigte Schnittstelle auch unter <code>\/dev\/ttySx<\/code> korrekt nutzen.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Entgegen der &#8222;offiziellen&#8220; Anleitung werden ich f\u00fcr OctoPrint einen neuen Nutzer mit eigenem home-Verzeichnis anlegen, damit s\u00e4mtliche Daten sauber getrennt bleiben.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo useradd -rm octoprint<\/pre>\n\n\n\n<p>Die OctoPrint-Installation erfolgt dann im Verzeichnis <code>\/srv\/octoprint\/<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/srv\nsudo mkdir octoprint\nsudo chown octoprint:octoprint octoprint<\/pre>\n\n\n\n<p>Nun noch zum Nutzer &#8222;octoprint&#8220; wechseln, die virtuelle Python-Umgebung erstellen und darin die Installation abschliessen.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u octoprint -H -s\ncd \/srv\/octoprint\npython3 -m venv .\nsource bin\/activate\npip install pip --upgrade\npip install octoprint<\/pre>\n\n\n\n<p>Damit OctoPrint auf die seriellen Schnittstellen zugreifen kann noch schnell den Nutzer zu den ben\u00f6tigten Gruppen hinzuf\u00fcgen.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo usermod -a -G tty,dialout octoprint<\/pre>\n\n\n\n<p>Fertig! <\/p>\n\n\n\n<p>OctoPrint kann jetzt direkt (als user &#8222;octoprint&#8220;!) gestartet werden mit <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo -u octoprint -H -s\n\/srv\/octoprint\/bin\/octoprint serve<\/pre>\n\n\n\n<p>Damit OctoPrint auch bei jedem Systemstart geladen wird, muss noch das Startscript <code>\/etc\/systemd\/system\/octoprint.service<\/code> mit folgendem Inhalt erstellt werden.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[Unit]\nDescription=OctoPrint\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nEnvironment=\"LC_ALL=C.UTF-8\"\nEnvironment=\"LANG=C.UTF-8\"\nType=simple\nUser=octoprint\nExecStart=\/srv\/octoprint\/bin\/octoprint\n\n[Install]\nWantedBy=multi-user.target<\/pre>\n\n\n\n<p>Dieses script wird nun noch aktiviert und direkt gestartet:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo systemctl --system daemon-reload\nsudo systemctl enable octoprint\nsudo systemctl start octoprint<\/pre>\n\n\n\n<p>OctoPrint ist jetzt aktiv und kann auf port 5000 erreicht werden.<br>http:\/\/mei.ne.ip:5000\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bisher habe ich meinen 3D-Drucker mit einem alten Notebook angesteuert auf dem neben Prusaslicer noch RepetierHost installiert war. Die 3D-Modelle habe ich via Dateifreigabe oder USB-Stick auf den Laptop gebracht, dort gesliced und dann mit RepetierHost an den Drucker gestreamt. Seit einiger Zeit (ich glaube seit Version 2.3) unterst\u00fctzt der Prusaslicer das direkte hochladen der [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8,7],"class_list":["post-55","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-3d-druck","tag-octoprint"],"_links":{"self":[{"href":"https:\/\/blog.jantle.de\/index.php?rest_route=\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jantle.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jantle.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jantle.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jantle.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55"}],"version-history":[{"count":9,"href":"https:\/\/blog.jantle.de\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions"}],"predecessor-version":[{"id":68,"href":"https:\/\/blog.jantle.de\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions\/68"}],"wp:attachment":[{"href":"https:\/\/blog.jantle.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jantle.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jantle.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}