NEWS
Gelöst: Wert in dynamische Struktur im ioBroker ablegen
-
Ich finde gerade keine Lösung für das o.g. Problem.
Ziel:
Ich möchte Datenstrukturen in eine dynamische Struktur im Objektbaum vom ioBroker ablegen. Die Struktur soll wie folgt aussehen:0_userdata.0.Test1.Test2."Jahr"."Monat".Test3
also z.B.
0_userdata.0.Test1.Test2.2025.Februar.Test3Test3 ist der abzulegende Datenpunkt.
Ich kann mit den String "Jahr.Monat" über die $moment-Bibliothek zusammen bauen. Mein Problem ist nun, diese Info an iobroker-out zu übergeben.
Anbei mein Test Flow:
[ { "id": "8822fc4aa38c0a6f", "type": "inject", "z": "d8a979736ad549a1", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "10", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 170, "y": 160, "wires": [ [ "2e1ea06b2e94bf1a" ] ] }, { "id": "2e1ea06b2e94bf1a", "type": "change", "z": "d8a979736ad549a1", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "$moment().locale('de').format('YYYY.MMMM')", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 350, "y": 160, "wires": [ [ "0e8de9437c3c420a" ] ] }, { "id": "0e8de9437c3c420a", "type": "change", "z": "d8a979736ad549a1", "name": "März zu Maerz", "rules": [ { "t": "change", "p": "payload", "pt": "msg", "from": "März", "fromt": "str", "to": "Maerz", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 560, "y": 160, "wires": [ [ "fc37f5f9d2b0297b" ] ] }, { "id": "fc37f5f9d2b0297b", "type": "change", "z": "d8a979736ad549a1", "name": "", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 780, "y": 160, "wires": [ [ "e4826cebe9af4d64" ] ] }, { "id": "e4826cebe9af4d64", "type": "debug", "z": "d8a979736ad549a1", "name": "debug 26", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 800, "y": 80, "wires": [] }, { "id": "b34e855ab239acc1", "type": "ioBroker out", "z": "d8a979736ad549a1", "name": "", "topic": "", "ack": "true", "autoCreate": "true", "stateName": "zuluft-neu", "role": "state", "payloadType": "", "readonly": "", "stateUnit": "°C", "stateMin": "", "stateMax": "", "x": 820, "y": 300, "wires": [] }, { "id": "1bf960b96de7a57f", "type": "mqtt in", "z": "d8a979736ad549a1", "name": "Vitovent ZuluftTemp", "topic": "vitocal/ZuluftTemp", "qos": "0", "datatype": "auto-detect", "broker": "bcf16446273a18e6", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 190, "y": 300, "wires": [ [] ] }, { "id": "bcf16446273a18e6", "type": "mqtt-broker", "name": "Mosquito", "broker": "192.168.178.10", "port": 1883, "clientid": "", "autoConnect": true, "usetls": false, "protocolVersion": 4, "keepalive": 60, "cleansession": true, "autoUnsubscribe": true, "birthTopic": "", "birthQos": "0", "birthRetain": "false", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closeRetain": "false", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willRetain": "false", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "" } ]
Der Input sieht so aus:
6.2.2025, 09:24:57node: debug 27 vitocal/ZuluftTemp : msg.payload : number 19.6
Edit:
Hier das Bild von meinem Versuch:
-
@martybr sagte in Wert in dynamische Struktur im ioBroker ablegen:
0_userdata.0.Test1.Test2.
Na Du musst halt nur zum Schluss das topic als vollständigen Pfad zusammensetzen bevor Du das topic in die iobroker-Out Node schickst:
Ich würde Dir aber empfehlen - nicht payload für die Erstellung des Datums zu nehmen, da Du Dir sonst Deine originale payload überschreibst.
-
@mickym Hier mal ein vollständiger Vorschlag - das mit dem Intervall finde ich quatsch - ich würde halt den Wert triggern lassen und wie gesagt mit der payload - die enthält Deine Originaldaten.
Hier mal der vollständig Flowvorschlag:
und hier der Import:
-
@mickym
Ah, jetzt habe ich es verstanden. Du legst am Anfang eine neue msg.datum an und konsolidierst dort die Werte. Und dann schreibst du den Wert als msg.topicVielen Dank.
Jetzt versuche ich verschiedene Werte in ein json zu speichern. Diese Werte kommen nicht gleichzeitig. Soll ich dafür den join Node nehmen?
Ich setze nachher hier ein Beispiel rein.
-
@mickym
Ich die drei Change-Nodes als Subflows abgespeichert, das macht es übersichtlicher.
-
@martybr sagte in Wert in dynamische Struktur im ioBroker ablegen:
Jetzt versuche ich verschiedene Werte in ein json zu speichern. Diese Werte kommen nicht gleichzeitig. Soll ich dafür den join Node nehmen?
Ja dafür ist die gedacht - die speichert die Werte zwischen. Du kannst das so definieren, dass die topics der Einzelwerte - Eigenschaften (keys) des Objektes sind.
-
@martybr Na im subflow musst halt den letzten Teil des topics variabel halten. Entweder in dem Du das Originaltopic nimmst oder Du eine Variable im Subflow definierst.
-
@martybr sagte in Wert in dynamische Struktur im ioBroker ablegen:
@mickym
Ich die drei Change-Nodes als Subflows abgespeichert, das macht es übersichtlicher.
Na im subflow musst halt den letzten Teil des topics variabel halten. Entweder in dem Du das Originaltopic nimmst oder Du eine Variable im Subflow definierst.
-
@mickym
Das habe ich auch gerade bemerkt. Ich kann natürlich den Subflow bearbeiten, aber die Änderung wird wieder in den Subflow zurückgeschrieben.
Wie setzt man hier am besten eine Variable? -
@martybr Also am elegantesten ist das Originaltopic zu nehmen - so würde ich das machen.
Variabel:
-
Name des Datenpunkts nimmt das Originaltopic (schau, dass es nur ein Wort ist und ggf. entsprechend setzen)
Wie gezeigt -
Basispfad variabel im Subflow definiert
Den Basispfad nehme ich aus der Subflow Node - den kann man vorbelegen oder leer lassen - das ist dann der 2. Teil.
Somit ergibt sich das topic aus
4 Komponenten:
- Konstanter String: "0_userdata.0." (pink)
- Basispfad aus Subflow Node (gelb)
- Datum (hellblau)
- Originaltopic (grün)
Hier zum Import:
-
-
@mickym
Ich habe es mal so gemacht:
[ { "id": "7e0364b0b8f9043e", "type": "mqtt in", "z": "71de45f27137890c", "name": "Vitovent ZuluftTemp", "topic": "vitocal/ZuluftTemp", "qos": "0", "datatype": "auto-detect", "broker": "bf311140.13d2b8", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 110, "y": 80, "wires": [ [ "f9c4e37a0e08b272" ] ] }, { "id": "f9c4e37a0e08b272", "type": "change", "z": "71de45f27137890c", "name": "", "rules": [ { "t": "set", "p": "datum", "pt": "msg", "to": "$moment().locale('de').format('YYYY.MMMM')", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 330, "y": 80, "wires": [ [ "4b7e157254dd9a42" ] ] }, { "id": "4b7e157254dd9a42", "type": "change", "z": "71de45f27137890c", "name": "März zu Maerz", "rules": [ { "t": "change", "p": "datum", "pt": "msg", "from": "März", "fromt": "str", "to": "Maerz", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 540, "y": 80, "wires": [ [ "db5352ef5569bd02" ] ] }, { "id": "db5352ef5569bd02", "type": "change", "z": "71de45f27137890c", "name": "", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "\"0_userdata.0.Test1.Test2.\" & datum & \".\"", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 740, "y": 80, "wires": [ [ "5f919db0295bc25c", "9795ea0c497cd9c7" ] ] }, { "id": "5f919db0295bc25c", "type": "debug", "z": "71de45f27137890c", "name": "topic", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 730, "y": 20, "wires": [] }, { "id": "9795ea0c497cd9c7", "type": "change", "z": "71de45f27137890c", "name": "Variable", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "topic & \"zuluft-ganzneu\"", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 920, "y": 80, "wires": [ [ "f0dd9b6950d71727", "5ce63ee6255c1fd2" ] ] }, { "id": "5ce63ee6255c1fd2", "type": "debug", "z": "71de45f27137890c", "name": "topic2", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 1110, "y": 20, "wires": [] }, { "id": "f0dd9b6950d71727", "type": "ioBroker out", "z": "71de45f27137890c", "name": "", "topic": "", "ack": "true", "autoCreate": "true", "stateName": "zuluft-neu", "role": "state", "payloadType": "", "readonly": "", "stateUnit": "°C", "stateMin": "", "stateMax": "", "x": 1140, "y": 80, "wires": [] }, { "id": "bf311140.13d2b8", "type": "mqtt-broker", "name": "Mosquito-Server", "broker": "192.168.178.10", "port": "1883", "clientid": "", "autoConnect": true, "usetls": false, "compatmode": false, "protocolVersion": "4", "keepalive": "60", "cleansession": true, "autoUnsubscribe": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "" } ]
Die würde dann die ersten drei Chane Nodes in den Subflow speichern.
Besteht eine Möglichkeit, den Change Node Variable irgendwo nachvollziehbar abzulegen? -
@martybr Ich habe Dir doch gerade einen neuen Subflow geschickt - schau Dir den lieber mal an - das was Du gemacht hast, das funktioniert nicht. - Wie gesagt ich habe jetzt das Originaltopic genommen und einen variablen Basispfad über eine Variable, um es Dir zu zeigen. Du kannst natürlich auch noch weitere Variablen im Subflow nutzen - aber wie gesagt, das Originaltopic ist besser - weil Du dann auch mit EINER Subflow-Node viele Datenpunkte schreiben kannst.
-
@mickym
Habe ich zu spät gesehen. Dein Flow funktioniert perfekt, ich habe nur einen Change nach dem MQTT gesetzt, da dieser einen hierarchischen DP erzeugt (..virocal/zuluft)Nun funktioniert es perfekt. Vielen Dank. Jetzt habe ich das System der Variablen verstanden. Ich muss mir trotzdem das Konzept hinter env(basePath) anschauen.
Hier mein/unser Ergebnis:
[ { "id": "ae673cf6cd8433a0", "type": "subflow", "name": "Datum in Topic", "info": "", "category": "", "in": [ { "x": 60, "y": 80, "wires": [ { "id": "2e1ea06b2e94bf1a" } ] } ], "out": [ { "x": 820, "y": 80, "wires": [ { "id": "fc37f5f9d2b0297b", "port": 0 } ] } ], "env": [ { "name": "basePath", "type": "str", "value": "Test1.Test2" } ], "meta": {}, "color": "#DDAA99" }, { "id": "2e1ea06b2e94bf1a", "type": "change", "z": "ae673cf6cd8433a0", "name": "", "rules": [ { "t": "set", "p": "datum", "pt": "msg", "to": "$moment().locale('de').format('YYYY.MMMM')", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 230, "y": 80, "wires": [ [ "0e8de9437c3c420a" ] ] }, { "id": "0e8de9437c3c420a", "type": "change", "z": "ae673cf6cd8433a0", "name": "März zu Maerz", "rules": [ { "t": "change", "p": "datum", "pt": "msg", "from": "März", "fromt": "str", "to": "Maerz", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 440, "y": 80, "wires": [ [ "fc37f5f9d2b0297b" ] ] }, { "id": "fc37f5f9d2b0297b", "type": "change", "z": "ae673cf6cd8433a0", "name": "", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "\"0_userdata.0.\" & $env(\"basePath\") & \".\" & datum & \".\" & topic", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 660, "y": 80, "wires": [ [] ] }, { "id": "71de45f27137890c", "type": "tab", "label": "Datum", "disabled": false, "info": "", "env": [] }, { "id": "f0dd9b6950d71727", "type": "ioBroker out", "z": "71de45f27137890c", "name": "", "topic": "", "ack": "true", "autoCreate": "true", "stateName": "zuluft-neu", "role": "state", "payloadType": "", "readonly": "", "stateUnit": "°C", "stateMin": "", "stateMax": "", "x": 720, "y": 80, "wires": [] }, { "id": "7e0364b0b8f9043e", "type": "mqtt in", "z": "71de45f27137890c", "name": "Vitovent ZuluftTemp", "topic": "vitocal/ZuluftTemp", "qos": "0", "datatype": "auto-detect", "broker": "bf311140.13d2b8", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 110, "y": 80, "wires": [ [ "90912a5dffeb17cc" ] ] }, { "id": "e4826cebe9af4d64", "type": "debug", "z": "71de45f27137890c", "name": "payload und topic", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 510, "y": 20, "wires": [] }, { "id": "5267d5edc8abe331", "type": "subflow:ae673cf6cd8433a0", "z": "71de45f27137890c", "name": "Datum in Topic", "env": [ { "name": "basePath", "value": "Test1.Test5", "type": "str" } ], "x": 520, "y": 80, "wires": [ [ "e4826cebe9af4d64", "f0dd9b6950d71727" ] ] }, { "id": "90912a5dffeb17cc", "type": "change", "z": "71de45f27137890c", "name": "", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "Zuluft-Temp", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 320, "y": 80, "wires": [ [ "5267d5edc8abe331", "527e1cef1285c117" ] ] }, { "id": "527e1cef1285c117", "type": "debug", "z": "71de45f27137890c", "name": "payload und topic", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 270, "y": 20, "wires": [] }, { "id": "bf311140.13d2b8", "type": "mqtt-broker", "name": "Mosquito-Server", "broker": "192.168.178.10", "port": "1883", "clientid": "", "autoConnect": true, "usetls": false, "compatmode": false, "protocolVersion": "4", "keepalive": "60", "cleansession": true, "autoUnsubscribe": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "" } ]
-
@martybr sagte in Wert in dynamische Struktur im ioBroker ablegen:
Jetzt habe ich das System der Variablen verstanden. Ich muss mir trotzdem das Konzept hinter env(basePath) anschauen.
Wie gesagt - hast Du ja super gemacht - kannst Du nun mit dem topic mehrere datenpunkte und oder sogar Hierarchien erzeugen.
So habe ich ja auch meinen Subflow erzeugt mit dem Du ganze JSONS oder Bäume in iobroker Einzelwerte zerlegen kannst.
Die Variablen in einer Subflow - gelten nur für diese Instanz - so kannst Du also eine ganze Menge in einer Instanz eines Subflows parametrisieren.
Schau Dir mal meinen Subflow an, der JSONS oder ganze Bäume in Einzelwerte zerlegt:
https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen
-
@mickym
Jetzt bin auf den Geschmack gekommen. Ich habe jetzt versucht, einen JSON-Datenpunkt anzulegen. Das sieht auf dem ersten Blick auch gut aus. In kann aber im Objektbaum ioBroker die Daten nicht öffnen bzw. bearbeiten.Hier mal die Infos:
Datensatz:
Flow:
[ { "id": "ae673cf6cd8433a0", "type": "subflow", "name": "Datum in Topic", "info": "", "category": "", "in": [ { "x": 60, "y": 80, "wires": [ { "id": "2e1ea06b2e94bf1a" } ] } ], "out": [ { "x": 820, "y": 80, "wires": [ { "id": "fc37f5f9d2b0297b", "port": 0 } ] } ], "env": [ { "name": "basePath", "type": "str", "value": "Test1.Test2" } ], "meta": {}, "color": "#DDAA99" }, { "id": "2e1ea06b2e94bf1a", "type": "change", "z": "ae673cf6cd8433a0", "name": "", "rules": [ { "t": "set", "p": "datum", "pt": "msg", "to": "$moment().locale('de').format('YYYY.MMMM')", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 230, "y": 80, "wires": [ [ "0e8de9437c3c420a" ] ] }, { "id": "0e8de9437c3c420a", "type": "change", "z": "ae673cf6cd8433a0", "name": "März zu Maerz", "rules": [ { "t": "change", "p": "datum", "pt": "msg", "from": "März", "fromt": "str", "to": "Maerz", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 440, "y": 80, "wires": [ [ "fc37f5f9d2b0297b" ] ] }, { "id": "fc37f5f9d2b0297b", "type": "change", "z": "ae673cf6cd8433a0", "name": "", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "\"0_userdata.0.\" & $env(\"basePath\") & \".\" & datum & \".\" & topic", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 660, "y": 80, "wires": [ [] ] }, { "id": "fad92726ff7c3254", "type": "tab", "label": "JSON", "disabled": false, "info": "", "env": [] }, { "id": "29a754f2b7a96a31", "type": "mqtt in", "z": "fad92726ff7c3254", "name": "ZuluftTemp", "topic": "vitocal/ZuluftTemp", "qos": "0", "datatype": "auto-detect", "broker": "bf311140.13d2b8", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 100, "y": 120, "wires": [ [ "5026b4d763ed7dcc" ] ] }, { "id": "535565225c8e6f99", "type": "subflow:ae673cf6cd8433a0", "z": "fad92726ff7c3254", "name": "Datum in Topic", "env": [ { "name": "basePath", "value": "Test1.Test7", "type": "str" } ], "x": 780, "y": 180, "wires": [ [ "05ad3c7ae6fe582b", "9c9e217c842acefc" ] ] }, { "id": "05ad3c7ae6fe582b", "type": "ioBroker out", "z": "fad92726ff7c3254", "name": "", "topic": "", "ack": "true", "autoCreate": "true", "stateName": "zuluft-neu", "role": "state", "payloadType": "object", "readonly": "", "stateUnit": "°C", "stateMin": "", "stateMax": "", "x": 980, "y": 180, "wires": [] }, { "id": "5026b4d763ed7dcc", "type": "change", "z": "fad92726ff7c3254", "name": "Zuluft", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "Zuluft-Temp", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 310, "y": 120, "wires": [ [ "766be49e74305196" ] ] }, { "id": "a3c1535e1da94552", "type": "mqtt in", "z": "fad92726ff7c3254", "name": "AbluftTemp", "topic": "vitocal/AbluftTemp", "qos": "0", "datatype": "auto-detect", "broker": "bf311140.13d2b8", "nl": false, "rap": true, "rh": 0, "inputs": 0, "x": 110, "y": 240, "wires": [ [ "225419c87f910c3e" ] ] }, { "id": "225419c87f910c3e", "type": "change", "z": "fad92726ff7c3254", "name": "Abluft", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "Abluft-Temp", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 310, "y": 240, "wires": [ [ "766be49e74305196" ] ] }, { "id": "766be49e74305196", "type": "join", "z": "fad92726ff7c3254", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": true, "timeout": "60", "count": "2", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 430, "y": 180, "wires": [ [ "dd61fc92c8961b14", "457c8ae43cf33de1" ] ] }, { "id": "224380ff0709c559", "type": "json", "z": "fad92726ff7c3254", "name": "", "property": "payload", "action": "", "pretty": true, "x": 610, "y": 180, "wires": [ [ "c828c8f4b32a9c0c", "535565225c8e6f99" ] ] }, { "id": "dd61fc92c8961b14", "type": "debug", "z": "fad92726ff7c3254", "name": "debug 174", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 510, "y": 80, "wires": [] }, { "id": "c828c8f4b32a9c0c", "type": "debug", "z": "fad92726ff7c3254", "name": "debug 175", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 710, "y": 100, "wires": [] }, { "id": "9c9e217c842acefc", "type": "debug", "z": "fad92726ff7c3254", "name": "debug 176", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 950, "y": 100, "wires": [] }, { "id": "457c8ae43cf33de1", "type": "change", "z": "fad92726ff7c3254", "name": "", "rules": [ { "t": "set", "p": "topic", "pt": "msg", "to": "vitovent300", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 540, "y": 300, "wires": [ [ "224380ff0709c559", "f92533e2c4de9cf4" ] ] }, { "id": "f92533e2c4de9cf4", "type": "debug", "z": "fad92726ff7c3254", "name": "debug 177", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 730, "y": 360, "wires": [] }, { "id": "bf311140.13d2b8", "type": "mqtt-broker", "name": "Mosquito-Server", "broker": "192.168.178.10", "port": "1883", "clientid": "", "autoConnect": true, "usetls": false, "compatmode": false, "protocolVersion": "4", "keepalive": "60", "cleansession": true, "autoUnsubscribe": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "birthMsg": {}, "closeTopic": "", "closeQos": "0", "closePayload": "", "closeMsg": {}, "willTopic": "", "willQos": "0", "willPayload": "", "willMsg": {}, "userProps": "", "sessionExpiry": "" } ]
Müssen evtl eckige Klammern um den Jason gesetzt werden (also [json]?
-
@martybr Na den Datenpunkt hast Du wahrscheinlich schreibgeschützt angelegt - siehst Du doch an dem Schloss. Musst Du wahrscheinlich beschreibbar machen, in der iobroker-Out Node. Oder im Nachhinein in den Objekteigenschaften des Datenpunktes.
Ausserdem empfehle ich Dir - keinen Datentyp festzulegen - das macht die NOde selbst und wie gesagt musst Du es beschreibbar anlegen.
Ja und wie gesagt - Objekte muss man als Strings - also JSON Strings schreiben und auch wieder in Objekte wandeln.
iobroker kann nur Strings in den States verarbeiten. -
@martybr Es geht auch als Objekt zu öffnen - aber muss halt beschreibbar sein.
Und wenn Du es nicht als Objekt, sondern richtig als String festlegst (wie gesagt normalerweise legt man nichts fest, dann wird automatisch der richtige Typ festgelegt), dann macht er auch einen JSON daraus:
Grundsätzlich würde ich mir übrigens angewöhnen, die JSON Node immer direkt vor die Ausgabe in die iobroker-out -Node zu machen, damit man solange wie möglich mit Objekten arbeiten kann.
-
@mickym
Okay, setze ich um. -
@mickym
Funktioniert jetzt.
Hast du noch eine Idee wie ich die eckigen Klammern um den Datensatz setzen kann? Mit einem Change-Node? -
@martybr Eckige Klammern sind ein Array oder in Blockly Chargon eine Liste - Ja Du kannst einfach ein Array mit eckigen Klammern daraus machen - macht aber nur Sinn, wenn Du dann mehrere Objekte im Array hast.
Selbstverstöndlich kannst Du ein Objekt in ein Array stellen. Wenn Du aber mehrere Objekte in ein Array machen mächtest, dann nutze die $append Funktion.
Du solltest Dir angewöhnen - nie KLammern zu bezeichen, sondern was für Objekte Du erstellen möchtest.