[
{
"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": ""
}
]