Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Bambu lab 3d Drucker MQTT Integration

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Bambu lab 3d Drucker MQTT Integration

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      SidM last edited by

      Danke @djalexz !

      Ich hatte irgendwie den Port 1883 im Hinterkopf...

      Verbindung zum Drucker steht mit dem "MQTT Broker/Client" Adapter und die Werte werden in einem Json Objekt aktualisiert.

      Ich habe jetzt versucht mit einem Blockly mir ein Paar Werte in Datenpunkte zu schreiben:

      2023-02-09.png

      Als Wert schreibt er dann aber nur ein {"ack":true} in den Datenpunkt.
      Bin ich hier komplett auf den Holzweg?
      Wenn ich @mickym richtig verstanden habe, benötigt man nicht unbedingt Node-Red dafür. Da ich bisher damit auch null damit zu tun hatte, würde ich es auch gerne meiden und mit Blockly lösen.
      Wenn es aber nicht anders geht, muss ich mich wohl damit auseinander setzen.

      mickym 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @SidM last edited by

        @sidm ist schade dass du dich nicht mit Node-red beschäftigen willst, da es in meinen Augen wesentlich mächtiger als Blockly ist und bis auf ganz seltene Aufgaben den gleichen Funktionsumfang und sogar noch mehr mit NodeRed lösen kannst. Man kann so Adapter ersetzen wenn diese nicht funktionieren. Wenn du es mit dem Mqtt Adapter hinbekommen hast, würde ich Dir trotzdem meinen Node-Red Flow empfehlen, um den JSON in einzelne Datenpunkte zu schreiben. Da musst auch nicht viel lernen. Das Modifizieren und Umrechnen kannst wieder mit Blockly machen.

        Du kannst auch, wie du angefangen hast, die Datenpunkte mit Blockly machen, aber Blockly ist was Objektbearbeitung betrifft so grottig schlecht und üunbersichtlich - da musst du immer in einem andren Fenster immer das Json Editor offen haben. Da würde ich mir dann schon überlegen, ob Du nicht gleich mit JavaScript codierst.

        Im Prinzip ist Dein Ansatz ja richtig, aber da das Objekt doch sehr komplex ist, kann man aus Deinem Blockly unmöglich erkennen, wo der Fehler ist.

        Ich kann dir wie gesagt nur anbieten den Flow mit Dir zu erstellen in Node Red für die einzelnen Datenpunkte und wenn du dann weiter auf den Geschmack dieses genialen Tools gekommen bist helfe ich Dir gerne weiter. Ich kenn einige die von Blockly auf NodeRed umgestiegen sind. Ich verstehe eh nicht warum die meisten Blockly nutzen, wahrscheinlich weil es die meisten machen.

        D 1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @SidM last edited by mickym

          2023-02-09.png

          Als Wert schreibt er dann aber nur ein {"ack":true} in den Datenpunkt.
          Bin ich hier komplett auf den Holzweg?
          Wenn ich @mickym richtig verstanden habe, benötigt man nicht unbedingt Node-Red dafür. Da ich bisher damit auch null damit zu tun hatte, würde ich es auch gerne meiden und mit Blockly lösen.
          Wenn es aber nicht anders geht, muss ich mich wohl damit auseinander setzen.

          Gerade weil du mit Blockly nichts siehst musst halt debug Blöcke einbauen und Dir die Werte als Objekte anzeigen lassen und in ein JSON Tool überführen. In Node Red kannst halt über das Debugfenster direkt den Pfad zu jedem Attribut kopieren und so die Werte auch einzeln easy Isolieren.

          Es sieht so aus, wenn ich das Objekt von oben nehme, das bed_temper eine Eigenschaft von print ist,

          Dann heißt Dein Attribut

          print.bed_temper
          

          Ich bin jetzt ehrlich gesagt dass nur in einen gescheiten JSON Editor zu kopieren, um Dir den Pfad zu sagen. Kannst ja beides versuchen.

          Das nozzle_temper ist mindest auch eine Eigenschaft des print Objektes,
          also

          print.nozzle_temper
          
          1 Reply Last reply Reply Quote 0
          • D
            djalexz @mickym last edited by djalexz

            @mickym Ich sehe das genau so wie du.
            @SidM Ich habe mittlerweile alle Blockly Scripte abgeschaltet und alles mit Node-Red realisiert.
            Es ist mMn. wesentlich einfacher (wenn man sich nicht wirklich mit Javascript auskennt).
            Installiere dir den Node-Red Adapter im ioBroker (ist ja klicki bunti) und nimm den Subflow von @mickym.
            Damit wird das echt easy.
            Und wenn du willst, dann kann ich dir gerne meine ersten Gehversuche zur Verfügung stellen.
            b1b59fb7-5a7e-4cf7-a7fd-947fd668963b-image.png

            Bitte nicht auf Beschriftung und Ordnung achten.
            Ist ein erster Entwurf, der erst mal funktioniert 🙂

            [
                {
                    "id": "6e802f1553b18149",
                    "type": "subflow",
                    "name": "JSON or Obj to IOBroker",
                    "info": "# Creates an IOBroker tree\n\nThis node creates an IOBroker tree out of an Java-Object or JSON String.\n\nThe object tree will be created under 0_userdata.0\nIn addition to the JSON-String or Java Object as `msg.payload` it is necessary to specify a `msg.top` properity in addition to the msg-Object.\n\nThe object tree will be created under 0_userdata.0\n\nExisting `msg.topic` entries will be deleted.\nAn iobroker-out node has to be appended to this subflow node. It is not part of the subflow itself. No topic should be specified in the iobroker out node.\n\nIs `msg.top` property isn't defined, the `top` property of the subflow-node is used. \n\nIn the properties of the subflow node a new property `keepTopic` has been added. Default is _false_ to keep the current behaviour. If set to _true_ then the originial topic will be placed between the `top` property of the subflow node and the property of the analyzed JSON object.\n\n**Attention:**\nIf msg.top and top is empty, all msg.topics (msg.topic) will be directly prefixed with 0_userdata.0. . \n\n**Update 13.09.2022:**\nSpaces in topics of objects are no longer replaced with underscores in objects. No differences between all data types.\n\n# Erstellt einen Objektbaum im ioBroker\n\nDiese Node erstellt einen Objektbaum im ioBroker aus einem JAVA Objekt bzw. einem JSON String. \n\nDer Baum wird in jedem Fall unter 0_userdata.0 erstellt und zwar unter dem Topic der in` msg.top` mitgegeben wurde. In der `msg.payload` befindet sich dann der JSON String oder das entsprechende Objekt.\n\nExistierende `msg.topic `Einträge werden gelöscht.\nEin entsprechende iobroker-out Node muss an den Flow angehängt werden. Sie ist nicht Bestandteil des Subflows. In dieser iobroker-out Node darf kein Topic angegeben werden. \n\nFalls msg.top nicht definiert wurde, wird der `top`-Wert der Subflow-Node verwendet.\n\nIn den Eigenschaften der Subflow-Node wurde ein neuer Parameter `keepTopic` hinzugefügt. Standardwert ist _false_, um das bisherige Verhalten beizubehalten. Setzt man die Eigenschaft auf _true_, dann wird das originale Topic zwischen der `top` Eigenschaft der Subflow-Node und Eigenschaft des analysierten JSON Objektes eingefügt.\n\n**Achtung:**\nWenn top und msg.top leer ist, werden alle msg.topics (msg.topic) direkt unter dem Präfix 0_userdata.0., angelegt bzw. ausgegeben. \n\n**Update 13.09.2022:**\nLeerzeichen werden in Topics von Objekten nicht mehr durch Unterstriche ersetzt. Es gibt keine Unterschiede mehr zwischen den Datentypen.",
                    "category": "",
                    "in": [
                        {
                            "x": 60,
                            "y": 160,
                            "wires": [
                                {
                                    "id": "554b8c663bcb46c2"
                                }
                            ]
                        }
                    ],
                    "out": [
                        {
                            "x": 2620,
                            "y": 280,
                            "wires": [
                                {
                                    "id": "0962842ebd23e0d7",
                                    "port": 0
                                }
                            ]
                        }
                    ],
                    "env": [
                        {
                            "name": "top",
                            "type": "str",
                            "value": "objRoot"
                        },
                        {
                            "name": "keepTopic",
                            "type": "bool",
                            "value": "false"
                        }
                    ],
                    "meta": {},
                    "color": "#E2D96E",
                    "icon": "node-red/batch.svg"
                },
                {
                    "id": "3e11e8338f694832",
                    "type": "split",
                    "z": "6e802f1553b18149",
                    "name": "split object",
                    "splt": "\\n",
                    "spltType": "str",
                    "arraySplt": 1,
                    "arraySpltType": "len",
                    "stream": false,
                    "addname": "key",
                    "x": 1370,
                    "y": 160,
                    "wires": [
                        [
                            "0562a4249c8b856b"
                        ]
                    ]
                },
                {
                    "id": "0562a4249c8b856b",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "add key to topic",
                    "rules": [
                        {
                            "t": "set",
                            "p": "stateName",
                            "pt": "msg",
                            "to": "key",
                            "tot": "msg"
                        },
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "topic  & '.' & key",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 1560,
                    "y": 160,
                    "wires": [
                        [
                            "ddc90985bef0fafa"
                        ]
                    ]
                },
                {
                    "id": "ddc90985bef0fafa",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is type?",
                    "property": "payload",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "istype",
                            "v": "array",
                            "vt": "array"
                        },
                        {
                            "t": "istype",
                            "v": "object",
                            "vt": "object"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 3,
                    "x": 1740,
                    "y": 160,
                    "wires": [
                        [
                            "bfce19b206660fbe"
                        ],
                        [
                            "3e11e8338f694832"
                        ],
                        [
                            "1a8c03d866b85b12"
                        ]
                    ]
                },
                {
                    "id": "bfce19b206660fbe",
                    "type": "split",
                    "z": "6e802f1553b18149",
                    "name": "split array",
                    "splt": "\\n",
                    "spltType": "str",
                    "arraySplt": 1,
                    "arraySpltType": "len",
                    "stream": false,
                    "addname": "",
                    "x": 780,
                    "y": 280,
                    "wires": [
                        [
                            "e89927810c6d75ec"
                        ]
                    ]
                },
                {
                    "id": "e89927810c6d75ec",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "add index to topic",
                    "rules": [
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "topic  & '.' & parts.index",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 970,
                    "y": 280,
                    "wires": [
                        [
                            "a4d1a5d04564dc77"
                        ]
                    ]
                },
                {
                    "id": "f5d52c6a57d08904",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "finalize msg.topic",
                    "rules": [
                        {
                            "t": "set",
                            "p": "top",
                            "pt": "msg",
                            "to": "'0_userdata.0.' & top",
                            "tot": "jsonata"
                        },
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "top & '.' & topic",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 2170,
                    "y": 240,
                    "wires": [
                        [
                            "0962842ebd23e0d7"
                        ]
                    ]
                },
                {
                    "id": "1a8c03d866b85b12",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is msg.top != null",
                    "property": "top",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "nnull"
                        },
                        {
                            "t": "null"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 2,
                    "x": 1950,
                    "y": 280,
                    "wires": [
                        [
                            "f5d52c6a57d08904"
                        ],
                        [
                            "74c895ce724750de"
                        ]
                    ]
                },
                {
                    "id": "e023fe88445ce43e",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "",
                    "rules": [
                        {
                            "t": "delete",
                            "p": "topic",
                            "pt": "msg"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 350,
                    "y": 200,
                    "wires": [
                        [
                            "3649300b4c233b10"
                        ]
                    ]
                },
                {
                    "id": "3649300b4c233b10",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is type?",
                    "property": "payload",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "istype",
                            "v": "json",
                            "vt": "json"
                        },
                        {
                            "t": "istype",
                            "v": "array",
                            "vt": "array"
                        },
                        {
                            "t": "istype",
                            "v": "object",
                            "vt": "object"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 4,
                    "x": 600,
                    "y": 160,
                    "wires": [
                        [
                            "fc7913a8524badb7"
                        ],
                        [
                            "bfce19b206660fbe"
                        ],
                        [
                            "3e11e8338f694832"
                        ],
                        [
                            "9ac3cc3681e8b6c6"
                        ]
                    ]
                },
                {
                    "id": "1b8480cd2df7ba3f",
                    "type": "comment",
                    "z": "6e802f1553b18149",
                    "name": "Array",
                    "info": "",
                    "x": 600,
                    "y": 280,
                    "wires": []
                },
                {
                    "id": "b3541807672be040",
                    "type": "comment",
                    "z": "6e802f1553b18149",
                    "name": "object",
                    "info": "",
                    "x": 1340,
                    "y": 100,
                    "wires": []
                },
                {
                    "id": "a4d1a5d04564dc77",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is type?",
                    "property": "payload",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "istype",
                            "v": "object",
                            "vt": "object"
                        },
                        {
                            "t": "istype",
                            "v": "array",
                            "vt": "array"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 3,
                    "x": 1160,
                    "y": 280,
                    "wires": [
                        [
                            "3e11e8338f694832"
                        ],
                        [
                            "bfce19b206660fbe"
                        ],
                        [
                            "a096a93bb82b7a93"
                        ]
                    ]
                },
                {
                    "id": "74c895ce724750de",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "finalize msg.topic",
                    "rules": [
                        {
                            "t": "set",
                            "p": "top",
                            "pt": "msg",
                            "to": "top",
                            "tot": "env"
                        },
                        {
                            "t": "set",
                            "p": "top",
                            "pt": "msg",
                            "to": "'0_userdata.0.' & top",
                            "tot": "jsonata"
                        },
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "top & '.' & topic",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 2170,
                    "y": 320,
                    "wires": [
                        [
                            "0962842ebd23e0d7"
                        ]
                    ]
                },
                {
                    "id": "554b8c663bcb46c2",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "",
                    "property": "keepTopic",
                    "propertyType": "env",
                    "rules": [
                        {
                            "t": "true"
                        },
                        {
                            "t": "false"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 2,
                    "x": 170,
                    "y": 160,
                    "wires": [
                        [
                            "e30ba9f0483285e4"
                        ],
                        [
                            "e023fe88445ce43e"
                        ]
                    ]
                },
                {
                    "id": "e30ba9f0483285e4",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "",
                    "rules": [
                        {
                            "t": "change",
                            "p": "topic",
                            "pt": "msg",
                            "from": "/",
                            "fromt": "str",
                            "to": ".",
                            "tot": "str"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 350,
                    "y": 120,
                    "wires": [
                        [
                            "3649300b4c233b10"
                        ]
                    ]
                },
                {
                    "id": "0962842ebd23e0d7",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "translate invalid chars in topic",
                    "rules": [
                        {
                            "t": "change",
                            "p": "topic",
                            "pt": "msg",
                            "from": "..",
                            "fromt": "str",
                            "to": ".",
                            "tot": "str"
                        },
                        {
                            "t": "change",
                            "p": "topic",
                            "pt": "msg",
                            "from": "€",
                            "fromt": "str",
                            "to": "EUR",
                            "tot": "str"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 2430,
                    "y": 280,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "9ac3cc3681e8b6c6",
                    "type": "change",
                    "z": "6e802f1553b18149",
                    "name": "set topic, if empty",
                    "rules": [
                        {
                            "t": "set",
                            "p": "topic",
                            "pt": "msg",
                            "to": "topic ? topic : $type(payload)\t",
                            "tot": "jsonata"
                        }
                    ],
                    "action": "",
                    "property": "",
                    "from": "",
                    "to": "",
                    "reg": false,
                    "x": 950,
                    "y": 200,
                    "wires": [
                        [
                            "a096a93bb82b7a93"
                        ]
                    ]
                },
                {
                    "id": "fc7913a8524badb7",
                    "type": "json",
                    "z": "6e802f1553b18149",
                    "name": "",
                    "property": "payload",
                    "action": "obj",
                    "pretty": false,
                    "x": 750,
                    "y": 100,
                    "wires": [
                        [
                            "d9e7bdd4c48a8aa1"
                        ]
                    ]
                },
                {
                    "id": "d9e7bdd4c48a8aa1",
                    "type": "switch",
                    "z": "6e802f1553b18149",
                    "name": "is type?",
                    "property": "payload",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "istype",
                            "v": "array",
                            "vt": "array"
                        },
                        {
                            "t": "istype",
                            "v": "object",
                            "vt": "object"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 3,
                    "x": 900,
                    "y": 100,
                    "wires": [
                        [
                            "1520be42bcc2145e"
                        ],
                        [
                            "1520be42bcc2145e"
                        ],
                        [
                            "9ac3cc3681e8b6c6"
                        ]
                    ]
                },
                {
                    "id": "a096a93bb82b7a93",
                    "type": "junction",
                    "z": "6e802f1553b18149",
                    "x": 1380,
                    "y": 280,
                    "wires": [
                        [
                            "1a8c03d866b85b12"
                        ]
                    ]
                },
                {
                    "id": "1520be42bcc2145e",
                    "type": "junction",
                    "z": "6e802f1553b18149",
                    "x": 480,
                    "y": 20,
                    "wires": [
                        [
                            "3649300b4c233b10"
                        ]
                    ]
                },
                {
                    "id": "e2852c3101736fc9",
                    "type": "subflow:6e802f1553b18149",
                    "z": "9582121ff81174a6",
                    "name": "",
                    "env": [
                        {
                            "name": "top",
                            "value": "X1C",
                            "type": "str"
                        }
                    ],
                    "x": 210,
                    "y": 320,
                    "wires": [
                        [
                            "ce27f3362985a4d3",
                            "760aee3f9de9bc1a"
                        ]
                    ]
                },
                {
                    "id": "477ecaa1b9913815",
                    "type": "mqtt in",
                    "z": "9582121ff81174a6",
                    "name": "Bambu X1C Bambu_X1C",
                    "topic": "device/die_Seriennummer_Deines_X1/report",
                    "qos": "2",
                    "datatype": "auto-detect",
                    "broker": "84f61d394ba2ab34",
                    "nl": false,
                    "rap": true,
                    "rh": 0,
                    "inputs": 0,
                    "x": 190,
                    "y": 120,
                    "wires": [
                        [
                            "e2852c3101736fc9"
                        ]
                    ]
                },
                {
                    "id": "9fadcc36a22ec38b",
                    "type": "ioBroker out",
                    "z": "9582121ff81174a6",
                    "name": "",
                    "topic": "",
                    "ack": "true",
                    "autoCreate": "true",
                    "stateName": "",
                    "role": "",
                    "payloadType": "",
                    "readonly": "",
                    "stateUnit": "",
                    "stateMin": "",
                    "stateMax": "",
                    "x": 1180,
                    "y": 600,
                    "wires": []
                },
                {
                    "id": "44d9370861f0a79a",
                    "type": "function",
                    "z": "9582121ff81174a6",
                    "name": "heatbreak_fan_speed",
                    "func": "var percentages = {\n    \"0\": 0,\n    \"1\": 10,\n    \"2\": 20,\n    \"4\": 30,\n    \"5\": 40,\n    \"7\": 50,\n    \"9\": 60,\n    \"10\": 70,\n    \"12\": 80,\n    \"13\": 90,\n    \"15\": 100\n}\n\n    msg.payload = percentages[msg.payload]\n\n    return [msg];\n\n\n\n\n//msg.payload.print.big_fan1_speed_pct = percentages[msg.payload.print.big_fan1_speed]\n//msg.payload.print.big_fan2_speed_pct = percentages[msg.payload.print.big_fan2_speed]\n//msg.payload.print.heatbreak_fan_speed_pct = percentages[msg.payload.print.heatbreak_fan_speed]\n//msg.payload.print.cooling_fan_speed_pct = percentages[msg.payload.print.cooling_fan_speed]\n\n// Overwrite\n//msg.payload.print.big_fan1_speed = percentages[msg.payload.print.big_fan1_speed]\n//msg.payload.print.big_fan2_speed = percentages[msg.payload.print.big_fan2_speed]\n//msg.payload.print.heatbreak_fan_speed = percentages[msg.payload.print.heatbreak_fan_speed]\n//msg.payload.print.cooling_fan_speed = percentages[msg.payload.print.cooling_fan_speed]\n\n\n//node.send(msg)",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 760,
                    "y": 160,
                    "wires": [
                        [
                            "9fadcc36a22ec38b"
                        ]
                    ]
                },
                {
                    "id": "33a162f31f850a9e",
                    "type": "function",
                    "z": "9582121ff81174a6",
                    "name": "Stage Parser",
                    "func": "\nfunction parseAction(actionId) {\n    if(actionId === undefined) {\n        return \"\";\n    }\n    switch (actionId) {\n        case -2:\n            return \"Offline\";\n        case -1:\n            return \"Idle\";\n        case 0:\n            return \"Printing\";  // idle or printing\n        case 1:\n            return \"Auto bed leveling\";\n        case 2:\n            return \"Heatbed preheating\";\n        case 3:\n            return \"Sweeping XY mech mode\";\n        case 4:\n            return \"Changing filament\";\n        case 5:\n            return \"M400 pause\";\n        case 6:\n            return \"Paused due to filament runout\";\n        case 7:\n            return \"Heating hotend\";\n        case 8:\n            return \"Calibrating extrusion\";\n        case 9:\n            return \"Scanning bed surface\";\n        case 10:\n            return \"Inspecting first layer\";\n        case 11:\n            return \"Identifying build plate type\";\n        case 12:\n            return \"Calibrating Micro Lidar\";\n        case 13:\n            return \"Homing toolhead\";\n        case 14:\n            return \"Cleaning nozzle tip\";\n        case 15:\n            return \"Checking extruder temperature\";\n        case 16:\n            return \"Printing was paused by the user\";\n        case 17:\n            return \"Pause of front cover falling\";\n        case 18:\n            return \"Calibrating the micro lidar\";\n        case 19:\n            return \"Calibrating extrusion flow\";\n        case 20:\n            return \"Paused due to nozzle temperature malfunction\";\n        case 21:\n            return \"Paused due to heat bed temperature malfunction\";\n        default:\n            return actionId.toString()\n    }\n}\n\n\n\n    \nvar current_action = parseAction(msg.payload);\n\n\n\n    msg.payload = current_action;\n\n\n\n    return [msg];\n",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 730,
                    "y": 220,
                    "wires": [
                        [
                            "9fadcc36a22ec38b"
                        ]
                    ]
                },
                {
                    "id": "f6c8fbdf638c04e8",
                    "type": "function",
                    "z": "9582121ff81174a6",
                    "name": "Translate X1C Speed Profile",
                    "func": "function parseAction(SpeedProfile) {\n    if (SpeedProfile === undefined) {\n        return \"\";\n    }\n    switch (SpeedProfile) {\n        case 1:\n            return \"Silent\";\n           \n        case 2:\n            return \"Standard\";\n            \n        case 3:\n            return \"Sport\";\n           \n        case 4:\n            return \"Ludicrous\";\n           \n        default:\n            return \"Undefined\";\n          \n\n   \n    }\n\n}\n\n\n\n    var SpeedProfile = parseAction(msg.payload);\n    msg.payload = SpeedProfile;\n\n\n    return [msg];\n\n\n",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 780,
                    "y": 300,
                    "wires": [
                        [
                            "9fadcc36a22ec38b"
                        ]
                    ]
                },
                {
                    "id": "ce27f3362985a4d3",
                    "type": "switch",
                    "z": "9582121ff81174a6",
                    "name": "",
                    "property": "topic",
                    "propertyType": "msg",
                    "rules": [
                        {
                            "t": "eq",
                            "v": "0_userdata.0.X1C.print.cooling_fan_speed",
                            "vt": "str"
                        },
                        {
                            "t": "eq",
                            "v": "0_userdata.0.X1C.print.heatbreak_fan_speed",
                            "vt": "str"
                        },
                        {
                            "t": "eq",
                            "v": "0_userdata.0.X1C.print.stg_cur",
                            "vt": "str"
                        },
                        {
                            "t": "eq",
                            "v": "0_userdata.0.X1C.print.spd_lvl",
                            "vt": "str"
                        },
                        {
                            "t": "eq",
                            "v": "0_userdata.0.X1C.print.big_fan2_speed",
                            "vt": "str"
                        },
                        {
                            "t": "eq",
                            "v": "0_userdata.0.X1C.print.mc_remaining_time",
                            "vt": "str"
                        },
                        {
                            "t": "else"
                        }
                    ],
                    "checkall": "true",
                    "repair": false,
                    "outputs": 7,
                    "x": 470,
                    "y": 360,
                    "wires": [
                        [
                            "89074ea56277b288"
                        ],
                        [
                            "44d9370861f0a79a"
                        ],
                        [
                            "33a162f31f850a9e"
                        ],
                        [
                            "f6c8fbdf638c04e8"
                        ],
                        [
                            "01c35b9bb3921713"
                        ],
                        [
                            "21081e6a23dc83a1"
                        ],
                        [
                            "9fadcc36a22ec38b"
                        ]
                    ]
                },
                {
                    "id": "89074ea56277b288",
                    "type": "function",
                    "z": "9582121ff81174a6",
                    "name": "cooling_fan_speed",
                    "func": "var percentages = {\n    \"0\": 0,\n    \"1\": 10,\n    \"2\": 20,\n    \"4\": 30,\n    \"5\": 40,\n    \"7\": 50,\n    \"9\": 60,\n    \"10\": 70,\n    \"12\": 80,\n    \"13\": 90,\n    \"15\": 100\n}\n\n    msg.payload = percentages[msg.payload]\n\n    return [msg];\n\n\n\n\n//msg.payload.print.big_fan1_speed_pct = percentages[msg.payload.print.big_fan1_speed]\n//msg.payload.print.big_fan2_speed_pct = percentages[msg.payload.print.big_fan2_speed]\n//msg.payload.print.heatbreak_fan_speed_pct = percentages[msg.payload.print.heatbreak_fan_speed]\n//msg.payload.print.cooling_fan_speed_pct = percentages[msg.payload.print.cooling_fan_speed]\n\n// Overwrite\n//msg.payload.print.big_fan1_speed = percentages[msg.payload.print.big_fan1_speed]\n//msg.payload.print.big_fan2_speed = percentages[msg.payload.print.big_fan2_speed]\n//msg.payload.print.heatbreak_fan_speed = percentages[msg.payload.print.heatbreak_fan_speed]\n//msg.payload.print.cooling_fan_speed = percentages[msg.payload.print.cooling_fan_speed]\n\n\n//node.send(msg)",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 750,
                    "y": 100,
                    "wires": [
                        [
                            "9fadcc36a22ec38b"
                        ]
                    ]
                },
                {
                    "id": "01c35b9bb3921713",
                    "type": "function",
                    "z": "9582121ff81174a6",
                    "name": "big_fan2_speed (Chamber)",
                    "func": "var percentages = {\n    \"0\": 0,\n    \"1\": 10,\n    \"2\": 20,\n    \"4\": 30,\n    \"5\": 40,\n    \"7\": 50,\n    \"9\": 60,\n    \"10\": 70,\n    \"12\": 80,\n    \"13\": 90,\n    \"15\": 100\n}\n\n    msg.payload = percentages[msg.payload]\n\n    return [msg];\n\n\n\n\n//msg.payload.print.big_fan1_speed_pct = percentages[msg.payload.print.big_fan1_speed]\n//msg.payload.print.big_fan2_speed_pct = percentages[msg.payload.print.big_fan2_speed]\n//msg.payload.print.heatbreak_fan_speed_pct = percentages[msg.payload.print.heatbreak_fan_speed]\n//msg.payload.print.cooling_fan_speed_pct = percentages[msg.payload.print.cooling_fan_speed]\n\n// Overwrite\n//msg.payload.print.big_fan1_speed = percentages[msg.payload.print.big_fan1_speed]\n//msg.payload.print.big_fan2_speed = percentages[msg.payload.print.big_fan2_speed]\n//msg.payload.print.heatbreak_fan_speed = percentages[msg.payload.print.heatbreak_fan_speed]\n//msg.payload.print.cooling_fan_speed = percentages[msg.payload.print.cooling_fan_speed]\n\n\n//node.send(msg)",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 780,
                    "y": 400,
                    "wires": [
                        [
                            "9fadcc36a22ec38b"
                        ]
                    ]
                },
                {
                    "id": "3eb26b7322587c6b",
                    "type": "function",
                    "z": "9582121ff81174a6",
                    "name": "big_fan1_speed (AUX)",
                    "func": "var percentages = {\n    \"0\": 0,\n    \"1\": 10,\n    \"2\": 20,\n    \"4\": 30,\n    \"5\": 40,\n    \"7\": 50,\n    \"9\": 60,\n    \"10\": 70,\n    \"12\": 80,\n    \"13\": 90,\n    \"15\": 100\n}\n\n    msg.payload = percentages[msg.payload]\n\n    return [msg];\n\n\n\n\n//msg.payload.print.big_fan1_speed_pct = percentages[msg.payload.print.big_fan1_speed]\n//msg.payload.print.big_fan2_speed_pct = percentages[msg.payload.print.big_fan2_speed]\n//msg.payload.print.heatbreak_fan_speed_pct = percentages[msg.payload.print.heatbreak_fan_speed]\n//msg.payload.print.cooling_fan_speed_pct = percentages[msg.payload.print.cooling_fan_speed]\n\n// Overwrite\n//msg.payload.print.big_fan1_speed = percentages[msg.payload.print.big_fan1_speed]\n//msg.payload.print.big_fan2_speed = percentages[msg.payload.print.big_fan2_speed]\n//msg.payload.print.heatbreak_fan_speed = percentages[msg.payload.print.heatbreak_fan_speed]\n//msg.payload.print.cooling_fan_speed = percentages[msg.payload.print.cooling_fan_speed]\n\n\n//node.send(msg)",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 760,
                    "y": 360,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "760aee3f9de9bc1a",
                    "type": "json",
                    "z": "9582121ff81174a6",
                    "name": "",
                    "property": "payload.print",
                    "action": "",
                    "pretty": false,
                    "x": 370,
                    "y": 220,
                    "wires": [
                        []
                    ]
                },
                {
                    "id": "21081e6a23dc83a1",
                    "type": "function",
                    "z": "9582121ff81174a6",
                    "name": "function 3",
                    "func": "//var timeleft = 3727; //1h:2m:7s\n//Umrechnung in Stunden, Minuten, Sekunden\n\nvar hour = Math.floor((msg.payload % 3600) / 60);\nvar minute = Math.floor(msg.payload % 60);\n\n//Den String von Stunden, Minuten und Sekunden auf 2 Stellen ändern\nif (hour < 10) {\nhour = \"0\" + hour;\n}\n\nif (minute < 10) {\nminute = \"0\" + minute;\n}\n\n\nmsg.payload = hour + \":\" + minute;\n\n\n\n\nreturn msg;\n\n",
                    "outputs": 1,
                    "noerr": 0,
                    "initialize": "",
                    "finalize": "",
                    "libs": [],
                    "x": 720,
                    "y": 540,
                    "wires": [
                        [
                            "9fadcc36a22ec38b"
                        ]
                    ]
                },
                {
                    "id": "84f61d394ba2ab34",
                    "type": "mqtt-broker",
                    "name": "Bambu X1C MQTT Bambu_X1C",
                    "broker": "192.168.0.111",
                    "port": "8883",
                    "tls": "",
                    "clientid": "",
                    "autoConnect": true,
                    "usetls": true,
                    "protocolVersion": "4",
                    "keepalive": "60",
                    "cleansession": true,
                    "birthTopic": "",
                    "birthQos": "0",
                    "birthPayload": "",
                    "birthMsg": {},
                    "closeTopic": "",
                    "closeQos": "0",
                    "closePayload": "",
                    "closeMsg": {},
                    "willTopic": "",
                    "willQos": "0",
                    "willPayload": "",
                    "willMsg": {},
                    "userProps": "",
                    "sessionExpiry": ""
                }
            ]
            


            Ps. Das Dashboard in Jarvis nimmt auch langsam Form an.
            4b1d6209-94d4-4293-ab2f-945a24905e56-image.png

            D 1 Reply Last reply Reply Quote 0
            • S
              SidM last edited by

              @mickym

              Danke für die fixe Antwort!

              Okay ich hab mich da ein wenig falsch ausgedruckt. Ich würde mich auch mit Node-Red beschäftigen! Nur wollte ich jetzt nicht für die eine Sache wieder eine neue Baustelle eröffnen.

              Weiter oben schriebst du ja auch "Oje - wird immer schlimmer ihr macht Eurer ganzes System kaputt - in den NodeRed Adapter dürft ihr nichts schreiben."
              Schreckt auch ein wenig ab🤕

              Im IoBroker gibt es halt "nur " die Möglichkeit mit Javascript, Typescript oder Blockly. Da ich nicht programmieren kann, viel halt die Wahl auf Blockly.
              Ich komme aus der Steuerungs/Prozessleittechnik und wenn es hier FUP geben würde, würde ich das nehmen😊

              Wenn du allerdings anbietest mich da anzuleiten, würde ich mir tatsächlich die Node-Red Geschichte mal anschauen!

              mickym 2 Replies Last reply Reply Quote 0
              • mickym
                mickym Most Active @SidM last edited by

                @sidm na wie gesagt ich helfe dir gerne, gerade wenn du aus der Prozesstechnik kommst, dann dürften dir diese Flussdiagramme mit <NodeRed sehr Entgegenkommen.

                Was ich da geschrieben hatte:

                Weiter oben schriebst du ja auch "Oje - wird immer schlimmer ihr macht Eurer ganzes System kaputt - in den NodeRed Adapter dürft ihr nichts schreiben.

                Das gilt auch für Blockly. Man soll grundsätzlich wenn man eigene Datenpunkte erstellt, diese unter 0_userdata.0 erstellen und eben nicht in den Namensraum von Adaptern. Auch mit Blockly solltest Du nicht in den Javascript.0 Namensraum schreiben. Also wenn das so abschreckend geklungen hat, dann nehme ich das zurück.

                S 1 Reply Last reply Reply Quote 0
                • mickym
                  mickym Most Active @SidM last edited by

                  @sidm sagte in Bambu lab 3d Drucker MQTT Integration:

                  @mickym

                  Danke für die fixe Antwort!

                  Wenn du allerdings anbietest mich da anzuleiten, würde ich mir tatsächlich die Node-Red Geschichte mal anschauen!

                  Dann melde dich einfach, wenn du soweit bist und Du den Adapter installiert hast.

                  1 Reply Last reply Reply Quote 0
                  • S
                    SidM @mickym last edited by SidM

                    @mickym said in Bambu lab 3d Drucker MQTT Integration:

                    @sidm na wie gesagt ich helfe dir gerne, gerade wenn du aus der Prozesstechnik kommst, dann dürften dir diese Flussdiagramme mit <NodeRed sehr Entgegenkommen.

                    Super!

                    Das gilt auch für Blockly. Man soll grundsätzlich wenn man eigene Datenpunkte erstellt, diese unter 0_userdata.0 erstellen und eben nicht in den Namensraum von Adaptern. Auch mit Blockly solltest Du nicht in den Javascript.0 Namensraum schreiben. Also wenn das so abschreckend geklungen hat, dann nehme ich das zurück.

                    Okay gut, Ich schreibe die selbst erstellen Datenpunkt auch alle in 0_userdata.0

                    Dann melde dich einfach, wenn du soweit bist und Du den Adapter installiert hast.

                    Echt vielen Dank! Ich werde wenn ich heute Nachmittag dazu komme, mir das mal anschauen und Node-Red installieren. Dann nerve ich dich😀

                    Unabhängig davon lagst du oben mit dem Beispiel

                    print.nozzle_temper
                    

                    vollkommen richtig. Habe mal 4 Werte probiert und sie kommen in die Datenpunkte rein. 👍

                    Allerdings habe ich festgestellt dass die der Json Datenpunkt ca. aller 10-12sek zwischen 2 Strukturen wechselt.

                    Einmal wie oben dargestellt und dann auch noch so:

                    {
                        "mc_print": {
                            "command": "push_info",
                            "param": "[AMS][TASK]ams0 en=1,mode=0,sta=0",
                            "sequence_id": "722"
                        }
                    }
                    

                    Ist das noch bei jemanden so? Durch die geänderte Struktur und die fehlenden Infos kann er natürlich nur Müll Parsen und schreibt dann in die Objekte "null" rein.
                    Die geänderte Struktur ist auch nur für einen kurzen Moment <1sek sichtbar.

                    1 Reply Last reply Reply Quote 0
                    • D
                      DarkDevil @djalexz last edited by

                      @djalexz würdest du vielleicht erklären an welchen Stellen die nodes angepasst werden müssen?
                      Nachdem (oder vielleicht schon davor) ich meinen proxmox Server getauscht habe, werden meine Werte nur aktualisiert wenn ich den Bambu Slicer oder die App geöffnet habe.

                      D 1 Reply Last reply Reply Quote 0
                      • D
                        djalexz @DarkDevil last edited by

                        @darkdevil wenn du dir den Export von meinem Flow import hast:

                        Zeile 901: IP deines Druckers
                        Zeile 646: die Seriennummer deines Druckers.

                        Das wars.

                        Oder habe ich dein Anliegen falsch verstanden?

                        D 2 Replies Last reply Reply Quote 0
                        • D
                          DarkDevil @djalexz last edited by

                          @djalexz perfekt ich werde es morgen mal testen 😀

                          1 Reply Last reply Reply Quote 0
                          • D
                            djalexz last edited by

                            Moin zusammen,

                            einer von den Homeassistant Jungs hat einen Generator für die Flows gebaut:

                            https://www.wolfwithsword.com/bambulab-to-home-assistant-nodered-configurator/
                            (bitte entfenen, wenn hier Links in dieser Form nicht erlaubt sind).

                            Hiermit kann man sich seine Node-Red Import Datei generieren lassen und hat wenigstens schon mal die Basics.
                            Es muss dann natürlich noch für ioBroker umgebaut werden.
                            Ich bin immer noch nicht dahinter gekommen, wie ich die attribut Werte im ioBroker sinnvoll verarbeiten kann.
                            Evtl. weiß das ja einer von euch?

                            Sobald ich das gecheckt habe, kann ich den gesamten Flow für ioBroker umbauen und zur Verfügung stellen...

                            Man ist das alles kompliziert 😵

                            1 Reply Last reply Reply Quote 0
                            • kmxak
                              kmxak Most Active last edited by

                              also bezüglich node red fehlt echt ein ausführliches youtube video... ich komme damit auch noch nicht ganz klar.

                              Zu der aktuellen Firmware treten noch vereinzelt Probleme auf die ich persönlich gerade noch abwarte. Aber wenn MQTT läuft ist es zumindest schon mal top.

                              Eine Visualisierung könnte man auch mal basteln in VIS, nur fehlt die Zeit

                              D mickym 2 Replies Last reply Reply Quote 0
                              • D
                                djalexz @kmxak last edited by

                                @kmxak Ich würde ja in VIS was bauen, aber in nutze kein VIS sondern Jarvis siehe https://forum.iobroker.net/post/943794.
                                Welche Probleme tauchen bei der aktuellen Firmware auf? Ich kann nichts feststellen. Weder beim Drucker selbst noch bei MQTT.

                                1 Reply Last reply Reply Quote 0
                                • mickym
                                  mickym Most Active @kmxak last edited by mickym

                                  @kmxak sagte in Bambu lab 3d Drucker MQTT Integration:

                                  also bezüglich node red fehlt echt ein ausführliches youtube video... ich komme damit auch noch nicht ganz klar.

                                  Zu der aktuellen Firmware treten noch vereinzelt Probleme auf die ich persönlich gerade noch abwarte. Aber wenn MQTT läuft ist es zumindest schon mal top.

                                  Eine Visualisierung könnte man auch mal basteln in VIS, nur fehlt die Zeit

                                  Allgemein gibt es eine Übersicht NodeRed zusammen mit iobroker:
                                  https://www.smarthome-tricks.de/uebersicht-iobroker-node-red/

                                  Ansonsten wenn Englisch kein Problem ist - kann ich Dir nur die Tutorials von Steve empfehlen -

                                  https://stevesnoderedguide.com/#start

                                  Er hat auch über 70 Videos zu Node-Red gemacht:
                                  https://www.youtube.com/playlist?list=PLk0D2S-fqJ7YvR1wrpl8A4mhtBbYOlsE4

                                  Und wenn Du generell Fragen hast zu Node Red - dann mach doch einen Thread im NodeRed Forum auf. Einige hier im Forum, die NodeRed nutzen - mich eingeschlossen - helfen Dir gerne bei Fragen. Aber die Fragen muss man halt stellen. 😉

                                  1 Reply Last reply Reply Quote 1
                                  • D
                                    DarkDevil @djalexz last edited by

                                    @djalexz so ich habe es jetzt nochmal mit meinem P1p versucht. Die Daten kommen an solange ich die App geöffnet halte (den Slicer oder die App).
                                    Im Debug sehe ich auch bei ausgeschalteter App das Daten angezeigt werden, nur die datenpunkte aktualisieren sich nicht.

                                    Ich habe jetzt eine android vm aufgesetzt und lasse auf dieser die Bambu App laufen.

                                    Aber dennoch will mir nicht in den Kopf, dass die Daten aus dem Node red nur bei aktiver App an den IoBroker übertragen werden.

                                    mickym D 2 Replies Last reply Reply Quote 0
                                    • mickym
                                      mickym Most Active @DarkDevil last edited by

                                      @darkdevil Das ist auch meines Erachtens nicht stimmig. Wenn Du sagst sie kommen im Node Red an - dann musst Du halt die debug node jeden Schritt überprüfen und halt mal deinen Flow zeigen. NodeRed und der iobroker agieren völlig unabhängig von Apps oder sonst was.

                                      1 Reply Last reply Reply Quote 0
                                      • D
                                        djalexz @DarkDevil last edited by djalexz

                                        @darkdevil Moin, das was @mickym sagt.
                                        Die App und/ oder der Slicer sind völlig unabhängig von den MQTT Daten, die der Drucker sendet.
                                        Mein PC ist aus und der Drucker ist an. Es kommen trotzdem agnz normal Daten im ioBroker an.
                                        Also da stimmt auf jeden Fall etwas nicht.

                                        Am besten exportierst du wirklich mal deinen Flow und stellst ihn uns zur Verfügung.
                                        Evtl. finden wir ja gemeinsam den Fehler.

                                        LG Alex

                                        ps.
                                        Hast du in MQTT in-Node so eingestellt?

                                        cca69501-0629-4dfb-9ecc-02facf48294c-image.png

                                        Ich weiß halt nicht, ob der P1P anders wie der X1C aggiert. Kann ich mir aber nicht vorstellen und du sagst ja, dass in der Debug Node alles ankommt auch bei geschlossenen Apps.

                                        Hau einfach mal alles hier rein, was du hast.
                                        Das kriegen wir schon hin 😄

                                        D 1 Reply Last reply Reply Quote 0
                                        • D
                                          dadonali @djalexz last edited by

                                          Gibt es hier schon neue Ergebnisse, ob die Verbindung zum P1P sauber läuft?

                                          D 1 Reply Last reply Reply Quote 0
                                          • D
                                            djalexz @dadonali last edited by

                                            @dadonali Ich kann mir nicht vorstellen, dass der P1P einen anderen MQTT Server nutzt als der X1C und die Verbindung damit funktioniert 1A.
                                            Mein Dashboard mit Jarvis (siehe https://forum.iobroker.net/post/943794) funktioniert tadellos und liefert immer aktuelle Werte.
                                            Es gibt m.E.n. keinen Grund wieso das beim P1P anders laufen sollte.

                                            Evtl. findet sich ja hier ein P1P User, der das bestätigen kann.

                                            D 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            870
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            9
                                            121
                                            17600
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo