3D Drucker Filament Tracking mit Spoolman in Home Assistant

Ich stand letztens bei einem Druck ohne Filament da, mein A1 Mini ohne AMS und ich ohne weiteres Filament haben ziemlich aus der Wäsche geschaut. Damit das nicht mehr passiert, möchte ich zumindest ungefähr wissen wie viel Filament noch auf der Rolle sein könnte. Und nun hier mein erster Ansatz:

Ihr benötigt:
HACS Integration für Bambulab

Für das Gewicht des aktuellen Drucks, kann je nach Drucker Hersteller auch abweichen.

Zur Filamentverwaltung nutzen wir das Tool Spoolman (zB als Addon für HA)

Dort legt ihr euer Filament an und dann noch die dazu passende Spulen.

Damit die Daten der Filamente nun noch in Home Assistant nutzbar werden benötigt ihr die HACS Integration

Der Entwickler der Home Assitsant Integration hat dazu ebenfalls einen passenden Blogartikel
der zB noch seine Klipper Integration zeigt.

Somit stehen euch erstmal die Daten zur Verfügung.

Jetzt kommt meine Ergänzung:

Ich habe ein input_select.filament angelegt, welches deckungsgleich zum Inhalt der Spoolman Filamente ausfällt.
Hierüber halte ich dann also fest, welches Filament gerade eingelegt ist. Das muss beim A1 Mini ohne AMS manuell gelöst werden

Passend dazu zieht jetzt eine Automation das Filament des aktuellen Druckgewichts direkt vial Spoolman API innerhalb von Spool man ab. Da es mir erstmal um einen Richtwert geht, reicht mir diese Logik, sollte sich jemand finden der sie erweitern mag. Feel free :slight_smile:
Die Spoolman Integration bietet einen Dienst der eine Spule verwenden kann. Erwartet aber eine Spulen ID, diese wird innerhalb meiner Automation direkt gemaßt mit den IDs die ihr aus der Spoolman Seite oder den Attributen direkt in HA entnehmen könnt.

alias: Filament Abziehen Spoolman
triggers:
  - trigger: state
    entity_id:
      - sensor.a1_mini_gewicht_des_drucks
    from: "0"
conditions: []
actions:
  - action: spoolman.use_spool_filament
    data:
      use_weight: "{{ states.sensor.a1_mini_gewicht_des_drucks.state }}"
      id: >
        {% set mapper =
          { 'PLA Matte Ivory White':'1',
            'PLA Matte Ash Grey':'2',
            'PLA Silver':'3',
            'PLA Black':'5',
            'PLA Matte Charcoal':'6',
            'PLA Marble White':'7' } %}
        {% set state = states('input_select.filament') %} {% set id =
        mapper[state] if state in mapper %} {{id}}
mode: single

Ob der Trigger der Weißheit letzter Schluss ein wird, wird die nächste Filament Lieferung sagen können.

Ich halte euch auf dem Laufenden - Video Inhalt gibt es noch nicht :slight_smile:

4 „Gefällt mir“

Super cool! Sowas hab ich schon lange gesucht. Jetzt braucht es nur noch eine Möglichkeit, automatisch zu erkennen, welches Filament eingelegt ist. Ich hab da schon erste Ideen. Falls mir was einfällt, poste ich es hier :blush:

2 „Gefällt mir“

Wenn man ein Bambulab mit AMS hat, werden die Rollen durch rfid erkannt, Die Teile sind direkt in der Spule verbaut. Aber um nicht extra solche Spulen oder eine AMS haben zu müssen, könnte man wunderbar NFC Tags einsetzen. Einfach an jede Spule einen ankleben und mit den Daten der Filaments hinterlegen. Beim manuellem Tausch kann man dann den Tag scannen und so die aktuell eingestellte Rolle umstellen. :slight_smile:

2 „Gefällt mir“

Also ich mache das mit Spoolstock, einer App au dem Smartphone, eine Web-Version ist in Arbeit. Habe dazu mal im November gebloggtt.

Mein Workflow ist bei einem Ender3 V3 Plus ohne AMS relativ einfach:

  • Wenn eine Spule vom Drucker weg geht, dann landet sie erst mal auf der Küchenwaage.
  • In Spoolstock habe ich für jede Spule ein Label mti QR-Code, das pappt auf der Spule und das scanne ich wenn diese auf der Waage liegt. Damit wird in Spoolstock sofort die aktuelle Spule ausgewählt und kann editiert werden.
  • Dann nur das aktuelle Gewicht für die Spule eintragen, das Leergewicht der Spule kennt die App, ich sehe also sofort, wie viel Filament noch übrig ist.
  • Nach dem Wiegen kommt das Ding wieder in den Vakuumbeutel, wird vakumiert, ab in die Schachtel und ab ins Regal.

Das tut es für mich. Die Inventardaten können auch exportiert werden, wenn man irgendwelche Statistiken machen will. Für mich ist aber eher wichtig, zu sehen was ich noch auf Lager habe und bei Mengen < 200g kommt eh eine Warnung, dass ich bestellen muss.

2 „Gefällt mir“

Ich hatte mich heute morgen schon fröhlich zu Drucker begeben und wollte eben diese RFIDs in Home Assistant Einscannen, bis mir dann aufgefallen war dass NFC ≠ RFID. Aber so finden vielleicht zumindest meine nicht genutzten NFC Tags mal ihre Verwendung - die Grundidee hatte ich, es genauso zu machen.

2 „Gefällt mir“

Es gibt auch einen Sync fürs AMS zu spoolman :slight_smile:

3 „Gefällt mir“

Die RFID-Tag von Bambu sind nicht ohne weiteres einlesbar, weil die codiert sind.
Es gab mal ein Github Project dazu, aber das ist mittlerweile eingeschlafen, mangels interesse.

Es gibt aber ein neues Projekt bei Github „AMSPlusCore“, was so eine Art universioelle RFID-Lösung für alle Filemantspulen werden soll.

Ich hab das Theman mal lange Zeit verfolgt, aber mittlerweile interessiert es mich nicht mehr. Der Mehrwert von RFID-Tags bei dem Bambu-Filament ist mir der Mehrpreis nicht wert, ich kaufe mein Filement bei anderen Herstellern.
Zudem nutze ich Spoolman auch nicht weil, weil eben die manuell Pflege dort der Aufwand nicht wert war.

Die Frage ist, ob das Github-Projekt von oben lange funktionieren wird, da Bambulab ja schon vor langer Zeit angekündigt hat, die MQTT-Funktionen deutlich einzuschränken.

2 „Gefällt mir“

Ich versuche gerade den Input Select dynamisch zu gestalten.

Funktioniert aktuell über die Abfrage der Entitäten die die Spoolman Integration liefert. Dies könnte man in jeglicher Form triggern.

action: input_select.set_options
target:
  entity_id: input_select.spoolman_filament
data:
  options:  >
       {{ expand(integration_entities('spoolman'))
       | selectattr('attributes.filament_name', 'defined')
       | map(attribute='attributes.filament_name') | list }}

Ich scheitere gerade daran die Filament IDs noch mit in die Liste zu bekommen, da der Namepsace ein Array ausgibt, welches ich nicht wieder „gejoined“ bekomme.

{% set filname =  expand(integration_entities('spoolman')) | selectattr('attributes.filament_name', 'defined') |list %}
{% set ns = namespace(result=[]) %}
{% for item in filname %}
 {% set ns.result = ns.result +  [item.attributes.filament_id] + [item.attributes.filament_name]  %}
{% endfor %}
{{ ns.result }}

so sehen die jeweiligen Ergebnisse aus, wir benötigten aber die Filament ID und den Namen in einem Array Feld.

2 „Gefällt mir“

Kannst du ja mal testen, so müsste eine fortlaufende Liste herauskommen.

{% set filnames = expand(integration_entities('spoolman')) 
  | selectattr('attributes.filament_name', 'defined') 
  | map(attribute='attributes.filament_name') 
  | list 
%}

{% set filament_ids = expand(integration_entities('spoolman')) 
  | selectattr('attributes.filament_name', 'defined') 
  | map(attribute='entity_id') 
  | list
%}

{% set result = namespace([]) %}
{% for i, item in enumerate(filnames) %}
  {% set result = result + [[filament_ids[i], item]] %}
{% endfor %}
{{ result }}

Der zweite Block müsste meine Erachtens so aussehen für die ID:

{% set filament_ids = expand(integration_entities('spoolman')) 
  | selectattr('attributes.filament_id', 'defined') 
  | map(attribute='attributes.filament_id') 
  | list
%}

Bekomme aber folgenden Output:

Output der Liste müsste eigentlich so aussehen damit input_select.set_options das verwerten kann:

Im Format:

filament_id filament_name

ohne Trennzeichen oder Seperator.

[
  "3 PLA-lite BLACK",
  "2 PLA-Matte DARK GREY",
  "1 PLA-Matte BLACK"
]

Hallo Leute, ich hatte es mit dem Tool :

GitHub - Rdiger-36/bambulab-ams-spoolman-filamentstatus: This project integrates a Bambulab AMS system with…

probiert leider übermittelt der bambu lab a1 mit AMS kein Einzel Gewicht der spule sondern nur gesamt und somit wars das mit dem Tool.

Jetzt habe ich alles in meinen HA Spoolman und auch bambu Lab aber immer noch keinen Abzug des Gewichtes. Beim Google bin ich auf euch gestoßen.

Eigentlich auf Flotomation wie weit seit ihr mit eine funktionieren Version für HA ?

Für eine Rückmeldung währe ich sehr dankbar.

Das Gesamtgewicht kommt vom RFID-Tag, das Restgewicht berechnet - oder sagen wir besser - schätzt der Drucker anhand der Drehzahl im AMS, wenn die Spule abgewickelt wird - meines Wissen auch nut bei den P1x und X1x Modellen mit dem großen AMS
Aber das ich auch so genau, dann kann ich das Restgewicht auch schätzen, wenn die Rolle in die Hand nehme.