Mein 3D-Drucker sprich MQTT

Vielen Dank für die ausführliche Erklärung.
Interessant wäre das ja als eigenes Modul zu implementieren um sich die Zusatzkomponente NodeRed zu sparen.
Das habe ich auch gesehen in den Forum, sieht sehr schick aus was die Jungs dort zusammen gebastelt haben.

Ich hatte eine ganze Zeit lang IPS direkt mit dem Drucker verbunden und das Format JSON ausgewählt, die hunderten Variablen waren schon nervig, aber Verbindungsabbrüche hatte ich nicht.

Eventuell kann ich mich mal dazu reißen lassen ein Modul zu schreiben, wollte das schon immer mal machen.

Mein erster Drucker hatte das in etwa als Nettopreis für das Material. Von da her ist das für mich eher ein Schnäppchen. Ist aber relativ, was man für Technik generell ausgibt.
Aber lesen wir weiter mit.

Wenn du einen Tester suchst - you are welcome.
So mit Software-schreiben habe ich es nicht so :slight_smile:

Ich suche schon die ganze Zeit nach eine Doku der MQTT-Topics von Bambulab, werde mal in dortigen Forum fragen oder den Support direkt.
Etliche Sachen sind mir noch nicht klar, deren Namen sind auch so nichts sagend, andere dann aber wieder sehr eindeutig.

Wundert mich total das Bambu in ihrer Wiki dazu absolut nichts dokumentiert haben.
Sehr schade, aber wie heißt eigentlich der Datenpunk wo der aktuelle Layer steht? Den hab ich vermisst und damals nicht gefunden.

total_layer_num = für die Gesamtzahl der zu druckenden Layer
layer_num = aktuellen druckender Layer
mc_percent = Fortschritt in %

Hat es jemand geschafft, direkt aus Symcon eine Verbindung zum Bambu P1P per MQTT und TLS herzustellen?
Und wenn ja, wie?

Hatt bei mir nicht funktioniert, ging immer wieder sofort in Fehler

Wobei Korrektur:
ich hab den X1C, aber ich bekomme immer wieder einen I/O Modul Fehler und reconnect

Bei mein P1Pq läuft es stabil.

Man muss nur die Instanz neu verbinden wenn er Stromlos war und Symcon irgendwann wohl keine Reconnect versuche mehr durchführt.

Kannst du mir verraten, wie du die Verbindung über MQTT hingekriegt hast?

Ein MQTT Client erstellen

IP vom Bambu und Port 8883 , SSL aktivieren
Benutzername ist bblp
Passwort ist der Accesscode

Folgenden Sub initial erstellen:
device/Seriennummer vom Drucker/report

Client Device erstellen mit der gleichen Topic
Nun Schnittstelle verbinden

Jetzt sollten Daten kommen.
Sie kommen als json

1 „Gefällt mir“

Hmmm, Sub inital erstellen verstehe ich nicht…
Ich habe folgendes gemacht, und ganz bestimmt was falsch (8883 ist offen, funktioniert auch bei deaktivierter Firewall nicht)

Client Socket erstellt

MQTT Client erstellt

MQTT Client Device erstellt

Bei mir war es genauso, am Ende war es ein Problem mit der Firewall, da Drucker und IPS in unterschiedlichen VLAN’s hängen.
Ich hatte die Regel mal gelöscht und neu angelegt, danach liefen auch die Daten rein.

Angelegt hab ich die Instanzen genauso wie du.

Jetzt bekomme ich auch die Daten rein, die mein NodeRed-Flow nicht durchgelassen hat, z.b. das ganze AMS-Zeug

Schau mal nochmal bei dir fehlt das /report hinten

Schon witzig, was der Drucker so alles ausplaudern, vor allem mit AMS und Filament-Spulen von BambuLab mit dem RFID-Tag drin

( die Texte habe ich mir selber ein-ge-deutsch, passt noch nicht alles, einige Teile kann ich auch noch nicht zuordnen )

Yeahhh…
Wer lesen kann :grinning:
Danke, die Daten strömen…

So, habe auch schon mal ein paar Daten ins Webfront gestellt…

Hast du das Topic als JSON ausgewählt und blendest nur diese ein die du willst ?

Ja JSON

Ich passe die Variablen, die ich möchte, an und verlinke diese in ein DummyModul ins WebFront

Ja, das hab ich genauso gemacht.
Verlinle mri die interessanten Variblen in meine WebUI

Ich hab nur die Pro.
Das würde mein Limit auffressen mit Variablen :smiley:

Ich hab angefangen ein kleines Skript zu schreiben was bei aktualisierung des MQTT Wert aufgerufen wird.

Nur mal schnell Quick&Dirty angefangen, aber daraus könnte man bestimmt später ein schönes Modul bauen, wo man nur die gewünschten Variablen auswählen kann.

json_string= GetValueString(21924);


$json= json_decode($json_string, true);

var_dump(($json));




class print_values {
    public int $wifi_signal;
    public float $bed_temper;

    function __construct() {
        $this->wifi_signal= 0;
        $this->bed_temper= 0.0;
    }

    public static function parse(array $json_array) {
        if(isset($json_array["print"])) {
            $tmp= new print_values();

            if(isset($json_array["print"]["wifi_signal"])) {
                $tmp->wifi_signal= (int)$json_array["print"]["wifi_signal"];
            }
            if(isset($json_array["print"]["bed_temper"])) {
                $tmp->bed_temper= (float)$json_array["print"]["bed_temper"];
            }
            return $tmp;
        }
    }
}

$objekt= print_values::parse($json);
echo $objekt->wifi_signal;
echo $objekt->bed_temper;