[
{
"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": "cc71f2a3c31e469f",
"type": "subflow:6e802f1553b18149",
"z": "7e6af0015415146d",
"name": "",
"env": [
{
"name": "top",
"value": "CerboGX",
"type": "str"
}
],
"x": 590,
"y": 240,
"wires": [
[
"39cec3f78c2741c5"
]
]
},
{
"id": "39cec3f78c2741c5",
"type": "ioBroker out",
"z": "7e6af0015415146d",
"d": true,
"name": "",
"topic": "",
"ack": "true",
"autoCreate": "true",
"stateName": "",
"role": "",
"payloadType": "",
"readonly": "",
"stateUnit": "",
"stateMin": "",
"stateMax": "",
"x": 820,
"y": 240,
"wires": []
}
]