[
{
"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": "change",
"p": "key",
"pt": "msg",
"from": ".",
"fromt": "str",
"to": "_",
"tot": "str"
},
{
"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": "3e7ed9c7e1462b09",
"type": "inject",
"z": "7e6af0015415146d",
"name": "AB & Filter",
"props": [
{
"p": "autobahn",
"v": "A7",
"vt": "str"
},
{
"p": "filter",
"v": "(coordinate.lat > 49.0 and coordinate.lat < 54.4) and (coordinate.long > 6.0 and coordinate.long < 10)",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 180,
"y": 7160,
"wires": [
[
"e9f4765fa483a48a"
]
]
},
{
"id": "e9f4765fa483a48a",
"type": "template",
"z": "7e6af0015415146d",
"name": "",
"field": "url",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "https://verkehr.autobahn.de/o/autobahn/{{autobahn}}/services/warning",
"output": "str",
"x": 320,
"y": 7160,
"wires": [
[
"4759ede23832569c",
"a73f68ca019bab89"
]
]
},
{
"id": "4759ede23832569c",
"type": "debug",
"z": "7e6af0015415146d",
"name": "url",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 510,
"y": 7100,
"wires": []
},
{
"id": "a73f68ca019bab89",
"type": "http request",
"z": "7e6af0015415146d",
"name": "",
"method": "GET",
"ret": "obj",
"paytoqs": "ignore",
"url": "",
"tls": "",
"persist": false,
"proxy": "",
"insecureHTTPParser": false,
"authType": "",
"senderr": false,
"headers": [],
"x": 490,
"y": 7160,
"wires": [
[
"8d7bc4d16a712bc4",
"e4e045e2d7b0f1f3"
]
]
},
{
"id": "8d7bc4d16a712bc4",
"type": "debug",
"z": "7e6af0015415146d",
"name": "JSON",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "true",
"targetType": "full",
"statusVal": "",
"statusType": "auto",
"x": 670,
"y": 7200,
"wires": []
},
{
"id": "e4e045e2d7b0f1f3",
"type": "change",
"z": "7e6af0015415146d",
"name": "Filter",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "payload.warning[$eval($$.filter)].{\t \"ID\": identifier, \"Titel\":title,\t \"Verzögerung\": (delayTimeValue ? delayTimeValue : \"0\") & \" Minuten\",\t \"Durchschnittsgeschwindigkeit\" : averageSpeed,\t \"Beginn\": description[0] ~> $substringAfter(\": \"),\t \"Ende\": description[1] ~> $substringAfter(\": \"),\t \"Beschreibung\": description#$i[$i in [3..$count(%.description)]] ~> $join(\" \")\t}[]",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 650,
"y": 7160,
"wires": [
[
"7b995bd410358394",
"37f05e634adffcfb"
]
]
},
{
"id": "7b995bd410358394",
"type": "change",
"z": "7e6af0015415146d",
"name": "Anzahl Warnungen",
"rules": [
{
"t": "set",
"p": "topic",
"pt": "msg",
"to": "\"0_userdata.0.Test.Autobahn.\" & autobahn & \".AnzahlWarnungen\"",
"tot": "jsonata"
},
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "$count(payload)",
"tot": "jsonata"
},
{
"t": "set",
"p": "top",
"pt": "msg",
"to": "\"0_userdata.0.Test.Autobahn.\" & autobahn & \".Warnungen\"",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 830,
"y": 7100,
"wires": [
[
"abf49b5aa9ca3e7e"
]
]
},
{
"id": "abf49b5aa9ca3e7e",
"type": "ioBroker out",
"z": "7e6af0015415146d",
"name": "",
"topic": "",
"ack": "true",
"autoCreate": "true",
"stateName": "",
"role": "",
"payloadType": "",
"readonly": "",
"stateUnit": "",
"stateMin": "",
"stateMax": "",
"x": 1040,
"y": 7100,
"wires": []
},
{
"id": "ccecbbc4a466efa8",
"type": "subflow:6e802f1553b18149",
"z": "7e6af0015415146d",
"name": "",
"x": 1170,
"y": 7160,
"wires": [
[
"a72e0e225946d210"
]
]
},
{
"id": "a72e0e225946d210",
"type": "ioBroker out",
"z": "7e6af0015415146d",
"name": "",
"topic": "",
"ack": "true",
"autoCreate": "true",
"stateName": "",
"role": "",
"payloadType": "",
"readonly": "",
"stateUnit": "",
"stateMin": "",
"stateMax": "",
"x": 1400,
"y": 7160,
"wires": []
},
{
"id": "df1966a24326d1f3",
"type": "debug",
"z": "7e6af0015415146d",
"name": "Ergebnisse",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1150,
"y": 7200,
"wires": []
},
{
"id": "ad94c8961362eb3c",
"type": "change",
"z": "7e6af0015415146d",
"name": "Top Tree",
"rules": [
{
"t": "set",
"p": "top",
"pt": "msg",
"to": "\"Test.Autobahn.\" & autobahn & \".Warnungen\"",
"tot": "jsonata"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 960,
"y": 7160,
"wires": [
[
"ccecbbc4a466efa8",
"df1966a24326d1f3"
]
]
},
{
"id": "37f05e634adffcfb",
"type": "switch",
"z": "7e6af0015415146d",
"name": "",
"property": "$count(payload)",
"propertyType": "jsonata",
"rules": [
{
"t": "gt",
"v": "0",
"vt": "num"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 810,
"y": 7160,
"wires": [
[
"ad94c8961362eb3c"
]
]
}
]