NEWS
NodeRed function node soll toipc übernehmen
-
Moin Moin,
f
ü
r MQTT ben
ö
tige ich ein kleines "function-Node".
Ich muss die Topic (gebe ich bei Name1 und Name2 als "msg.topic" mit) in der Ausgabe irgendwie in den unterstrichenen Bereich bekommen. Die Topic wird aber leider immer nur als extra Spalte angegeben. Was mache ich falsch?[{"id":"4450e5d7.0d18e4","type":"inject","z":"14474411.77103c","name":"Name1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Name1","payload":"13","payloadType":"num","x":90,"y":200,"wires":[["5116cd51.95a45c"]]}]bg Frank
-
Moin Moin,
f
ü
r MQTT ben
ö
tige ich ein kleines "function-Node".
Ich muss die Topic (gebe ich bei Name1 und Name2 als "msg.topic" mit) in der Ausgabe irgendwie in den unterstrichenen Bereich bekommen. Die Topic wird aber leider immer nur als extra Spalte angegeben. Was mache ich falsch?[{"id":"4450e5d7.0d18e4","type":"inject","z":"14474411.77103c","name":"Name1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Name1","payload":"13","payloadType":"num","x":90,"y":200,"wires":[["5116cd51.95a45c"]]}]bg Frank
@frank-traut Ich verstehe leider gar nichts . Dein Code enth
ä
lt eine Inject Node mit msg.topic und msg.payload und verstehe nicht was Du willst. Gibt nichts unterstrichenes. Und au
ß
erdem bezweifle ich dass Du eine function Node brauchst. Vielleicht versuchst Du es mal ausf
ü
hrlicher. -
@frank-traut Ich verstehe leider gar nichts . Dein Code enth
ä
lt eine Inject Node mit msg.topic und msg.payload und verstehe nicht was Du willst. Gibt nichts unterstrichenes. Und au
ß
erdem bezweifle ich dass Du eine function Node brauchst. Vielleicht versuchst Du es mal ausf
ü
hrlicher.Ach sorry, ich bin davon ausgegangen, dass ihr das Bild seht, dass ich nicht hochgeladen habe


Also ich muss irgedwie "msg.topic" vor dem Wert mit "Name1" bzw "Name2" ersetzen.
Quasi wie die Pfeile. -
Ach sorry, ich bin davon ausgegangen, dass ihr das Bild seht, dass ich nicht hochgeladen habe


Also ich muss irgedwie "msg.topic" vor dem Wert mit "Name1" bzw "Name2" ersetzen.
Quasi wie die Pfeile.@frank-traut Verstehe zwar nicht, warum Du das macht und wof
ü
r man da eine Function Node braucht - geschweige f
ü
r mqtt. Aber so wie es ausschaut willst Du ein Message Object in die payload schreiben. 13 steht in msg.payload.msg.topicWenn Du einen topic einfach als payload
ü
bernehmen willst - dann nimmt man eine Change Node. Was willst Du denn mit Deiner "Function" machen. Mach lieber einen anst
ä
ndigen Flow ohne Function Node. -
@frank-traut Verstehe zwar nicht, warum Du das macht und wof
ü
r man da eine Function Node braucht - geschweige f
ü
r mqtt. Aber so wie es ausschaut willst Du ein Message Object in die payload schreiben. 13 steht in msg.payload.msg.topicWenn Du einen topic einfach als payload
ü
bernehmen willst - dann nimmt man eine Change Node. Was willst Du denn mit Deiner "Function" machen. Mach lieber einen anst
ä
ndigen Flow ohne Function Node.@mickym

Der Converter brauche ich, damit die Daten in das Thingsboard laufen. Den Aufriss mache ich, damit die Ger
ä
te im Thingsboard richtig angelegt werden. Jetzt legt Thingsboard ein Ger
ä
t an mit dem Namen "hier muss das Topic....". Da m
ö
chte ich den Topic-Namen der Node drin haben. Dann hei
ß
t jedes Ger
ä
t automatisch richtig.
Wie kann ich das mit einer Change-Node machen?
bg -
@mickym

Der Converter brauche ich, damit die Daten in das Thingsboard laufen. Den Aufriss mache ich, damit die Ger
ä
te im Thingsboard richtig angelegt werden. Jetzt legt Thingsboard ein Ger
ä
t an mit dem Namen "hier muss das Topic....". Da m
ö
chte ich den Topic-Namen der Node drin haben. Dann hei
ß
t jedes Ger
ä
t automatisch richtig.
Wie kann ich das mit einer Change-Node machen?
bg@frank-traut Setze in der ChangeNode - msg.payload auf msg.topic. Wenn Du das noch mit einem String oder der alten payload anh
ä
ngen m
ö
chtest dann sieht das so aus:
-
@frank-traut Setze in der ChangeNode - msg.payload auf msg.topic. Wenn Du das noch mit einem String oder der alten payload anh
ä
ngen m
ö
chtest dann sieht das so aus:

Knapp daneben. Jetzt steht der Name mit in dem Wert. -

Knapp daneben. Jetzt steht der Name mit in dem Wert.@frank-traut War das eine Frage? Was macht die Function Node noch? Wie sieht es in der Change NOde aus? Was willst Du erreichen - einen JSON String zu schreiben? Du willst die Keys programmatisch erzeugen?
-
@frank-traut War das eine Frage? Was macht die Function Node noch? Wie sieht es in der Change NOde aus? Was willst Du erreichen - einen JSON String zu schreiben? Du willst die Keys programmatisch erzeugen?
@mickym

Links haben ich viele Ger
ä
te. Alles geben unterschiedliche Werte aus und haben unterscheidliche Namen.
Dann gehen die Werte auf die Funtion node und dann in die iot.
Was die Funtion-note noch macht, wei
ß
t ich nicht. Ohne geht es aber nicht.
Die Werte m
ü
ssen dann wie beschireben aus der Funktion in das MQTT-In Node laufen. Nur so werden die Werte richtig zugeordnet und k
ö
nnen im Thingsboard verwendet werden. -
@mickym

Links haben ich viele Ger
ä
te. Alles geben unterschiedliche Werte aus und haben unterscheidliche Namen.
Dann gehen die Werte auf die Funtion node und dann in die iot.
Was die Funtion-note noch macht, wei
ß
t ich nicht. Ohne geht es aber nicht.
Die Werte m
ü
ssen dann wie beschireben aus der Funktion in das MQTT-In Node laufen. Nur so werden die Werte richtig zugeordnet und k
ö
nnen im Thingsboard verwendet werden.@frank-traut So mein Ansatz w
ä
re ein komplett anderer.Mach mal in Deine Inject Nodes unter msg.topic wie das sp
ä
ter wirklich reinkommt und ein Beispielwert - dann gibst Du alles in eine JOIN Node und wandelst es vielleicht noch in einen JSON String um.Ich zeigs Dir mal anhand von 2 Inject Nodes.
-
@frank-traut So mein Ansatz w
ä
re ein komplett anderer.Mach mal in Deine Inject Nodes unter msg.topic wie das sp
ä
ter wirklich reinkommt und ein Beispielwert - dann gibst Du alles in eine JOIN Node und wandelst es vielleicht noch in einen JSON String um.Ich zeigs Dir mal anhand von 2 Inject Nodes.
Das klingt super

@mickym
so kommen die Werte rein. -
Das klingt super

@mickym
so kommen die Werte rein.@frank-traut Ganz ohne Programmieren - das was halt NodeRed kann.


Hier der Flow zum inportieren:
[ { "id": "31bdef5c.ed36e", "type": "inject", "z": "dce8fa20.2e93c8", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "Gerät1", "payload": "Ein Wert von Gerät 1", "payloadType": "str", "x": 1860, "y": 3040, "wires": [ [ "ba02a6fc.2c0998", "bc331dbc.1c7b9" ] ] }, { "id": "1e2a7c04.762824", "type": "inject", "z": "dce8fa20.2e93c8", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "Gerät2", "payload": "Ein Wert von Gerät 2", "payloadType": "str", "x": 1860, "y": 3100, "wires": [ [ "ba02a6fc.2c0998", "d116cd15.ec076" ] ] }, { "id": "ba02a6fc.2c0998", "type": "join", "z": "dce8fa20.2e93c8", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": true, "timeout": "", "count": "1", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 2140, "y": 3060, "wires": [ [ "66680e32.0877c", "f087dbc4.94a158" ] ] }, { "id": "bc331dbc.1c7b9", "type": "debug", "z": "dce8fa20.2e93c8", "name": "Input Gerät1", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 2160, "y": 2980, "wires": [] }, { "id": "d116cd15.ec076", "type": "debug", "z": "dce8fa20.2e93c8", "name": "Input Gerät2", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 2150, "y": 3140, "wires": [] }, { "id": "66680e32.0877c", "type": "debug", "z": "dce8fa20.2e93c8", "name": "Aufbau Objekt", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 2400, "y": 3140, "wires": [] }, { "id": "f087dbc4.94a158", "type": "json", "z": "dce8fa20.2e93c8", "name": "", "property": "payload", "action": "", "pretty": false, "x": 2370, "y": 3060, "wires": [ [ "fb6c9ca8.21775" ] ] }, { "id": "fb6c9ca8.21775", "type": "debug", "z": "dce8fa20.2e93c8", "name": "JSON String - MQTT", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 2620, "y": 3060, "wires": [] } ] -
Moin Moin,
f
ü
r MQTT ben
ö
tige ich ein kleines "function-Node".
Ich muss die Topic (gebe ich bei Name1 und Name2 als "msg.topic" mit) in der Ausgabe irgendwie in den unterstrichenen Bereich bekommen. Die Topic wird aber leider immer nur als extra Spalte angegeben. Was mache ich falsch?[{"id":"4450e5d7.0d18e4","type":"inject","z":"14474411.77103c","name":"Name1","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"Name1","payload":"13","payloadType":"num","x":90,"y":200,"wires":[["5116cd51.95a45c"]]}]bg Frank
@frank-traut sagte in NodeRed function node soll toipc
ü
bernehmen:Moin Moin,
f
ü
r MQTT ben
ö
tige ich ein kleines "function-Node".
Ich muss die Topic (gebe ich bei Name1 und Name2 als "msg.topic" mit) in der Ausgabe irgendwie in den unterstrichenen Bereich bekommen. Die Topic wird aber leider immer nur als extra Spalte angegeben. Was mache ich falsch?bg Frank
Funktioniert es oder brauchst Du immer noch eine Function Node?
-
@frank-traut sagte in NodeRed function node soll toipc
ü
bernehmen:Moin Moin,
f
ü
r MQTT ben
ö
tige ich ein kleines "function-Node".
Ich muss die Topic (gebe ich bei Name1 und Name2 als "msg.topic" mit) in der Ausgabe irgendwie in den unterstrichenen Bereich bekommen. Die Topic wird aber leider immer nur als extra Spalte angegeben. Was mache ich falsch?bg Frank
Funktioniert es oder brauchst Du immer noch eine Function Node?
@mickym Sahnem
ä
ß
ig! Kann man dir irgendwo nin Kaffee ausgeben? -
@mickym Sahnem
ä
ß
ig! Kann man dir irgendwo nin Kaffee ausgeben?@frank-traut sagte in NodeRed function node soll toipc
ü
bernehmen:@mickym Sahnem
ä
ß
ig! Kann man dir irgendwo nin Kaffee ausgeben?Passt scho.
Es freut mich ja selbst, wenn ich helfen konnte. Ich musste ja auch Lernen.Nur ein kleiner Tipp f
ü
r die Zukunft
:
Wenn Du Dir mal Dein Eingangsposting anschaust und was nun dabei rausgekommen ist. Manchmal ist es einfacher das Problem im Gro
ß
en zu schildern, dann kann man oft besser helfen, als wenn ich Dir nur beschreibe, wie Du eine payload aus unterschiedlichen Strings zusammensetzt und Du ja auch noch soviel anderes h
ä
ttes unn
ö
tigerweise programmieren m
ü
ssen. Es reicht ja nicht nur, dass Du diese Strings dann zusammengesetzt h
ä
ttest, sondern Du h
ä
ttest ja jedes Mal nach dem Key in Deinen Strings suchen m
ü
ssen, wenn sich der Wert ge
ä
ndert h
ä
tte.Da h
ä
ttest Du Dir Stunden und Tage Programmierarbeit aufgehalst, die die Node-Entwickler der JOIN Node bereits gemacht haben.Also viel Spa
ß
weiterhin mit NodeRed. Ich kann immer nur wieder sagen, ich liebe es inzwischen. 
-
@frank-traut sagte in NodeRed function node soll toipc
ü
bernehmen:@mickym Sahnem
ä
ß
ig! Kann man dir irgendwo nin Kaffee ausgeben?Passt scho.
Es freut mich ja selbst, wenn ich helfen konnte. Ich musste ja auch Lernen.Nur ein kleiner Tipp f
ü
r die Zukunft
:
Wenn Du Dir mal Dein Eingangsposting anschaust und was nun dabei rausgekommen ist. Manchmal ist es einfacher das Problem im Gro
ß
en zu schildern, dann kann man oft besser helfen, als wenn ich Dir nur beschreibe, wie Du eine payload aus unterschiedlichen Strings zusammensetzt und Du ja auch noch soviel anderes h
ä
ttes unn
ö
tigerweise programmieren m
ü
ssen. Es reicht ja nicht nur, dass Du diese Strings dann zusammengesetzt h
ä
ttest, sondern Du h
ä
ttest ja jedes Mal nach dem Key in Deinen Strings suchen m
ü
ssen, wenn sich der Wert ge
ä
ndert h
ä
tte.Da h
ä
ttest Du Dir Stunden und Tage Programmierarbeit aufgehalst, die die Node-Entwickler der JOIN Node bereits gemacht haben.Also viel Spa
ß
weiterhin mit NodeRed. Ich kann immer nur wieder sagen, ich liebe es inzwischen. 
@mickym Super! Werde ich mir zu Herzen nehmen!
-
@frank-traut sagte in NodeRed function node soll toipc
ü
bernehmen:@mickym Sahnem
ä
ß
ig! Kann man dir irgendwo nin Kaffee ausgeben?Passt scho.
Es freut mich ja selbst, wenn ich helfen konnte. Ich musste ja auch Lernen.Nur ein kleiner Tipp f
ü
r die Zukunft
:
Wenn Du Dir mal Dein Eingangsposting anschaust und was nun dabei rausgekommen ist. Manchmal ist es einfacher das Problem im Gro
ß
en zu schildern, dann kann man oft besser helfen, als wenn ich Dir nur beschreibe, wie Du eine payload aus unterschiedlichen Strings zusammensetzt und Du ja auch noch soviel anderes h
ä
ttes unn
ö
tigerweise programmieren m
ü
ssen. Es reicht ja nicht nur, dass Du diese Strings dann zusammengesetzt h
ä
ttest, sondern Du h
ä
ttest ja jedes Mal nach dem Key in Deinen Strings suchen m
ü
ssen, wenn sich der Wert ge
ä
ndert h
ä
tte.Da h
ä
ttest Du Dir Stunden und Tage Programmierarbeit aufgehalst, die die Node-Entwickler der JOIN Node bereits gemacht haben.Also viel Spa
ß
weiterhin mit NodeRed. Ich kann immer nur wieder sagen, ich liebe es inzwischen. 
@mickym
Hi, ich h
ä
tte da noch eine Sache.
Ich w
ü
rde gerne bei der Nachrichten einen Timestep nach folgender Vorgabe mitgeben:{"ts":1451649600512, "values":{"key1":"value1", "key2":"value2"}}
Quelle: https://thingsboard.io/docs/reference/mqtt-api/ (Telemetry upload API)Ich brauche also den "values"-Teil und den Timestep-Teil.
Mit einem Timestep und dem Join-node komme ich leider nicht weiter, weil ja der Timestep immer dann ausl
ö
sen muss, wenn Nachrichten reinkommen - Ich habe aber leider keinen festen Ausl
ö
spunkt.
Mein Subflow f
ü
r die
Ü
bertragung sieht jetzt so aus:[{"id":"bf4174a4.dbbe6","type":"subflow","name":"NodeRed->TB","info":"","category":"","in":[{"x":240,"y":220,"wires":[{"id":"5b19eba3.5f6444"}]}],"out":[{"x":840,"y":220,"wires":[{"id":"40eaa341.edd0d4","port":0}]}],"env":[],"color":"#DDAA99"},{"id":"5b19eba3.5f6444","type":"join","z":"bf4174a4.dbbe6","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"1","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":390,"y":220,"wires":[["48cab473.26637c","40eaa341.edd0d4"]]},{"id":"48cab473.26637c","type":"debug","z":"bf4174a4.dbbe6","name":"Aufbau Objekt","active":true,"tosidebar":false,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":540,"y":280,"wires":[]},{"id":"40eaa341.edd0d4","type":"json","z":"bf4174a4.dbbe6","name":"","property":"payload","action":"","pretty":false,"x":570,"y":220,"wires":[["c385db35.b5a488"]]},{"id":"c385db35.b5a488","type":"debug","z":"bf4174a4.dbbe6","name":"JSON String - MQTT","active":true,"tosidebar":false,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":560,"y":160,"wires":[]}]Hast du ne Idee? Der Subflow ist quasi genau dein Code.
bg -
@mickym
Hi, ich h
ä
tte da noch eine Sache.
Ich w
ü
rde gerne bei der Nachrichten einen Timestep nach folgender Vorgabe mitgeben:{"ts":1451649600512, "values":{"key1":"value1", "key2":"value2"}}
Quelle: https://thingsboard.io/docs/reference/mqtt-api/ (Telemetry upload API)Ich brauche also den "values"-Teil und den Timestep-Teil.
Mit einem Timestep und dem Join-node komme ich leider nicht weiter, weil ja der Timestep immer dann ausl
ö
sen muss, wenn Nachrichten reinkommen - Ich habe aber leider keinen festen Ausl
ö
spunkt.
Mein Subflow f
ü
r die
Ü
bertragung sieht jetzt so aus:[{"id":"bf4174a4.dbbe6","type":"subflow","name":"NodeRed->TB","info":"","category":"","in":[{"x":240,"y":220,"wires":[{"id":"5b19eba3.5f6444"}]}],"out":[{"x":840,"y":220,"wires":[{"id":"40eaa341.edd0d4","port":0}]}],"env":[],"color":"#DDAA99"},{"id":"5b19eba3.5f6444","type":"join","z":"bf4174a4.dbbe6","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"1","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":390,"y":220,"wires":[["48cab473.26637c","40eaa341.edd0d4"]]},{"id":"48cab473.26637c","type":"debug","z":"bf4174a4.dbbe6","name":"Aufbau Objekt","active":true,"tosidebar":false,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":540,"y":280,"wires":[]},{"id":"40eaa341.edd0d4","type":"json","z":"bf4174a4.dbbe6","name":"","property":"payload","action":"","pretty":false,"x":570,"y":220,"wires":[["c385db35.b5a488"]]},{"id":"c385db35.b5a488","type":"debug","z":"bf4174a4.dbbe6","name":"JSON String - MQTT","active":true,"tosidebar":false,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":560,"y":160,"wires":[]}]Hast du ne Idee? Der Subflow ist quasi genau dein Code.
bg@frank-traut Ehrlich gesagt im ersten Moment verstand ich nur Bahnhof. Du hast mir jedenfalls alles andere als "meinen Subflow" gepostet.
Inzwischen hoffe ich aber, einfach Deine Anforderung umgesetzt zu haben. 
Also hier mein urspr
ü
nglicher Flow mit dem Timestamp erg
ä
nzt.[ { "id": "cc5a699c.5b95e8", "type": "inject", "z": "2821dd31.a0dd62", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "key1", "payload": "value1", "payloadType": "str", "x": 510, "y": 1580, "wires": [ [ "535efea7.5d7d2" ] ] }, { "id": "cc5cf91d.e86dd8", "type": "inject", "z": "2821dd31.a0dd62", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "key2", "payload": "value2", "payloadType": "str", "x": 510, "y": 1640, "wires": [ [ "535efea7.5d7d2" ] ] }, { "id": "535efea7.5d7d2", "type": "join", "z": "2821dd31.a0dd62", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": true, "timeout": "", "count": "1", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 700, "y": 1600, "wires": [ [ "a78ff8d6.108498" ] ] }, { "id": "ccbb833c.4dcc7", "type": "debug", "z": "2821dd31.a0dd62", "name": "JSON String - MQTT", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 1360, "y": 1600, "wires": [] }, { "id": "a78ff8d6.108498", "type": "change", "z": "2821dd31.a0dd62", "name": "Timestamp setzen und Objekt bilden", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "values", "tot": "msg" }, { "t": "set", "p": "payload.ts", "pt": "msg", "to": "", "tot": "date" }, { "t": "move", "p": "values", "pt": "msg", "to": "payload.values", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 950, "y": 1600, "wires": [ [ "5ef66e6c.2549f" ] ] }, { "id": "5ef66e6c.2549f", "type": "json", "z": "2821dd31.a0dd62", "name": "", "property": "payload", "action": "", "pretty": false, "x": 1170, "y": 1600, "wires": [ [ "ccbb833c.4dcc7" ] ] } ]
Damit sieht das Objekt bzw. der JSON-String exakt so aus, wie in Deiner Vorgabe:

Da die JOIN Node ja mit jeder Nachricht diese sofort weitergibt, wird der Timestamp auch immer aktualisiert.
Im Prinip also nur die Change Node zwischen die JOIN Node und die JSON Node schieben und das wars!
Das w
ü
rde ja dann diesem Bild aus Deinem Link entsprechen:
-
@frank-traut Ehrlich gesagt im ersten Moment verstand ich nur Bahnhof. Du hast mir jedenfalls alles andere als "meinen Subflow" gepostet.
Inzwischen hoffe ich aber, einfach Deine Anforderung umgesetzt zu haben. 
Also hier mein urspr
ü
nglicher Flow mit dem Timestamp erg
ä
nzt.[ { "id": "cc5a699c.5b95e8", "type": "inject", "z": "2821dd31.a0dd62", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "key1", "payload": "value1", "payloadType": "str", "x": 510, "y": 1580, "wires": [ [ "535efea7.5d7d2" ] ] }, { "id": "cc5cf91d.e86dd8", "type": "inject", "z": "2821dd31.a0dd62", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "key2", "payload": "value2", "payloadType": "str", "x": 510, "y": 1640, "wires": [ [ "535efea7.5d7d2" ] ] }, { "id": "535efea7.5d7d2", "type": "join", "z": "2821dd31.a0dd62", "name": "", "mode": "custom", "build": "object", "property": "payload", "propertyType": "msg", "key": "topic", "joiner": "\\n", "joinerType": "str", "accumulate": true, "timeout": "", "count": "1", "reduceRight": false, "reduceExp": "", "reduceInit": "", "reduceInitType": "", "reduceFixup": "", "x": 700, "y": 1600, "wires": [ [ "a78ff8d6.108498" ] ] }, { "id": "ccbb833c.4dcc7", "type": "debug", "z": "2821dd31.a0dd62", "name": "JSON String - MQTT", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 1360, "y": 1600, "wires": [] }, { "id": "a78ff8d6.108498", "type": "change", "z": "2821dd31.a0dd62", "name": "Timestamp setzen und Objekt bilden", "rules": [ { "t": "move", "p": "payload", "pt": "msg", "to": "values", "tot": "msg" }, { "t": "set", "p": "payload.ts", "pt": "msg", "to": "", "tot": "date" }, { "t": "move", "p": "values", "pt": "msg", "to": "payload.values", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 950, "y": 1600, "wires": [ [ "5ef66e6c.2549f" ] ] }, { "id": "5ef66e6c.2549f", "type": "json", "z": "2821dd31.a0dd62", "name": "", "property": "payload", "action": "", "pretty": false, "x": 1170, "y": 1600, "wires": [ [ "ccbb833c.4dcc7" ] ] } ]
Damit sieht das Objekt bzw. der JSON-String exakt so aus, wie in Deiner Vorgabe:

Da die JOIN Node ja mit jeder Nachricht diese sofort weitergibt, wird der Timestamp auch immer aktualisiert.
Im Prinip also nur die Change Node zwischen die JOIN Node und die JSON Node schieben und das wars!
Das w
ü
rde ja dann diesem Bild aus Deinem Link entsprechen:
@mickym Sieht gut aus! Auf dem Testsystem klappt das schon Mal ohne Probleme

-
@mickym Sieht gut aus! Auf dem Testsystem klappt das schon Mal ohne Probleme

@mickym
Ich hab da mal noch eine Frage
Ich m
ö
chte Daten aus Thindgsboard in die S7 schicken:

Links Thingsboard -> rechts S7
Die Daten werden korrekt aus TB aboniert und auch an die Nodes f
ü
r die S7 weitergegeben. Immer mit dem Schema "Name" "Satus". Unter den S7-Nodes sieht man auch, dass Werte ankommen. Die S7-Nodes
ü
bernhemen aber die Werte nicht.
Was gehen w
ü
rde: Mit Split und Switch-Node von Hand die Werte trennen. Das w
ä
re extrem aufwendig, weil ich mehr als nur die 4 Eing
ä
nge habe. Ich hatte schon Mal eine L
ö
sung daf
ü
r - finde diese aber leider nicht wider.
Nachfolgend mein Code:[{"id":"e6b2f5a5.f67e4","type":"tab","label":"Flow 3","disabled":false,"info":""},{"id":"5832dbde.f274f4","type":"comment","z":"e6b2f5a5.f67e4","name":"Test: TB -> NodeRed -> S7","info":"","x":720,"y":160,"wires":[]},{"id":"7b6c8520.abff4c","type":"mqtt in","z":"e6b2f5a5.f67e4","name":"","topic":"v1/devices/me/attributes","qos":"1","datatype":"auto","broker":"d6a1db0.7bf03a8","x":570,"y":240,"wires":[["fb3e812f.5f3518","10d7ba9c.c296b5","169520d1.0b58af","cafa5741.a85778","af40042.86e75f8"]]},{"id":"fb3e812f.5f3518","type":"debug","z":"e6b2f5a5.f67e4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":790,"y":540,"wires":[]},{"id":"10d7ba9c.c296b5","type":"s7 out","z":"e6b2f5a5.f67e4","endpoint":"5dd03a7c.af7b9c","variable":"(1555)_betriebsstunden_p1","name":"","x":960,"y":240,"wires":[]},{"id":"7b14759d.8b13bc","type":"s7 out","z":"e6b2f5a5.f67e4","endpoint":"5dd03a7c.af7b9c","variable":"(1555)_betriebsstunden_p1","name":"","x":860,"y":840,"wires":[]},{"id":"b774c83c.f619d8","type":"inject","z":"e6b2f5a5.f67e4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1","payloadType":"num","x":578,"y":841,"wires":[["7b14759d.8b13bc","ba50d833.15818"]]},{"id":"9120c446.14b768","type":"inject","z":"e6b2f5a5.f67e4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"2","payloadType":"num","x":588,"y":901,"wires":[["7b14759d.8b13bc","ba50d833.15818"]]},{"id":"ba50d833.15818","type":"s7 out","z":"e6b2f5a5.f67e4","endpoint":"5dd03a7c.af7b9c","variable":"(1556)_betriebsstunden_p2","name":"","x":870,"y":900,"wires":[]},{"id":"169520d1.0b58af","type":"s7 out","z":"e6b2f5a5.f67e4","endpoint":"5dd03a7c.af7b9c","variable":"(1501)_run_stop","name":"","x":930,"y":300,"wires":[]},{"id":"cafa5741.a85778","type":"s7 out","z":"e6b2f5a5.f67e4","endpoint":"5dd03a7c.af7b9c","variable":"(1541)_anlagenlaufzeit_monat_8","name":"","x":980,"y":360,"wires":[]},{"id":"af40042.86e75f8","type":"s7 out","z":"e6b2f5a5.f67e4","endpoint":"5dd03a7c.af7b9c","variable":"(1563)_betriebsstunden_09","name":"","x":960,"y":420,"wires":[]},{"id":"d6a1db0.7bf03a8","type":"mqtt-broker","name":"NodeRed_out","broker":"138.197.182.168","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"5dd03a7c.af7b9c","type":"s7 endpoint","transport":"iso-on-tcp","address":"172.16.58.1","port":"102","rack":"0","slot":"0","localtsaphi":"01","localtsaplo":"00","remotetsaphi":"01","remotetsaplo":"00","connmode":"rack-slot","adapter":"","busaddr":"2","cycletime":"3000","timeout":"2000","name":"TB_NodeRed_S7","vartable":[{"addr":"DB1500,X0.0","name":"(1501)_run_stop"},{"addr":"DB1500,X0.1","name":"(1502)_anlagentyp1_2"},{"addr":"DB1500,X0.2","name":"(1503)_basic_03"},{"addr":"DB1500,X0.3","name":"(1504)_basic_04"},{"addr":"DB1500,X0.4","name":"(1505)_basic_05"},{"addr":"DB1500,X0.5","name":"(1506)_basic_06"},{"addr":"DB1500,X0.6","name":"(1507)_basic_07"},{"addr":"DB1500,X0.7","name":"(1508)_basic_08"},{"addr":"DB1500,X1.0","name":"(1509)_basic_09"},{"addr":"DB1500,WORD2","name":"(1510)_anlagenleistung_monat_1"},{"addr":"DB1500,WORD4","name":"(1511)_anlagenleistung_monat_2"},{"addr":"DB1500,WORD6","name":"(1512)_anlagenleistung_monat_3"},{"addr":"DB1500,WORD8","name":"(1513)_anlagenleistung_monat_4"},{"addr":"DB1500,WORD10","name":"(1514)_anlagenleistung_monat_5"},{"addr":"DB1500,WORD12","name":"(1515)_anlagenleistung_monat_6"},{"addr":"DB1500,WORD14","name":"(1516)_anlagenleistung_monat_7"},{"addr":"DB1500,WORD16","name":"(1517)_anlagenleistung_monat_8"},{"addr":"DB1500,WORD18","name":"(1518)_anlagenleistung_monat_9"},{"addr":"DB1500,WORD20","name":"(1519)_anlagenleistung_monat_10"},{"addr":"DB1500,WORD22","name":"(1520)_anlagenleistung_monat_11"},{"addr":"DB1500,WORD24","name":"(1521)_anlagenleistung_monat_12"},{"addr":"DB1500,X26.0","name":"(1522)_anzahl_pumpen_monat_1"},{"addr":"DB1500,X26.1","name":"(1523)_anzahl_pumpen_monat_2"},{"addr":"DB1500,X26.2","name":"(1524)_anzahl_pumpen_monat_3"},{"addr":"DB1500,X26.3","name":"(1525)_anzahl_pumpen_monat_4"},{"addr":"DB1500,X26.4","name":"(1526)_anzahl_pumpen_monat_5"},{"addr":"DB1500,X26.5","name":"(1527)_anzahl_pumpen_monat_6"},{"addr":"DB1500,X26.6","name":"(1528)_anzahl_pumpen_monat_7"},{"addr":"DB1500,X26.7","name":"(1529)_anzahl_pumpen_monat_8"},{"addr":"DB1500,X27.0","name":"(1530)_anzahl_pumpen_monat_9"},{"addr":"DB1500,X27.1","name":"(1531)_anzahl_pumpen_monat_10"},{"addr":"DB1500,X27.2","name":"(1532)_anzahl_pumpen_monat_11"},{"addr":"DB1500,X27.3","name":"(1533)_anzahl_pumpen_monat_12"},{"addr":"DB1500,WORD28","name":"(1534)_anlagenlaufzeit_monat_1"},{"addr":"DB1500,WORD30","name":"(1535)_anlagenlaufzeit_monat_2"},{"addr":"DB1500,WORD32","name":"(1536)_anlagenlaufzeit_monat_3"},{"addr":"DB1500,WORD34","name":"(1537)_anlagenlaufzeit_monat_4"},{"addr":"DB1500,WORD36","name":"(1538)_anlagenlaufzeit_monat_5"},{"addr":"DB1500,WORD38","name":"(1539)_anlagenlaufzeit_monat_6"},{"addr":"DB1500,WORD40","name":"(1540)_anlagenlaufzeit_monat_7"},{"addr":"DB1500,WORD42","name":"(1541)_anlagenlaufzeit_monat_8"},{"addr":"DB1500,WORD44","name":"(1542)_anlagenlaufzeit_monat_9"},{"addr":"DB1500,WORD46","name":"(1543)_anlagenlaufzeit_monat_10"},{"addr":"DB1500,WORD48","name":"(1544)_anlagenlaufzeit_monat_11"},{"addr":"DB1500,WORD50","name":"(1545)_anlagenlaufzeit_monat_12"},{"addr":"DB1500,WORD52","name":"(1546)_temp_luft_1"},{"addr":"DB1500,WORD54","name":"(1547)_temp_luft_2"},{"addr":"DB1500,WORD56","name":"(1548)_temp_wasser_1"},{"addr":"DB1500,WORD58","name":"(1549)_temp_wasser_2"},{"addr":"DB1500,WORD60","name":"(1550)_messwert_05"},{"addr":"DB1500,WORD62","name":"(1551)_messwert_06"},{"addr":"DB1500,WORD64","name":"(1552)_messwert_07"},{"addr":"DB1500,WORD66","name":"(1553)_messwert_08"},{"addr":"DB1500,WORD68","name":"(1554)_messwert_09"},{"addr":"DB1500,WORD70","name":"(1555)_betriebsstunden_p1"},{"addr":"DB1500,WORD72","name":"(1556)_betriebsstunden_p2"},{"addr":"DB1500,WORD74","name":"(1557)_betriebsstunden_03"},{"addr":"DB1500,WORD76","name":"(1558)_betriebsstunden_04"},{"addr":"DB1500,WORD78","name":"(1559)_betriebsstunden_05"},{"addr":"DB1500,WORD80","name":"(1560)_betriebsstunden_06"},{"addr":"DB1500,WORD82","name":"(1561)_betriebsstunden_07"},{"addr":"DB1500,WORD84","name":"(1562)_betriebsstunden_08"},{"addr":"DB1500,WORD86","name":"(1563)_betriebsstunden_09"},{"addr":"DB1500,X106.0","name":"(1564)_alarm_ms_p1"},{"addr":"DB1500,X106.1","name":"(1565)_alarm_ms_p2"},{"addr":"DB1500,X106.2","name":"(1566)_temp_luft_1_hoch"},{"addr":"DB1500,X106.3","name":"(1567)_temp_luft_1_niedrig"},{"addr":"DB1500,X106.4","name":"(1568)_messfehler_temp_luft_1"},{"addr":"DB1500,X106.5","name":"(1569)_messfehler_temp_luft_2"},{"addr":"DB1500,X106.6","name":"(1570)_messfehler_temp_wasser_1"},{"addr":"DB1500,X106.7","name":"(1571)_messfehler_temp_wasser_2"},{"addr":"DB1500,X107.0","name":"(1572)_alarm_08"},{"addr":"DB1500,X107.1","name":"(1573)_alarm_09"}]}]
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden