Filamentverbrauch Creality K2 (Pro/Plus) → Spoolman

Hallo zusammen,

ich habe mir in den letzten Tagen eine Lösung gebaut, um den Filamentverbrauch meiner Creality K2 Pro automatisch an Spoolman zu übermitteln – und zwar direkt aus IP-Symcon heraus, ganz ohne Home Assistant.

Hintergrund: Die bekannte Lösung SpoolmanSync setzt zwingend Home Assistant + die Integration ha_creality_ws als Middleware voraus. Ich wollte HA aber loswerden und alles in IPS haben. Also habe ich analysiert, woher die Daten eigentlich kommen – und es stellt sich heraus: Die K2 pusht alles Nötige über einen lokalen WebSocket (ws://<drucker-ip>:9999). Den kann man direkt anzapfen.

Was die Lösung macht:

  • Liest zyklisch (Timer) den K2-WebSocket – ohne Cloud, ohne HA, reiner PHP-Code in IPS

  • Ermittelt pro Druck den Verbrauchszuwachs (usedMaterialLength in mm) und den aktiven CFS-Slot (selected)

  • Bucht den Verbrauch inkrementell an Spoolman (PUT /spool/{id}/use mit use_length, Spoolman rechnet über die hinterlegte Dichte selbst in Gramm um)

  • Erkennt Druckstart/-ende und Slot-Wechsel (mehrfarbig) über printId + persistente Zähler; crash-/stromausfallsicher

  • Zuordnung CFS-Slot ↔ Spoolman-Spule über Spoolmans extra.active_tray (eine Quelle der Wahrheit)

  • Web-UI (als IPS-WebHook), in der man Spulen den Slots zuordnet und die Spulenverteilung (Hersteller, Name, Farbe, ID, Restmenge) + ein Buchungs-Log sieht – lässt sich auch als HTMLBox-Kachel in die Kachelvisu einbetten

Stand: Läuft bei mir produktiv. Gegenprobe mit HA ergab eine Abweichung von nur ~1,7 % (reines Poll-Timing gegenüber HAs Push).

Das Ganze besteht aktuell aus ein paar PHP-Skripten + einer Handvoll Variablen. Bevor ich Arbeit reinstecke, würde mich interessieren:

  1. Besteht überhaupt Interesse an so einer HA-freien Anbindung?

  2. Wer nutzt Spoolman zusammen mit Creality-Druckern (K1/K2/…) oder anderen und würde das einsetzen?

  3. Was wäre euch lieber: eine dokumentierte Skriptsammlung auf GitHub zum Selbereinrichten – oder gleich ein richtiges IPS-Modul (Konfigurator, saubere Instanz, Slot-Mapping per Formular)?

Wenn genug Interesse da ist, lade ich es auf GitHub hoch bzw. baue ein Modul draus. Über Rückmeldungen, Feature-Wünsche und auch Infos zu anderen Druckermodellen (welche Felder liefert deren WebSocket?) würde ich mich freuen.

LG

Manuel

Kleines Update: Aus der Frage „Skriptsammlung oder Modul?" ist inzwischen ein richtiges IPS-Modul geworden. :tada:

Ich hab die Skripte komplett in ein Modul überführt, damit man das Ganze nicht mehr von Hand zusammenbauen muss. Installation wie gewohnt über die Module-Instanz:

https://github.com/badfrog18/IPS-SpoolmanSync

Danach einfach eine SpoolmanSync-Instanz anlegen, Drucker-IP und Spoolman-URL ins Formular eintragen – Timer, Variablen und WebHook legt das Modul selbst an. Die ganzen IDs und IPs, die in der Skript-Version noch hartcodiert waren, sind jetzt Instanz-Properties (Poll-Intervall, Mindest-Delta, Restmengen-Schwellen etc. lassen sich auch einstellen).

Was seit meinem ersten Beitrag noch dazugekommen ist:

  • Web-Dashboard unter /hook/spoolman<InstanzID>: Druckerstatus mit Fortschritt/Layer/Restzeit/Temperaturen, Live-Kamera per WebRTC direkt vom Drucker, Slot-Zuordnung per Dropdown oder Spool-ID
  • Restmengen-Warnung an den Slot-Karten (unter 150 g gelb, unter 50 g rot, Schwellen einstellbar)
  • Archivieren-Button: leere Spulen direkt im Dashboard mit einem Klick in Spoolman archivieren, die Slot-Zuordnung wird dabei gleich mit freigegeben
  • Material-Check normalisiert auf Basisfamilien (PETG+ = PETG, PLA-CF = PLA, Nylon = PA …) – bei Konflikt gibts eine Warnung, im strengen Modus wird nicht gebucht bis die Zuordnung stimmt
  • Testmodus ist Standard: erst wird nur geloggt was gebucht würde, scharf schalten kann man über die Variable „Buchung aktiv (LIVE)" wenn man dem Ding traut

So sieht das Dashboard aus (bei mir per iframe in der Kachelvisu eingebettet):

Dashboard

Läuft bei mir seit ein paar Tagen im LIVE-Modus und bucht zuverlässig.

Getestet bisher nur mit meinem K2 Pro mit einer CFS-Box. K2 und K2 Plus sollten genauso funktionieren – falls das jemand ausprobiert, würde mich das Ergebnis sehr interessieren. Feedback und Fehlerberichte gerne hier im Thread oder als Issue auf GitHub.