NEWS
NodeRed function node soll toipc übernehmen
-
@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"}]}]
-
siehe nächster Beitrag
-
habs schon gesehen -
[ { "id": "c6a50eae.ea43c", "type": "json", "z": "6e170384.60c96c", "name": "", "property": "payload", "action": "", "pretty": false, "x": 1740, "y": 4220, "wires": [ [ "e45442d.763bdc" ] ] }, { "id": "e45442d.763bdc", "type": "change", "z": "6e170384.60c96c", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.(1555)_betriebsstunden_p1", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1960, "y": 4220, "wires": [ [] ] } ]
klemm diese beiden Nodes hinter Deine mqtt Node - dann müsste es gehen.
Also um es nochmal zu erklären, was die beiden Nodes machen. Der erste konvertiert den JSON String in ein Objekt. Der Change Node extrahiert die gewünschte Eigenschaft und kopiert die in die payload.
-
@mickym Moin, wenn ich das mache bekomme ich doch ich vor und nach dem cahnge Node genau die gleiche Nachricht:
Müsste ich dann für jede Variable diesen Baum aufbauen? -
@frank-traut ich habe festgestellt, dass die Change Node Probleme mit den Klammern im Objekt hat.
[ { "id": "c6a50eae.ea43c", "type": "json", "z": "6e170384.60c96c", "name": "", "property": "payload", "action": "", "pretty": false, "x": 3310, "y": 1220, "wires": [ [ "e45442d.763bdc" ] ] }, { "id": "e45442d.763bdc", "type": "change", "z": "6e170384.60c96c", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "payload.1555_betriebsstunden_p1", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 3490, "y": 1220, "wires": [ [] ] }, { "id": "7c121490.b9004c", "type": "change", "z": "6e170384.60c96c", "name": "", "rules": [ { "t": "change", "p": "payload", "pt": "msg", "from": "(", "fromt": "str", "to": "", "tot": "str" }, { "t": "change", "p": "payload", "pt": "msg", "from": ")", "fromt": "str", "to": "", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 3120, "y": 1220, "wires": [ [ "c6a50eae.ea43c" ] ] } ]
So müsste es nun funktionieren.
Auf Dein Frage, ob Du das für jede Variable machen musst - das kann ich Dir so nicht beantworten - ich weiß weder was aus der mqtt Node rauskommen kann, welche Variablen da rauskommen noch welche Werte dann weitergegeben werden müssen. Ich habe Dir nun gezeigt, wie Du aus dem String, dann Objekt, die entsprechenden Werte aus bestimmten Eigenschaften (properties - Objektnamen) rausbekommst.
Falls das in dem String auch grundsätzlich so rausbekommt und der 1. Teil im Prinzip das Topic also die 1555 ist - kann man das auch anders machen. Das heißt wenn immer "betriebsstunden_p1" rauskommt - sich aber das Gerät über die Klammer unterscheidet, dann macht man aus dem Inhalt der Klammer das topic - und aus dem Rest direkt die Zahl. Irgendwo musst Du ja immer nach Gerät und nach Eigenschaft aufteilen.
-
@mickym okay sehr cool das klappt. Ich habe jetzt vor der Umwandlung die entsprechenden Routen augebaut. So kommt dann immer nur genau der Wert beim Eingang an.
Gibt es noch eine Möglichkeit den Inhalt der "change-Node" "global" zu halten. Die macht ja nicht anderes als das Objekt in Number zu wechseln. Da müsste doch der Name egal sein, oder? Kann man da evtl. mit Sternchen o.ä. arbeiten? -
gelöscht - da bessere finale Lösung oben
-
gelöscht - da bessere finale Lösung oben
-
Hier mal ein JSON String mit mehreren Objekten:
{"(1522)_betriebsstunden_p1":39, "(1711)_betriebsstunden_p1":3569, "(2534)_betriebsstunden_p1":8839 }
Mit dem unteren Beispiel bekommst Du auch dann die Werte nacheinander zurück, wenn dich die Eigenschaften nicht interessieren.
willst Du die Eigenschaften nicht verlieren - lässt Du die Split Node das in den topic kopieren, dann bleibt Dir das für einen späteren switch Node erhalten:
Das ist das gleiche wie oben nur die split Node wie folgt angepaßt:
Insofern ist das wohl die Universallösung - also diese beiden Nodes hinter Dein mqtt:
[ { "id": "6163defd.b392b", "type": "json", "z": "6e170384.60c96c", "name": "", "property": "payload", "action": "", "pretty": false, "x": 2610, "y": 2040, "wires": [ [ "6d2ebecd.0a80b" ] ] }, { "id": "6d2ebecd.0a80b", "type": "split", "z": "6e170384.60c96c", "name": "", "splt": "\\n", "spltType": "str", "arraySplt": 1, "arraySpltType": "len", "stream": false, "addname": "topic", "x": 2780, "y": 2040, "wires": [ [ "422bae3b.6ab82" ] ] } ]
Manchmal habe ich selbst ein Brett vorm Kopf
-
@mickym Hast die Versionen zu spät gelöscht
hab dann mal alle durchgespielt
aber die letzte Version klappt super!