[
    {
        "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": "9582121ff81174a6",
        "type": "tab",
        "label": "Flow 15",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "c3f9f96853c3f09c",
        "type": "group",
        "z": "9582121ff81174a6",
        "name": "Steuerung Steckdose",
        "style": {
            "label": true,
            "fill": "#7fb7df",
            "fill-opacity": "0.22",
            "color": "#000000"
        },
        "nodes": [
            "cd5f62e24a3e846f",
            "964df5b70be104e6",
            "ebace1619b2a4e15",
            "3143caf661f13237",
            "aeb883c176549af3",
            "f683e53accbca89f",
            "cff0b21c459cab43",
            "64fa2ca669c5a78d",
            "72cb87b2b06c4f05",
            "4ce8104a4e434a82",
            "e0079711246b60b0",
            "1d943caf9a8bc0f6",
            "ff01d8a59e17dc93",
            "c8abbf4d53a09ffe",
            "c5c06330d2e576f6",
            "f97a028e21d51bfb",
            "cac765606601d65c",
            "ae46dbed7e5925ae",
            "445ce2a0ad0a534a",
            "79d8f512af50dd04",
            "0c5048b46f072d52",
            "5c0e9eddf913e64d"
        ],
        "x": 74,
        "y": 379,
        "w": 1352,
        "h": 482
    },
    {
        "id": "4380d7035264bead",
        "type": "group",
        "z": "9582121ff81174a6",
        "name": "Online/Offline Anzeige",
        "style": {
            "label": true,
            "color": "#000000",
            "fill": "#addb7b",
            "fill-opacity": "0.38"
        },
        "nodes": [
            "d2a5ed4e2b8c8674",
            "b5c862f5d50c56cb",
            "2e71b198fe06ccdb",
            "144c29803a38e2a4",
            "3a131237a7bdec9d"
        ],
        "x": 1074,
        "y": 79,
        "w": 412,
        "h": 242
    },
    {
        "id": "19ede36faf38f69b",
        "type": "group",
        "z": "9582121ff81174a6",
        "name": "X1C Datenpunkt Umwandlung",
        "style": {
            "fill": "#ffff00",
            "label": true,
            "fill-opacity": "0.36",
            "color": "#000000"
        },
        "nodes": [
            "e2852c3101736fc9",
            "477ecaa1b9913815",
            "9fadcc36a22ec38b",
            "44d9370861f0a79a",
            "33a162f31f850a9e",
            "f6c8fbdf638c04e8",
            "ce27f3362985a4d3",
            "89074ea56277b288",
            "01c35b9bb3921713",
            "3eb26b7322587c6b",
            "21081e6a23dc83a1"
        ],
        "x": 14,
        "y": 39,
        "w": 1032,
        "h": 322
    },
    {
        "id": "e2852c3101736fc9",
        "type": "subflow:6e802f1553b18149",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "name": "",
        "env": [
            {
                "name": "top",
                "value": "X1C",
                "type": "str"
            }
        ],
        "x": 170,
        "y": 160,
        "wires": [
            [
                "ce27f3362985a4d3"
            ]
        ]
    },
    {
        "id": "477ecaa1b9913815",
        "type": "mqtt in",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "name": "Bambu X1C Bambu_X1C",
        "topic": "device/DieSeriennummerDeinesDruckers/report",
        "qos": "2",
        "datatype": "auto-detect",
        "broker": "84f61d394ba2ab34",
        "nl": false,
        "rap": true,
        "rh": 0,
        "inputs": 0,
        "x": 150,
        "y": 100,
        "wires": [
            [
                "e2852c3101736fc9"
            ]
        ]
    },
    {
        "id": "9fadcc36a22ec38b",
        "type": "ioBroker out",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "name": "schreibe Datenpunkte in ioBroker",
        "topic": "",
        "ack": "true",
        "autoCreate": "true",
        "stateName": "",
        "role": "",
        "payloadType": "",
        "readonly": "",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 880,
        "y": 200,
        "wires": []
    },
    {
        "id": "44d9370861f0a79a",
        "type": "function",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "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": 560,
        "y": 120,
        "wires": [
            [
                "9fadcc36a22ec38b"
            ]
        ]
    },
    {
        "id": "33a162f31f850a9e",
        "type": "function",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "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": 530,
        "y": 160,
        "wires": [
            [
                "9fadcc36a22ec38b"
            ]
        ]
    },
    {
        "id": "f6c8fbdf638c04e8",
        "type": "function",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "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": 580,
        "y": 200,
        "wires": [
            [
                "9fadcc36a22ec38b"
            ]
        ]
    },
    {
        "id": "ce27f3362985a4d3",
        "type": "switch",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "name": "Verteiler",
        "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_fan1_speed",
                "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": 8,
        "x": 360,
        "y": 140,
        "wires": [
            [
                "89074ea56277b288"
            ],
            [
                "44d9370861f0a79a"
            ],
            [
                "33a162f31f850a9e"
            ],
            [
                "f6c8fbdf638c04e8"
            ],
            [
                "3eb26b7322587c6b"
            ],
            [
                "01c35b9bb3921713"
            ],
            [
                "21081e6a23dc83a1"
            ],
            [
                "9fadcc36a22ec38b"
            ]
        ],
        "outputLabels": [
            "Cooling Fan Speed",
            "Heatbreak Fan Speed",
            "Stage Parser",
            "Speed Profile",
            "AUX Fan Speed",
            "Chamber Fan Speed",
            "remaining_time",
            ""
        ]
    },
    {
        "id": "89074ea56277b288",
        "type": "function",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "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": 550,
        "y": 80,
        "wires": [
            [
                "9fadcc36a22ec38b"
            ]
        ]
    },
    {
        "id": "01c35b9bb3921713",
        "type": "function",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "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": 580,
        "y": 280,
        "wires": [
            [
                "9fadcc36a22ec38b"
            ]
        ]
    },
    {
        "id": "3eb26b7322587c6b",
        "type": "function",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "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": 560,
        "y": 240,
        "wires": [
            [
                "9fadcc36a22ec38b"
            ]
        ]
    },
    {
        "id": "21081e6a23dc83a1",
        "type": "function",
        "z": "9582121ff81174a6",
        "g": "19ede36faf38f69b",
        "name": "remaining_time",
        "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": 540,
        "y": 320,
        "wires": [
            [
                "9fadcc36a22ec38b"
            ]
        ]
    },
    {
        "id": "cd5f62e24a3e846f",
        "type": "function",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "erstelle Jarvis Benachrichtigung",
        "func": "var jarvisNotify = {};\n//Beispiele\njarvisNotify.title = \"Abschalten nicht möglich\";\njarvisNotify.caption = \"\"; // wird unter dem Titel angezeigt\njarvisNotify.message = '<b>Ich drucke gerade, die Steckdose abzuschalten wäre eine blöde Idee!</b>';\n// Alternative Möglichkeiten\n//jarvisNotify.message= '<img src=\"http://192.168.178.89/download/Weltkarte.jpg\" height=\"auto\" width=\"100%\"></img>'; //Klappt, wird komplett angezeigt\n//jarvisNotify.message= '<iFrame src=\"http://192.168.178.89/download/Weltkarte.jpg\" height=\"auto\" width=\"100%\"></iFrame>'; //Klappt nicht, nur Teil wird angezeigt\n//jarvisNotify.message= getState('0_userdata.0.jarvis.pollenflug.Html').val;\n//jarvisNotify.message= getState('0_userdata.0.Html.HTML').val;\n//jarvisNotify.state = \"unread\";          //Damit bleibt die Benachrichtigung auch nach POPUP ungelesen und wird oben angezeigt mit der Zahl\njarvisNotify.criticality = \"error\";      // error,warning,info,success\njarvisNotify.display = \"popup\";          //drawer,snackbar,popup, none für focusTab\njarvisNotify.timeout = 10000;  //10000ms -> 10 Sekunden\n//jarvisNotify.timeout = 15000;  //5000ms -> 5 Sekunden\n//jarvisNotify.spinner= false; // drehender dreiViertel Kreis\njarvisNotify.progress = true;\njarvisNotify.position = \"top-left\";\njarvisNotify.icon = \"ic:outline-error\"; //mdi Iconify battery-alert-variant-outline\njarvisNotify.iconColor = \"white\";\njarvisNotify.color = \"red\";\njarvisNotify.textColor = \"white\";\nmsg.payload = JSON.stringify(jarvisNotify);\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 710,
        "y": 540,
        "wires": [
            [
                "964df5b70be104e6"
            ]
        ]
    },
    {
        "id": "964df5b70be104e6",
        "type": "ioBroker out",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Datenpunkt Jarvis Benachrichtigung",
        "topic": "jarvis.0.addNotification",
        "ack": "false",
        "autoCreate": "false",
        "stateName": "",
        "role": "",
        "payloadType": "",
        "readonly": "",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 1030,
        "y": 540,
        "wires": []
    },
    {
        "id": "ebace1619b2a4e15",
        "type": "switch",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "> oder < als 1",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "gt",
                "v": "1",
                "vt": "str"
            },
            {
                "t": "lt",
                "v": "1",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 440,
        "y": 540,
        "wires": [
            [
                "cd5f62e24a3e846f",
                "72cb87b2b06c4f05"
            ],
            [
                "aeb883c176549af3"
            ]
        ],
        "outputLabels": [
            "Druck aktiv",
            "Druck nicht aktiv"
        ]
    },
    {
        "id": "3143caf661f13237",
        "type": "ioBroker get",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "heatbreak_fan_speed",
        "topic": "0_userdata.0.X1C.print.heatbreak_fan_speed",
        "attrname": "payload",
        "payloadType": "value",
        "errOnInvalidState": "nothing",
        "x": 220,
        "y": 540,
        "wires": [
            [
                "ebace1619b2a4e15"
            ]
        ]
    },
    {
        "id": "aeb883c176549af3",
        "type": "change",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "setze msg.payload auf false",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 700,
        "y": 580,
        "wires": [
            [
                "4ce8104a4e434a82"
            ]
        ]
    },
    {
        "id": "f683e53accbca89f",
        "type": "ioBroker in",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Schalter in Dashboard (Steckdose Drucker)",
        "topic": "0_userdata.0.X1C.Steckdose-Steuerung",
        "payloadType": "value",
        "onlyack": "",
        "func": "all",
        "gap": "",
        "fireOnStart": "false",
        "outFormat": "MQTT",
        "x": 280,
        "y": 460,
        "wires": [
            [
                "cff0b21c459cab43"
            ]
        ]
    },
    {
        "id": "cff0b21c459cab43",
        "type": "switch",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "TRUE oder FALSE?",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            },
            {
                "t": "false"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 220,
        "y": 500,
        "wires": [
            [
                "4ce8104a4e434a82"
            ],
            [
                "3143caf661f13237"
            ]
        ]
    },
    {
        "id": "64fa2ca669c5a78d",
        "type": "ioBroker out",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Schalter in Dashboard (Steckdose Drucker)",
        "topic": "0_userdata.0.X1C.Steckdose-Steuerung",
        "ack": "false",
        "autoCreate": "true",
        "stateName": "",
        "role": "",
        "payloadType": "boolean",
        "readonly": "false",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 1090,
        "y": 480,
        "wires": []
    },
    {
        "id": "72cb87b2b06c4f05",
        "type": "change",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "setze msg.payload auf true",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "true",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 700,
        "y": 460,
        "wires": [
            [
                "64fa2ca669c5a78d"
            ]
        ]
    },
    {
        "id": "b5c862f5d50c56cb",
        "type": "switch",
        "z": "9582121ff81174a6",
        "g": "4380d7035264bead",
        "name": "FALSE oder nicht?",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "false"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 1230,
        "y": 160,
        "wires": [
            [
                "144c29803a38e2a4"
            ],
            [
                "2e71b198fe06ccdb"
            ]
        ]
    },
    {
        "id": "2e71b198fe06ccdb",
        "type": "change",
        "z": "9582121ff81174a6",
        "g": "4380d7035264bead",
        "name": "setze msg.payload auf online",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "online",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1260,
        "y": 240,
        "wires": [
            [
                "3a131237a7bdec9d"
            ]
        ]
    },
    {
        "id": "144c29803a38e2a4",
        "type": "change",
        "z": "9582121ff81174a6",
        "g": "4380d7035264bead",
        "name": "setze msg.payload auf offline",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "offline",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1260,
        "y": 200,
        "wires": [
            [
                "3a131237a7bdec9d"
            ]
        ]
    },
    {
        "id": "4ce8104a4e434a82",
        "type": "ioBroker out",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Datenpunkt Steckdose Drucker An/AUS",
        "topic": "alias.0.Buero.3D-Drucker.SET",
        "ack": "false",
        "autoCreate": "false",
        "stateName": "",
        "role": "",
        "payloadType": "",
        "readonly": "",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 740,
        "y": 500,
        "wires": []
    },
    {
        "id": "3a131237a7bdec9d",
        "type": "ioBroker out",
        "z": "9582121ff81174a6",
        "g": "4380d7035264bead",
        "name": "Datenpunkt Verbindungsstatus des Druckers",
        "topic": "0_userdata.0.X1C.Verbindungsstatus",
        "ack": "false",
        "autoCreate": "true",
        "stateName": "",
        "role": "",
        "payloadType": "string",
        "readonly": "false",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 1290,
        "y": 280,
        "wires": []
    },
    {
        "id": "e0079711246b60b0",
        "type": "comment",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Abschalten verhindern, wenn Heatbreak_Fan_Speed über 1 (Düse ist heiß)",
        "info": "",
        "x": 380,
        "y": 420,
        "wires": []
    },
    {
        "id": "1d943caf9a8bc0f6",
        "type": "ioBroker get",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Schalter im Dashboard (Steckdose automatisch abschalten)",
        "topic": "0_userdata.0.X1C.automatisch_abschalten",
        "attrname": "payload",
        "payloadType": "value",
        "errOnInvalidState": "nothing",
        "x": 340,
        "y": 720,
        "wires": [
            [
                "c8abbf4d53a09ffe"
            ]
        ]
    },
    {
        "id": "ff01d8a59e17dc93",
        "type": "inject",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "alle 10 Min. TRUE senden",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "600",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 240,
        "y": 820,
        "wires": [
            [
                "1d943caf9a8bc0f6"
            ]
        ]
    },
    {
        "id": "c8abbf4d53a09ffe",
        "type": "switch",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "TRUE?",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 180,
        "y": 760,
        "wires": [
            [
                "c5c06330d2e576f6"
            ]
        ]
    },
    {
        "id": "f97a028e21d51bfb",
        "type": "switch",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "> oder < als 1",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "gt",
                "v": "1",
                "vt": "str"
            },
            {
                "t": "lt",
                "v": "1",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 560,
        "y": 760,
        "wires": [
            [],
            [
                "cac765606601d65c"
            ]
        ],
        "outputLabels": [
            "Druck aktiv",
            "Druck nicht aktiv"
        ]
    },
    {
        "id": "c5c06330d2e576f6",
        "type": "ioBroker get",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "heatbreak_fan_speed",
        "topic": "0_userdata.0.X1C.print.heatbreak_fan_speed",
        "attrname": "payload",
        "payloadType": "value",
        "errOnInvalidState": "nothing",
        "x": 360,
        "y": 760,
        "wires": [
            [
                "f97a028e21d51bfb"
            ]
        ]
    },
    {
        "id": "cac765606601d65c",
        "type": "change",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "setze msg.payload auf false",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 780,
        "y": 760,
        "wires": [
            [
                "ae46dbed7e5925ae",
                "445ce2a0ad0a534a",
                "0c5048b46f072d52"
            ]
        ]
    },
    {
        "id": "ae46dbed7e5925ae",
        "type": "ioBroker out",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Datenpunkt Steckdose Drucker An/AUS",
        "topic": "alias.0.Buero.3D-Drucker.SET",
        "ack": "false",
        "autoCreate": "false",
        "stateName": "",
        "role": "",
        "payloadType": "",
        "readonly": "",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 1120,
        "y": 720,
        "wires": []
    },
    {
        "id": "445ce2a0ad0a534a",
        "type": "ioBroker out",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Schalter im Dashboard (Steckdose automatisch abschalten)",
        "topic": "0_userdata.0.X1C.automatisch_abschalten",
        "ack": "false",
        "autoCreate": "true",
        "stateName": "",
        "role": "",
        "payloadType": "boolean",
        "readonly": "false",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 1180,
        "y": 800,
        "wires": []
    },
    {
        "id": "79d8f512af50dd04",
        "type": "comment",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "automatisch Abschalten nach Druck",
        "info": "",
        "x": 260,
        "y": 680,
        "wires": []
    },
    {
        "id": "0c5048b46f072d52",
        "type": "ioBroker out",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "Schalter in Dashboard (Steckdose Drucker)",
        "topic": "0_userdata.0.X1C.Steckdose-Steuerung",
        "ack": "false",
        "autoCreate": "true",
        "stateName": "",
        "role": "",
        "payloadType": "boolean",
        "readonly": "false",
        "stateUnit": "",
        "stateMin": "",
        "stateMax": "",
        "x": 1130,
        "y": 760,
        "wires": []
    },
    {
        "id": "5c0e9eddf913e64d",
        "type": "inject",
        "z": "9582121ff81174a6",
        "g": "c3f9f96853c3f09c",
        "name": "nur zum Testen",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 1180,
        "y": 420,
        "wires": [
            [
                "4ce8104a4e434a82"
            ]
        ]
    },
    {
        "id": "d2a5ed4e2b8c8674",
        "type": "ping",
        "z": "9582121ff81174a6",
        "g": "4380d7035264bead",
        "protocol": "IPv4",
        "mode": "timed",
        "name": "Ping IP des Druckers",
        "host": "192.168.0.111",
        "timer": "60",
        "inputs": 0,
        "x": 1200,
        "y": 120,
        "wires": [
            [
                "b5c862f5d50c56cb"
            ]
        ]
    },
    {
        "id": "84f61d394ba2ab34",
        "type": "mqtt-broker",
        "name": "Bambu X1C MQTT Bambu_X1C",
        "broker": "IP_Deines_Druckers",
        "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": ""
    }
]