German only post (because Filaments mainly in Germany available)
Nur ein ganz kurzer Artikel zu diesem Thema um meine TD Messwerte zur Verfügung zu stellen, vielleicht hilft es ja Manchen.
Es geht um HueForge bzw. die dazu hilfreichen TD Werte. HueForge ist eine Software um aus Bildern und Grafiken STL Dateien zu erstellen, um diese mit Filamentwechseln bei bestimmten Layern farbig auf einem 3DDrucker zu drucken. https://shop.thehueforge.com/ Sogenanntes Filamentpainting. (Lithophanes können mit HueForge auch erstellt werden) Das möchte ich hier gerade nicht weiter erklären, aber ein Beispiel dafür:
Die TD-Werte (Transmission Distance) sind Filament-Parameter für diese Software. Der TD Wert eines Filaments gibt an, wie tief Licht in / durch gedruckte Gegenstände aus diesem Filament eindringt, in mm. Die Software benötigt diese Werte für die verwendeten Filamente um die resultierende Farbe der übereinander liegenden Filamentschichten besser berechnen zu können.
Ich habe nun für alle Filamente die ich gerade da habe und bei denen es mir sinnvoll erschien, Testswatches gedruckt und mit dieser Testbox gemessen: https://www.printables.com/de/model/552566-official-hueforge-td-step-test-and-light-box Die Werte sind nicht ganz einfach abzulesen, aber besser ein grob richtiger Wert, als ein grob falscher. Selbst bei vermeintlich gleichen Farben wie Weiß von DasFilament und Weiß (Flauschiges Schaf) von der Recyclingfabrik, gibt es mit 1,2 und 2,5 zwei sehr unterschiedliche TD Werte. Ich vermute es hängt hier an der Konzentration von Pigment / Färbemittel.
PETG
PLA
Das Filament
Weiß
1,4
PolyTerra
Forest Green
0,5
Alu-Silber
1,5
Saphire Blue
0,3
Melonengelb
3,0
Blau
0,8
Das Filament
Schwarz
0 – 0,1
Schwarz
0,2
Feuerrot
1,5
Sonnengelb
3,5
Prusament
Prusa Orange
2,6
Weiß
1,2
Jungle Green
0,7
Recyclingfabrik
Flauschiges Schaf
2,5
CR3D
Wasserblau
0,8
Kluge Maus
1,3
Nasser Elefant
0,7
Flüssiger Asphalt
0,5
Gute Nacht
0,2
Sorry für die Formatierung, besser ging es gerade nicht als Tabelle. Ein Bild mit ewig langem Alternativtext wollte ich jetzt auch nicht.
Die zwei PolyTerra Filamente habe ich mir übrigens nur als Referenz zur TD Messung gekauft. Die TD Werte davon sind “offiziell” von HueForge gemessen und in deren Katalog aufgelistet. Ich weiß nicht so recht was ich mit diesen zwei Rollen jetzt anfangen soll. Sie sind im Vergleich recht anspruchsvoll (langsam) zu drucken für gute Ergebnisse, ca. 1/4 der Geschwindigkeit mit der ich ansonsten mit dem Prusa MK4 oder MINI+ drucke, also echt langsam. Solltet ihr ebenfalls Filament als Referenz zur Messung benötigen, sagt Bescheid, ich lasse euch gerne etwas davon zukommen.
Spoolman is a great too to track your filament usage and Sebastian already described the setup. I’m also running Spoolman in my internal network. The software got multiple user interfaces or integrations so that you can use it standalone in a browser or integrate a widget into Klippers User interface.
The integration into Moonraker (the Web Interface for Klipper) currently doesn’t have the ability to provide any credentials for Moonrakers Spoolman integration to authenticate against Spoolman.
If you want to expose Spoolman to the Internet to check your filament usage from outside your homework you surely want authentication. Spoolman doesn’t offer any user management at all at the moment. So you have to user a normal web server or proxy to add some authentication.
In my personal setup I’m using Traefik reverse proxy to expose Spoolman running in a Docker container to the internet and handle the SSL certificates. SSL is also required to make use of Spoolmans feature to scan QR codes of your spools.
The requirements in my setup are: do not require a password when requests come from the local network (192.168.1.0/24); do require HTTP Basic authentication when request comes from the outside Internet.
This way the integration into my Klipper setup doesn’t require authentication but accessing Spoolman from the internet does.
While this would be relatively straightforward with Apache HTTPD it was a bit tricky with Traefik.
My solution is to define two http.routers in Traefik for Spoolman. One for access from the internal network:
Both http.routers then can have their own Traefik middlewares section to add authentication or not.
My whole Spoolman docker-compose.yaml looks like this:
version: '3.8'services: spoolman: image: ghcr.io/donkie/spoolman:latest restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.spoolman-internal.rule=( Host(`spoolman.example.net`) && ClientIP(`192.168.1.0/24` ))" - "traefik.http.routers.spoolman-internal.entrypoints=websecure" - "traefik.http.routers.spoolman.rule=Host(`spoolman.example.net`) && !ClientIP(`192.168.1.0/24` )" - "traefik.http.routers.spoolman.entrypoints=websecure" - "traefik.http.routers.spoolman.tls=true" - "traefik.http.routers.spoolman.priority=2" - "traefik.http.routers.spoolman.tls.certresolver=letsencrypt" - "traefik.http.routers.spoolman-internal.tls.certresolver=letsencrypt" - "traefik.http.routers.spoolman.middlewares=auth-users" - "traefik.http.routers.spoolman-internal.tls=true" - "traefik.http.routers.spoolman-internal.priority=1" - "traefik.http.routers.spoolman.service=svc-spoolman" - "traefik.http.routers.spoolman-internal.service=svc-spoolman" - "traefik.http.services.svc-spoolman.loadbalancer.server.port=8000" - "traefik.http.middlewares.auth-users.basicauth.users=admin:$$2U$$07$$K3XvlqQOC3ScMoRqOIQ50elXe.QByrAvpvmaDp9yj0oaA4LOLiCE6" networks: - web volumes:# Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory - type: bind source: ./data # This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`. target: /home/app/.local/share/spoolman # Do NOT change this line ports:# Map the host machine's port 7912 to the container's port 8000 - target: 8000 published: 7912 protocol: tcp mode: host environment: - TZ=Europe/Stockholm # Optional, defaults to UTCnetworks: web: name: web external: true
German version:
Spoolman ist ein echt tolles Tool, um den Filamentverbrauch zu verfolgen, und Sebastian hat die Einrichtung bereits beschrieben. Ich verwende Spoolman auch in meinem internen Netzwerk. Die Software hat mehrere Benutzeroberflächen oder Integrationen, so dass man sie eigenständig in einem Browser verwenden oder ein Widget in Klippers Benutzeroberfläche integrieren kann.
Die Integration in Moonraker (das Web-Interface für Klipper) bietet derzeit keine Möglichkeit, Anmeldedaten für Moonrakers Spoolman-Integration bereitzustellen, um sich gegenüber Spoolman zu authentifizieren.
Wenn Sie Spoolman dem Internet aussetzen wollen, um Ihre Filamentnutzung von außerhalb Ihres Hauses zu überprüfen, brauchen Sie sicherlich eine Authentifizierung. Spoolman bietet zur Zeit keine Benutzerverwaltung an. Sie müssen also einen normalen Webserver oder Proxy verwenden, um eine Authentifizierung hinzuzufügen.
In meinem persönlichen Setup verwende ich Traefik als Reverse Proxy, um Spoolman, das in einem Docker-Container läuft, dem Internet auszusetzen und die SSL-Zertifikate zu verwalten. SSL ist auch erforderlich, um Spoolmans Funktion zum Scannen von QR-Codes Ihrer Spools nutzen zu können.
Die Anforderungen in meinem Setup sind: kein Kennwort erforderlich, wenn Anfragen aus dem lokalen Netzwerk (192.168.1.0/24) kommen; HTTP Basic Authentication erforderlich, wenn Anfragen von außerhalb des Internets kommen.
Auf diese Weise ist für die Integration in mein Klipper-Setup keine Authentifizierung erforderlich, für den Zugriff auf Spoolman aus dem Internet jedoch schon.
Während dies mit Apache HTTPD relativ einfach zu bewerkstelligen wäre, war es mit Traefik etwas knifflig.
Meine Lösung ist, in Traefik zwei http.routers für Spoolman zu definieren. Einer für den Zugriff aus dem internen Netzwerk:
Beide http.router können dann ihre eigene Traefik-Middlewares-Sektion haben, um Authentifizierung hinzuzufügen oder nicht.
Mein ganzes Spoolman docker-compose.yaml sieht wie folgt aus:
version: '3.8'services: spoolman: image: ghcr.io/donkie/spoolman:latest restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.spoolman-internal.rule=( Host(`spoolman.example.net`) && ClientIP(`192.168.1.0/24` ))" - "traefik.http.routers.spoolman-internal.entrypoints=websecure" - "traefik.http.routers.spoolman.rule=Host(`spoolman.example.net`) && !ClientIP(`192.168.1.0/24` )" - "traefik.http.routers.spoolman.entrypoints=websecure" - "traefik.http.routers.spoolman.tls=true" - "traefik.http.routers.spoolman.priority=2" - "traefik.http.routers.spoolman.tls.certresolver=letsencrypt" - "traefik.http.routers.spoolman-internal.tls.certresolver=letsencrypt" - "traefik.http.routers.spoolman.middlewares=auth-users" - "traefik.http.routers.spoolman-internal.tls=true" - "traefik.http.routers.spoolman-internal.priority=1" - "traefik.http.routers.spoolman.service=svc-spoolman" - "traefik.http.routers.spoolman-internal.service=svc-spoolman" - "traefik.http.services.svc-spoolman.loadbalancer.server.port=8000" - "traefik.http.middlewares.auth-users.basicauth.users=admin:$$2U$$07$$K3XvlqQOC3ScMoRqOIQ50elXe.QByrAvpvmaDp9yj0oaA4LOLiCE6" networks: - web volumes:# Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory - type: bind source: ./data # This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`. target: /home/app/.local/share/spoolman # Do NOT change this line ports:# Map the host machine's port 7912 to the container's port 8000 - target: 8000 published: 7912 protocol: tcp mode: host environment: - TZ=Europe/Stockholm # Optional, defaults to UTCnetworks: web: name: web external: true
Die Installation von Spoolman auf dem Raspberry (oder MKS-Mainboard), wo Klipper drauf läuft ist so simpel wie so viele andere Klipper-Plugins – es wird lediglich ein auf Debian basiertes Image vorrausgesetzt.
So wird es zumindest in der Anleitung beschrieben.
Ich hingegen habe ich mich dazu entschlossen Spoolman auf einem anderen Host mit Hilfe von Docker zu installieren, da ich eh eine VM in meinem Netzwerk habe, die diverse Docker-Container bereit stellt.
Ich wiederhole einfach nur noch schnell einmal die Grundinstalltion, wie ich sie auch schon im Teil 1 von der Spoolman-Anleitung beschrieben habe.
Die entsprechende docker-compose.yml sieht dann in etwa so aus:
version: '3.8'services:spoolman:image: ghcr.io/donkie/spoolman:latestrestart: alwaysvolumes:# Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory - type: bindsource: ./data# This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`.target: /home/app/.local/share/spoolman# Do NOT change this lineports:# Map the host machine's port 7912 to the container's port 8000 - "7912:8000"environment: - TZ=Europe/Berlin# Optional, defaults to UTC
Wenn man also den Container installiert und am Laufen hat, dann reicht eine einfache Änderung der moonraker.conf in Klipper um Spoolman hinzuzufügen:
# moonraker.conf[spoolman]server: http://192.168.10.123:7912# URL to the Spoolman instance. This parameter must be provided.sync_rate: 5# The interval, in seconds, between sync requests with the# Spoolman server. The default is 5.
Und in die printer.cfg wird dann noch folgendes ergänzt:
# printer.cfg[gcode_macro SET_ACTIVE_SPOOL]gcode: {% if params.ID %} {% set id = params.ID|int %} {action_call_remote_method("spoolman_set_active_spool",spool_id=id)} {% else %} {action_respond_info("Parameter 'ID' is required")} {% endif %}[gcode_macro CLEAR_ACTIVE_SPOOL]gcode: {action_call_remote_method("spoolman_set_active_spool",spool_id=None)}
Und das war es schon – nach einem Neustart von Klipper sieht es dann so aus:
Es gibt sogar eine Integration in Home Assistant um sich dort auch die Spulen anzeigen zu lassen.
Die Einrichtung ist relativ einfach und quasi selbsterklärend. Hier gibt es die entsprechenden Infos: Home Assistant Spoolman
PS: Damit man auch die QR Codes, die man mit Spoolmann erstellt und ausgedruckt hat lesen kann, braucht es zwingend eine https-Verbindung zu Spoolman. Das ist seitens der Browserhersteller wie Mozilla oder Google so vorgegeben.
Ich habe das ganz einfach per Nginx Proxy Manager gelöst in dem ich eine neue Subdomain angelegt habe und diese dann per Letsencrypt mit einem SSL-Zertifikat ausgestattet habe. Aber nun ist Spoolman offen aus dem Internet erreichbar? Ja, aber mit Hilfe einer Access List (z.B. local-only) im Nginx Proxy Manager und der entsprechenden Einstellung bei der Subdomain, dass diese Access List benutzt werden soll, habe ich so eine HTTP-Auth Passwortabfrage eingerichtet und nur Personen mit entsprechendem Passwort kommen an das Webinterface von Spoolman.
@maxheadroom hat das aber auch irgendwie in seinem Traefik-Container lösen können und schreibt hier darüber: Klick
English version:
The installation of Spoolman on the Raspberry Pi (or MKS mainboard) running Klipper is as simple as so many other Klipper plugins – it only requires a Debian based system.
The corresponding docker-compose.yml then looks something like this:
version: '3.8'services:spoolman:image: ghcr.io/donkie/spoolman:latestrestart: alwaysvolumes:# Mount the host machine's ./data directory into the container's /home/app/.local/share/spoolman directory - type: bindsource: ./data# This is where the data will be stored locally. Could also be set to for example `source: /home/pi/printer_data/spoolman`.target: /home/app/.local/share/spoolman# Do NOT change this lineports:# Map the host machine's port 7912 to the container's port 8000 - "7912:8000"environment: - TZ=Europe/Berlin# Optional, defaults to UTC
So if you have the container installed and running, a simple change to moonraker.conf in Klipper is enough to add Spoolman:
# moonraker.conf[spoolman]server: http://192.168.10.123:7912# URL to the Spoolman instance. This parameter must be provided.sync_rate: 5# The interval, in seconds, between sync requests with the# Spoolman server. The default is 5.
And the following is then added to printer.cfg:
# printer.cfg[gcode_macro SET_ACTIVE_SPOOL]gcode: {% if params.ID %} {% set id = params.ID|int %} {action_call_remote_method("spoolman_set_active_spool",spool_id=id)} {% else %} {action_respond_info("Parameter 'ID' is required")} {% endif %}[gcode_macro CLEAR_ACTIVE_SPOOL]gcode: {action_call_remote_method("spoolman_set_active_spool",spool_id=None)}
And that’s it – after restarting Klipper, it looks like this:
There is even an integration in Home Assistant to display the reels there too.
The setup is relatively simple and virtually self-explanatory. You can find the relevant information here: Home Assistant Spoolman
PS: In order to be able to read the QR codes that you have created and printed with Spoolman, an https connection to Spoolman is required. This is specified by browser manufacturers such as Mozilla or Google.
I solved this quite simply using Nginx Proxy Manager by creating a new subdomain and then equipping it with an SSL certificate using Letsencrypt. But now Spoolman is openly accessible from the Internet? Yes, but with the help of an access list (e.g. local-only) in the Nginx Proxy Manager and the corresponding setting in the subdomain that this access list should be used, I have set up an HTTP-Auth password query and only people with the corresponding password can access the Spoolman web interface.
However, @maxheadroom has also been able to solve this somehow in his Traefik container and writes about it here: Click
Close
Ad-blocker not detected
Consider installing a browser extension that blocks ads and other malicious scripts in your browser to protect your privacy and security. Learn more.