trueten.de

"Das "Vaterland" ist der Alpdruck der Heimat." Kurt Tucholsky

Raspberry PI mit SSD und S.M.A.R.T.

Für verschiedene Zwecke haben wir diverse Raspberry PIs im Einsatz. Zum Beispiel als 3D Druckserver mit OctoPrint. Normalerweise wird ein Raspberry mit microSDHC Speicherkarten betrieben. Diese kommen jedoch früher oder später meist an Grenzen, die einem nicht so in die Lebensplanung passen. Höchste Zeit also, auf eine SSD zu setzen, entweder gleich von Anfang an, oder eben wenn es klemmt:

Seit einiger Zeit kann der Raspberry ja auch direkt von der SSD booten, so daß die microSDHC Karten eigentlich nur dafür benötigt werden, das dafür notwendige Bit mittels program_usb_boot_mode=1 in der /boot/config.txt zu setzten.

Danach kann man gleich die z.B. durch etcher mit dem Betriebssystem der Wahl geflashten SSD anschließen und den Rechenzwerg starten. Oder man migriert sein existierendes System via dd von der microSDHC Karte auf die neue SSD. Ich habe beim ersten Versuch mit einer Kombination aus beidem gearbeitet, d.h. zuerst die SSD geflasht, dann die einzelnen dadurch entstandenen Partitionen mittels sudo dd if/dev/sdX of=/dev/sdX status=progress von der SDHC auf die SSD kopiert. Bei der Gelegenheit habe ich, um jeglichen Kalamitäten beim Bootvorgang aus dem Weg zu gehen, die /etc/fstab auf die Verwendung von UUIDs umgestellt, was nicht nur eine einfache Übung sondern wegen der Änderung der Laufwerksbezeichnungen durch den Austausch in jedem Fall notwendig ist.

Gute Erfahrungen habe ich mit den SSDs von SanDisk gemacht, die mit günstigen SATA2USB Adaptern an den Raspberry angeschlossen werden können. Sicherlich gibt es auch schnellere SSDs, das Geld ist jedoch angesichts diverser Beschränkungen des Raspberrys besser anderswo angelegt. Wichtig ist für mich hier vor allem, daß die Platte ohne aktiven USB Hub, d.h. nur mit der vom Raspberry zur Verfügung gestellten maximalen Spannung von 1,2A läuft.

Der SATA2USB Adapter meldet sich nach der Eingabe von sudo smartctl /dev/sdX mit der Id "Unknown USB bridge [0x152d:0x0578 (0x3202)]" und ist dementsprechend ein JMicron JMS567, der auf alle weiteren Aufrufe mittels sudo smartctl -a -d sat /dev/sdX korrekt angesprochen werden kann.

smartctl 6.6 2016-05-31 r4324 [armv7l-linux-4.19.60-v7+] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Device Model:     SanDisk SSD PLUS 240GB
Serial Number:    19172C804389
LU WWN Device Id: 5 001b44 8b814e836
Firmware Version: UF5000RL
User Capacity:    240.065.183.744 bytes [240 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   ACS-2 T13/2015-D revision 3
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Mon Jul 29 11:26:28 2019 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Status not supported: Incomplete response, ATA output registers missing
SMART overall-health self-assessment test result: PASSED
Warning: This result is based on an Attribute check.

General SMART Values:
Offline data collection status:  (0x00)    Offline data collection activity
                    was never started.
                    Auto Offline Data Collection: Disabled.
Self-test execution status:      (  32)    The self-test routine was interrupted
                    by the host with a hard or soft reset.
Total time to complete Offline 
data collection:         (  120) seconds.
Offline data collection
capabilities:              (0x15) SMART execute Offline immediate.
                    No Auto Offline data collection support.
                    Abort Offline collection upon new
                    command.
                    No Offline surface scan supported.
                    Self-test supported.
                    No Conveyance Self-test supported.
                    No Selective Self-test supported.
SMART capabilities:            (0x0003)    Saves SMART data before entering
                    power-saving mode.
                    Supports SMART auto save timer.
Error logging capability:        (0x01)    Error logging supported.
                    General Purpose Logging supported.
Short self-test routine 
recommended polling time:      (   2) minutes.
Extended self-test routine
recommended polling time:      (  42) minutes.

SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0032   100   100   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       47
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       52
165 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       107
166 Unknown_Attribute       0x0032   100   100   ---    Old_age   Always       -       2
167 Unknown_Attribute       0x0032   100   100   ---    Old_age   Always       -       0
168 Unknown_Attribute       0x0032   100   100   ---    Old_age   Always       -       4
169 Unknown_Attribute       0x0032   100   100   ---    Old_age   Always       -       296
170 Unknown_Attribute       0x0032   100   100   ---    Old_age   Always       -       0
171 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
172 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       0
173 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       2
174 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       47
184 End-to-End_Error        0x0032   100   100   ---    Old_age   Always       -       0
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
188 Command_Timeout         0x0032   100   100   ---    Old_age   Always       -       0
194 Temperature_Celsius     0x0022   057   047   000    Old_age   Always       -       43 (Min/Max 18/47)
199 UDMA_CRC_Error_Count    0x0032   100   100   ---    Old_age   Always       -       0
230 Unknown_SSD_Attribute   0x0032   100   100   000    Old_age   Always       -       128851640350
232 Available_Reservd_Space 0x0033   100   100   005    Pre-fail  Always       -       100
233 Media_Wearout_Indicator 0x0032   100   100   ---    Old_age   Always       -       391
234 Unknown_Attribute       0x0032   100   100   000    Old_age   Always       -       817
241 Total_LBAs_Written      0x0030   100   100   000    Old_age   Offline      -       383
242 Total_LBAs_Read         0x0030   100   100   000    Old_age   Offline      -       418
244 Unknown_Attribute       0x0032   000   100   ---    Old_age   Always       -       0

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

Selective Self-tests/Logging not supported
Auch wenn nicht alle S.M.A.R.T. Tests durchgeführt werden können, ist es doch möglich, die wichtigsten Test durchzuführen, die einem Auskunft über ein eventuell baldiges Ableben des Datenträgers geben können, hier mal ein 2 minütiger Kurztest mittels sudo smartctl -t short -d sat /dev/sdX nach 47 Stunden Laufzeit der Platte, den man sich mittels sudo smartctl -a -d sat /dev/sdX ansehen kann:
(...)
SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%        47         -

Selective Self-tests/Logging not supported
Weitere Tests werden dann entsprechend in der Ausgabe ergänzt, die aktuellen Ergebnisse stehen dann immer an erster Stelle der Ausgabe.

HINWEIS:
Alle gemachten Angaben sind ohne Gewähr auf Funktion und Richtigkeit. Für eventuell entstehende Schäden übernehmen wir keinerlei Haftung. Sämtliche Veränderungen geschehen auf Eure Verantwortung und Gefahr.

Irgendwie muss ich das alles finanzieren, daher sind die allermeisten Links Affiliate. D.h.: Solltet Ihr über diese Links zu einem Onlinehändler geraten und dort etwas bestellen, bekomme ich eine kleine Provision, für Euch ändert das am Preis natürlich nichts.

NotepadQQ unter Raspbian / Debian Stretch kompilieren

Ab und an ist ein grafischer Texteditor einfach praktischer als vi, emacs oder nano. Die Wahl fällt heute oft auf NotepadQQ, ein Linux Clon des Windows Editors Notepad++. Leider ist NotepadQQ nicht in den aktuellen Paketquellen für Stretch enthalten, eine Snap Installation wie von den NotepadQQ EntwicklerInnen empfohlen, kommt nicht in Frage. Also: Selbst ist der User und mit einiger Frickelei läuft der Editor auch via

ssh -x username@rechnername notepadqq

auf einem headless RaspberryPI B R2. Zumindest in der Version 1.48 und nach einem ordentlichen Weilchen...

sudo apt install -y qt5-qmake libqt5webkit5 libqt5svg5 coreutils libqt5webkit5-dev libqt5svg5-dev qttools5-dev-tools qt5-default qttools5-dev-tools qtwebengine5-dev libqt5websockets5-dev libqt5svg5 libqt5svg5-dev libuchardet-dev libqt5webengine-data qt5-default qttools5-dev-tools qtwebengine5-dev libqt5websockets5-dev libqt5svg5 libqt5svg5-dev libuchardet-dev libqt5webkit5-dev libqt5svg5-dev qttools5-dev-tools

git clone https://github.com/notepadqq/notepadqq.git

cd notepadqq

git checkout -f v1.4.8

./configure --prefix /usr --qmake /usr/lib/arm-linux-gnueabihf/qt5/bin/qmake

make

sudo make install

Mikro-Howto: OctoPrint mit RaspberryPI und TouchUI über Elcrow 5" Display steuern

Dies ist nur ein Howto für mich selbst und wen es sonst noch interessiert. Die Anleitung funktioniert mit meinem System, bei anderen Menschen kann das wieder ganz anders sein. Daher: Nachmachen auf eigene Gefahr!

Ausgangslage: Ich möchte meinen 3D Drucker, den ich über den OctoPrint Server, der unter OctoPI auf einem Raspberry PI 3B+ läuft, und somit über jeden vom Server zugelassenen Rechner aus zu steuern ist, notfalls auch mal vor Ort in der Druckerei steuern können, ohne mir dort gleich einen Computer hinstellen zu müssen, der dann die meiste Zeit doch nur als Terminal vor sich hin verstaubt. Was liegt also näher, als die Himbeere mit einem halbwegs bedien- und erkennbaren berührungsempfindlichen Display auszustatten und damit die TouchUI zu bedienen?

Nach diversen Versuchen und Überlegungen bei der Suche nach einer angemessenen Unterbringung für den Rapsberry habe ich mich dann für Thing:2837163 entschieden, für das ein halbwegs finanzierbares Display über Alieexpress zu bekommen ist. Einige Wochen später klingelte denn auch der Bote aus dem fernen Osten und überreichte mir ein gut verpacktes Behältnis mit dem Display, welches bei genauerer Betrachtung einem Waveshare recht ähnlich sieht, jedoch - Chinas kapitalistischer Enklave Shenzen sei Dank - nur einen Teil dessen kostet, was für das nebenan gefertigte Waveshare fällig gewesen wäre und das bei Aliexpress auch deutlich günstiger als beim großen Fluß zu bekommen ist. Allerdings mit 3 Wochen Lieferzeit. Das Boardlayout ebenso wie der Chipsatz sieht dem hochpreisigerem Pendant jedenfalls zum Verwechseln ähnlich.

Was folgte, waren jedoch ein gutes Dutzend Versuche, das Display so zum Laufen zu bekommen, wie ich bzw. das von mir auserkorene Gehäuse das gerne hätte: Nämlich um 180° gedreht, damit der HDMI Connector in der dafür im Gehäusedesign eigens vorgesehenen Aussparung verschwinden kann. Die Anzeige des Displays ist dabei weniger das Problem, diese findet via HDMI statt, vielmehr ist ja Bildausgabe und Toucheingaben zweierlei. Das Display kann leicht um 180° gedreht werden, indem man sich per ssh auf dem Raspberry anmeldet:
ssh pi@octopi.lan

gefolgt von
sudo nano /boot/config.txt

und dann diesen Text am Ende um die Zeile
display_rotate=0

ergänzt. Klappt ganz gut, wenn man dann mit ctrl+x die so manipulierte Datei speichert und mit
sudo reboot -n

einen Neustart einleitet.

Treib(er)jagd
Die oben erwähnten erfolglosen Versuche, auf dem so gedrehten Display nun auch die Touch Eingabe einrichten zu können, hatten mich dann dazu veranlasst, doch mal nebenan, bei Waveshare zu schauen, wie das dort gelöst wurde. Denn die Elcrow KollegInnen wußten zwar von einer veralteten Treiber CD zu berichten und wie man das Display ihrer Ansicht nach zum Kooperieren bewegt, in der Praxis hatte dann trotzdem der Mauszeiger (heißt das auch so, wenn man den Finger dazu benutzt, um Eingaben zu tätigen??) das Gegenteil von den Bewegungen veranstaltet: Nach unten wischen - Zeiger  wandert nach oben, nach Rechts wischen - Zeiger begibt sich schnurstracks nach links. Wenn das nur im richtigen Leben auch so wäre...

Wie auch immer: Bei Elcrow ist die Zeit offenbar vor dem Update des Eingabetreibers für den X-Server stehen geblieben, weshalb der entscheidende Hinweis auf die Verwendung des entsprechenden Treibers dort fehlt. Wenn wir schon mal auf der ssh Konsole sind, installieren wir diesen mit
sudo apt install xserver-xorg-input-evdev

Anschließend kopieren wir die Konfigurationsdatei dergestalt, daß sie eine höhere vorangestellte Zahl im Dateinamen hat wie die anderen im Zielverzeichnis. Dies, um zu verhindern, daß ein möglicher anderer Eingabetreiber die Bemühungen, das Touchdisplay einzurichten, verhindert:
sudo cp -rf /usr/share/X11/xorg.conf.d/10-evdev.conf /usr/share/X11/xorg.conf.d/45-evdev.conf
sudo reboot

Neuausrichtung
Nun lässt sich auch die Feinabstimmung mittels Eingabekalibration vornehmen. Dazu installieren wir das entsprechende Tool, wir nehmen dabei das der aktuellen Raspbian Version, somit gibt das bei späteren Updates auch weniger Treiberfolklore...:
sudo dpkg -i -B xinput-calibrator

Wir starten jetzt das System dazu nochmals neu, damit die Kalibrierung gestützt auf diese Treiber stattfindet. Nach dem erfolgreichen Login gehen wir dazu in der grafischen Benutzeroberfläche mit der Maus / Touchpen / Zeige- oder sonst einem Finger auf die Himbeere oben links und rufen unter "Einstellungen" das Kalibriertool auf. Mit dem entsprechenden Zeigegerät tippen wir auf die darin gezeigten 4 Punkte und Kopieren den anschließend ausgegebenen Text in die Datei
/ect/X11/xorg.conf.d/99-calibration.conf

Bei mir steht folgendes darin (Die diversen Optionen für die Einträge gibt es z.B. hier zur Auswahl. Auch ein Hersteller von 5" Displays ;-):
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "ADS7846 Touchscreen"
        Option  "Calibration"   "3905 208 3910 288"
        Option  "SwapAxes"      "0"
EndSection

Abspeichern wie gehabt, neu booten. Nun sollte das System zügig starten und auf Benutzereingaben entsprechend reagieren.

Das erfreut uns, weshalb wir derartig motiviert sogleich zur Installation der Touch Oberfläche von OctoPrint schreiten. Hier hat der User jdufresne1 alles wichtige in seinem Beitrag ausgeführt, weshalb ich nur noch kurz darauf eingehe. Wieder per ssh auf dem Druckserver einloggen. Dann mit:
sudo apt install chromium-browser -y

den Browser für die Touch Oberfläche installieren. In dessen Fenster läuft zukünftig dann alles rund um die Bedienung des Druckservers ab. Anschließend daran laden wir die Autostart Prozedur von TouchUI herunter und machen in einem Abwasch die lokale Installation auf dem Raspberry startklar:
git clone https://github.com/BillyBlaze/OctoPrint-TouchUI-autostart.git ~/TouchUI-autostart/

Noch kurz diverse Einstellungen und Hilfstools installieren:
sudo ~/TouchUI-autostart/helpers/install

Nach einem Neustart sollte nun die TouchUI Oberfläche den 5" Bildschirm des Raspberry verzieren. Wer möchte, kann den Raspberry auch so einrichten, daß er ohne Benutzername und Passwort durchstartet. Mehr dazu im Wiki von TouchUI.

Der Vorteil des eingangs erwähnten Gehäuses ist, daß es genügend Platz bietet, zum Beispiel für ein Stepdown Modul, um die Energieversorgung des Rechners zukünftig vom nicht ausgelasteten Netzteil des Druckers sicherzustellen sowie für einen entsprechenden Lüfter. Falls es doch mal heißer her geht.

Irgendwie muss ich das alles finanzieren, daher sind die allermeisten Links Affiliate. D.h.:Solltet Ihr über diese Links zu einem Onlinehändler geraten und dort etwas bestellen, bekomme ich eine kleine Provision, für Euch ändert das am Preis natürlich nichts. Für die Inspirationen geht ein herzliches Dankeschön an die genannten Personen, insbesondere an die OctoPrint Community!

Keep on Coding Printing!

Einen Blick auf Klipper riskieren

Screenshot
Ich habe das schlechte Wetter heute genutzt, um ein wenig mit der Firmware des AnyCubic i3 MEGA herum zu spielen. Normalerweise läuft hier Marlin, mich hatte aber interessiert, was hinter dem OctoPrint Plugin OctoKlipper steckt. Man muss ja elastisch bleiben. Dabei kam heraus, daß mit Klipper eine weitere Möglichkeit zur Steuerung der Druckerei besteht.  Mindestens genau so frickelig wie Marlin, das Display des Druckers wird (leider) gar nicht unterstützt, auch sonst muss man sich halbwegs ordentlich einlesen, um den Drucker überhaupt in Betrieb nehmen zu können. Das ist auch gut so, denn nur so lassen sich Schäden am Drucker oder Druckgut oder schlimmer: an Leib und Leben verhindern.

Grob gesagt unterscheidet Klipper sich von Marlin darin, daß nur ein kleiner Bootloader auf dem Drucker selber verbleibt, der dann mit dem Hostrechner - zum Beispiel einem RaspBerry PI kommuniziert und diesem die ganze Rechenarbeit überlässt. Diese Arbeit stellt die Himbeere vor keine besonders großen Herausforderungen, trotzdem sollte man möglichst zum RaspBerry Pi 3B+ greifen. Zur Installation verweise ich mal auf das Tutorial bei selbstgedruckt.de, die Menschen dort beteiligen sich auch rege in einem deutschsprachigen Fratzenbuch Forum.

Für den AnyCubic i3 Mega habe ich als Einstieg zwar die entsprechende Beispielkonfigurationsdatei auf github verwendet, da unser Drucker jedoch wegen ungebührlichen Lärmens zu einem Austausch der Lüfter (Noctua NF-A4x10 FLX 40mm zur Kühlung von Hotend und der Treiber über den Lüftungskanal hier auf thingiverse und Noctua NF-A9x14 Lüfter für das Netzteil sowie Sunon  MF50151VX-A99 Radiallüfter zur Bauteilkühlung) und der Steppertreiber auf TMC2208 V1.2 verdonnert wurde, mussten die Achsen der Steppermotoren invertiert werden. Es gibt u.a. auch in der FAQ zu Klipper den Hinweis, daß die TMCs mitten im Druck aussteigen können. Das ist wohl vor allem dann der Fall, wenn die Geschwindigkeit der Achsen zu sehr hoch gesetzt wurden. (Es soll ja Leute geben, die unter Klipper mit 100mm/sec statt mit 60mm/sec drucken, tstststss...)

Bislang konnte ich derartiges Verhalten bei uns nicht beobachten. Mit der in diesen Tagen erscheinenden neuen Klipper Version sollen jedoch wohl auch diese Problem gelöst sein.

Wie auch immer: Erwähnenswert ist, daß diverse G-Code Variablen zu seltsamem Verhalten führen können. Das betrifft jedoch meistens Start- oder Endcodes sowie diverse Plugins von OctoPrint, die z.B. mit G117 eine Bildschirmausgabe erzeugen wollen.

Ein Switchen zwischen Marlin und Klipper ist problemlos möglich und in 5 Minuten bewerkstelligt, falls mal etwas nicht so klappt, wie es soll. Ich schließe zur Installation von Marlin über die Arduino IDE den ausgeschalteten Drucker via USB an meinen Rechner an, starte die Arduino IDE und wähle kompilieren / hochladen, nachdem ich den Drucker eingeschaltet habe. Das bügelt alles von Klipper weg.

Umgekehrt installiere ich Klipper, indem ich mich als pi per ssh auf dem OctoPI/OctoPrint  Server anmelde, mit

cd ~/Klipper

ins Klipper Verzeichnis wechsle und dann erst mal herausfinde, auf welchem USB Port denn der jetzt am OctoPI angeschlossene Drucker lauscht. Dazu

ls -l /dev/serial/by-id/

eingeben, den ausgegebenen Port merken und dann beherzt den Klipper Bootloader mit

make flash FLASH_DEVICE=/dev/gemerkterPort

auf den Drucker kopieren. Dazu sollte man beachten, daß der Drucker nicht mit OctoPrint verbunden ist. Am besten danach rebooten, dann klappt das mit dem Drucken. ;-)

Hier noch mein config File für den AnyCubic i3 MEGA mit TNC2208 V1.2, und 8 Bit Board sowie Ultrabase. Die Achsen sind in der Firmware bereits invertiert, dazu ist das "!" vor den jeweiligen dir_pin gesetzt bzw. entfernt. Die Angaben für das PID Tuning beziehen sich auf meinen Drucker, bei anderen sollte das PID über das OctoKlipper Plugin gemacht werden. In Ergänzung zur Standard Config befindet sich ein Teil zur Regelung der Temperaturtoleranzen, ohne die mein Drucker nach wenigen Layern gleich ausgestiegen ist, die ich 1:1 aus der examples-extras.cfg Datei von Klipper entnommen habe. Noch nicht gekümmert habe ich mich um die anderen Gründe, warum ich mal einen Blick auf Klipper riskiere wie schnelleres und noch schöneres Drucken, schnellere Filamentförderung - Stichwort "pressure advance", Kaffee kochen und die Wäsche waschen...

# Anpassung der Pin Mappings für den AnyCubic i3 MEGA, TMC2208 und Ultrabase 
#
# Verwendung auf eigene Gefahr! Code kopieren und in octopi.url#conf einfügen
# 12 / 12 / 2018 thomas@trueten.de still under developement
#
# https://www.trueten.de/permalink/Einen-Blick-auf-Klipper-riskieren.html
#
#
# This file contains pin mappings for the Anycubic i3 Mega with
# Ultrabase from 2017. (This config may work on an Anycubic i3 Mega v1
# prior to the Ultrabase if you comment out the definition of the
# endstop_pin in the stepper_z1 section.) To use this config, the
# firmware should be compiled for the AVR atmega2560.
# See the example.cfg file for a description of available parameters.

[stepper_x]
step_pin: ar54
dir_pin: ar55
enable_pin: !ar38
step_distance: .0125
endstop_pin: ^!ar3
position_min: -5
position_endstop: -5
position_max: 210
homing_speed: 30.0

[stepper_y]
step_pin: ar60
dir_pin: !ar61
enable_pin: !ar56
step_distance: .0125
endstop_pin: ^!ar42
position_endstop: 0
position_max: 210
homing_speed: 30.0

[stepper_z]
step_pin: ar46
dir_pin: !ar48
enable_pin: !ar62
step_distance: .0025
endstop_pin: ^!ar18
position_endstop: 0.0
position_max: 205
homing_speed: 5.0

[stepper_z1]
step_pin: ar36
dir_pin: !ar34
enable_pin: !ar30
step_distance: .0025
endstop_pin: ^!ar43

[extruder]
step_pin: ar26
dir_pin: !ar28
enable_pin: !ar24
step_distance: .010799
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: ar10
sensor_type: ATC Semitec 104GT-2
sensor_pin: analog13
control: pid
min_temp: 0
max_temp: 260
min_extrude_temp: 170

[heater_fan extruder_fan]
pin: ar44

[heater_bed]
heater_pin: ar8
sensor_type: EPCOS 100K B57560G104F
sensor_pin: analog14
control: pid
pid_Kp: 74.883
pid_Ki: 1.809
pid_Kd: 775.038
min_temp: 0
max_temp: 110

[verify_heater extruder]
heating_gain: 2
check_gain_time: 20
hysteresis: 5
max_error: 120

[fan]
pin: ar9

[mcu]
serial: /dev/ttyUSB0
pin_map: arduino

[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 10
max_z_accel: 60

[heater_fan stepstick_fan]
pin: ar7

# Define the BLTouch servo
[servo bltouch]
pin: ar11
maximum_servo_angle: 180
minimum_pulse_width: 0.0006
maximum_pulse_width: 0.0024

# Define a probe using the BLTouch
[probe]
pin: ar2
x_offset: 26.0
y_offset: 0.0
z_offset: -1.7
activate_gcode:
    SET_SERVO SERVO=bltouch ANGLE=10
    SET_SERVO SERVO=bltouch ANGLE=60
    G4 P200
deactivate_gcode:
    SET_SERVO SERVO=bltouch ANGLE=90
    G4 P100

# Mesh Bed Leveling. One may define a [bed_mesh] config section
# to enable move transformations that offset the z axis based
# on a mesh generated from probed points. Note that bed_mesh
# and bed_tilt are incompatible, both cannot be defined.
[bed_mesh]
speed: 50
#   The speed (in mm/s) of non-probing moves during the
#   calibration. The default is 50.
horizontal_move_z: 5
#   The height (in mm) that the head should be commanded to move to
#   just prior to starting a probe operation. The default is 5.
samples: 1
#   The number of times to probe each point.  The probed z-values
#   will be averaged.  The default is to probe 1 time.
sample_retract_dist: 2.0
#   The distance (in mm) to retract between each sample if
#   sampling more than once.  Default is 2mm.
min_point: 19,32
#min_point: 0,32
#   An X,Y point defining the minimum coordinate to probe on
#   the bed. Note that this refers to the nozzle position,
#   and take care that you do not define a point that will move
#   the probe off of the bed. This parameter must be provided.
max_point: 199,212
#max_point: 175,198
#   An X,Y point defining the maximum coordinate to probe on
#   the bed. Follow the same precautions as listed in min_point.
#   Also note that this does not necessarily define the last point
#   probed, only the maximum coordinate. This parameter must be provided.
probe_count: 5,5
#   A comma separated pair of integer values (X,Y) defining the number
#   of points to probe along each axis. A single value is also valid,
#   in which case that value will be for both axes. Default is 3,3
#   which probes a 3x3 grid.
#fade_start: 1.0
#   The z-axis position in which to start phasing z-adjustment out.
#   Default is 1.0.
#fade_end: 0.0
#   The gcode z position in which phasing out completes.  When set
#   to a value below fade_start, fade is disabled. It should be
#   noted that fade may add unwanted scaling along the z-axis of a
#   print.  If a user wishes to enable fade, a value of 10.0 is
#   recommended. Default is 0.0, which disables fade.
#fade_target:
#   The z position in which fade should converge. When this value is set
#   to a non-zero value it must be within the range of z-values in the mesh.
#   Users that wish to converge to the z homing position should set this to 0.
#   Default is the average z value of the mesh.
#split_delta_z: .025
#   The amount of Z difference (in mm) along a move that will
#   trigger a split. Default is .025.
#move_check_distance: 5.0
#   The distance (in mm) along a move to check for split_delta_z.
#   This is also the minimum length that a move can be split. Default
#   is 5.0.
#mesh_pps: 2,2
#   A comma separated pair of integers (X,Y) defining the number of
#   points per segment to interpolate in the mesh along each axis. A
#   "segment" can be defined as the space between each probed
#   point. The user may enter a single value which will be applied
#   to both axes.  Default is 2,2.
#algorithm: lagrange
#   The interpolation algorthm to use. May be either "langrange"
#   or "bicubic". This option will not affect 3x3 grids, which
#   are forced to use lagrange sampling.  Default is lagrange.
#bicubic_tension: .2
#   When using the bicubic algoritm the tension parameter above
#   may be applied to change the amount of slope interpolated.
#   Larger numbers will increase the amount of slope, which
#   results in more curvature in the mesh. Default is .2.

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [extruder]
#*# pid_kp = 18.387
#*# pid_ki = 0.936
#*# pid_kd = 90.325


HINWEIS:
Alle gemachten Angaben sind ohne Gewähr auf Funktion und Richtigkeit. Für eventuell entstehende Schäden übernehmen wir keinerlei Haftung. Sämtliche Veränderungen geschehen auf Eure Verantwortung und Gefahr.

Das Tutorial ist für das AnyCubic i3 MEGA Board verfasst worden. Bei anderen Boards und Herstellern bitte auf die aktuelle Beschreibung / Installationsanweisung auf https://github.com/KevinOConnor/klipper achten!

Irgendwie muss ich das alles finanzieren, daher sind die allermeisten Links Affiliate. D.h.: Solltet Ihr über diese Links zu einem Onlinehändler geraten und dort etwas bestellen, bekomme ich eine kleine Provision, für Euch ändert das am Preis natürlich nichts. Für die Inspirationen geht ein herzliches Dankeschön an die genannten Personen, insbesondere an die OctoPrint Community!

Keep on Coding Printing!

Was mir heute wichtig erscheint #430

Umsturz: Exaktes Ganz schlechtes Timing hatte ein Biber in Mecklenburg-Vorpommern. Der Nager brachte einen Baum zu Fall – welcher dann ausgerechnet auf eine vorbeifahrende Motorjacht stürzte. (Stuttgarter Zeitung)

Preisfrage: "Es sind ja nicht nur die rechten bis rechtsradikalen Kreise, die gerne darauf verweisen, wie viel Geld der deutsche Staat ausgibt, um Flüchtlinge zu unterstützen. Damit einher geht stets die Frage: Können wir uns das überhaupt leisten? Und: Warum wird so viel Geld für Ausländer ausgegeben? Man kennt den Sermon. Nur: Es sind Fragen und Bedenken, die auch aus großen Teilen der bürgerlichen Mitte zu hören sind, auch aus SPD und CDU, mitunter auch von der FDP beziehungsweise von deren Wählern. Dabei sollte es sich von selbst verbieten, Menschen als reine Kostenfaktoren zu betrachten und sie auf ihre wirtschaftliche Verwertbarkeit zu reduzieren, denn das ist eine nicht bloß neoliberale Haltung, sondern auch eine, die ein höchst problematisches Menschenbild ausdrückt, um es mal vorsichtig zu formulieren." heise

Geblockt: "Werbung bzw. Mailvertising ist ein immer größer werdendes Problem im Internet und der Anteil von schadhafter Online-Werbung wird zu einem stetig wachsenden Risiko für den Nutzer. Das ist einer der vielen Gründe, warum immer mehr Nutzer auf AdBlocker zurückgreifen und diese im Browser integrieren. Diese AdBlocker – wie zum Beispiel uBlock Origin – sind gut und filtern zuverlässig Werbung und Tracker im Browser heraus. Aber hier ist auch eine Schwäche dieser AdBlocker: Sie arbeiten natürlich nur innerhalb eines Browsers. Tracker und Werbung begegnen uns heute aber nicht nur beim Surfen im Internet, sondern auf immer mehr Geräten wie dem Smartphone und dem Smart-TV. Die meisten dieser Geräte bieten aber nicht die Möglichkeit, zusätzliche Programm zu installieren, die dann wiederum Werbung und Tracker aus dem Datenstrom herausfiltern. Diesem Problem hat sich das Projekt Pi-hole: Ein schwarzes Loch für internet-Werbung angenommen." Beitrag des Datenschutzbeauftragten der Evangelischen Kirche Deutschlands. Zusätzlich zur dort verlinkten Sammelliste empfehle ich, die Big Blocklist Collection einzusetzen und dazu das gepflegte Whitelisting Script von anudeepND als cron Job. So werden über 3 Millionen Werbeseiten, Tracker und Malwareseiten gefiltert. Leider gibt es ja noch viel mehr. Aber das ist ein Anfang ;-)

Geschrei: "Was wäre, wenn auf deutschen Autobahnen ein generelles Tempolimit von 120 km/h gälte? Ein Szenario." BrandEins

Präsidentenbeleidigung: "Wer in die Türkei reisen möchten, sollte in den sozialen Medien vorsichtig mit türkeikritischen Post und Beiträgen umgehen. Das Auswärtige Amt warnt vor möglichen Strafverfahren und Einreiseverboten." Stuttgarter Zeitung

Gedenken: "Mit Gedenkveranstaltungen und einer Demonstration wird in diesen Tagen an die vor 20 Jahren in den kurdischen Bergen von der türkischen Armee ermordete Internationalistin Andrea Wolf erinnert. Wolf, die in der Arbeiterpartei Kurdistans (PKK) den Kampfnamen Ronahi (Licht) trug, war am 23. Oktober 1998 nach einem Gefecht im Bergland von Catak in der Provinz Van mit weiteren Guerillakämpfern von den Militärs gefangen genommen worden. Die Gefangenen wurden – wie Zeugen dieses Kriegsverbrechens berichteten – gefoltert und extralegal hingerichtet." junge Welt

Kennzeichnung: "Die „Cop Map“ soll Polizeigewalt sichtbar machen. Die Kollektive „Peng!“ und „Polizeiklasse“ protestieren so gegen das PAG und Polizeiwillkür." Jetzt

Scheiße: "Bei einer Pilotstudie haben Forscher aus Österreich nach eigenen Angaben erstmals Mikroplastik in Stuhlproben von Menschen nachgewiesen. Die Kunststoffpartikel wurden in den Proben von allen acht Studienteilnehmern gefunden, wie die Medizinische Universität Wien und das österreichische Umweltbundesamt am Dienstag mitteilten." taz

Landraub: "Seit Jahrhunderten liefert der arme Süden, was den Norden reich macht: Rohstoffe und billige Arbeitskräfte. Daran hat auch das Ende des Kolonialzeitalters nichts geändert." Zeit Online

Ausrichtung: "Von verschonten Autokonzernen und Sammelklagen, von rabiaten RWE-Mitarbeitern und vom Strompreis." telepolis

Klammheimlich: "Die nächste (heimliche) Volkszählung vor dem „Zensus 2021“ wurde unter dem Radar der öffentlichen Wahrnehmung – kurzfristig entschieden und vom Bundestag eiligst für den 13.01.2019 beschlossen". freiheitsfoo

Ökobilanz: "Sind E-Autos ein großer ökologischer Fortschritt? Oder verschärfen sie das Klimaproblem nur? Unser Autor hat sich auf eine ausführliche Spurensuche begeben - und erklärt, wieso das Thema zu komplex ist für einfache Antworten."  Spektrum der Wissenschaft