NEWS
Function node nach update ohne Funktion?
-
ich hänge mich hier mal dran, weil ich ein ähliches Thema habe.
Ich habe gestern viele Updates auf meinem Master und auch den 3 Slaves gemacht. Und dabei ist mir die Verbindung von Node-Red und IoBroker flöten gegangen. Es hat nix mehr wie vorher funktioniert.
Was ich bisher gemerkt habe ist, dass die Datenübergabe von IoBroker auf Node-Red anscheinend nicht mehr wie vorher arbeitet.
Ich habe vorher einen Datenpunkt (Array) mit den Werten [250,2] an Node-Red übergeben. Diese beiden Werte habe ich dann über eine function-Node aufbereitet und an den Modbus Flex Write Node übergebe.
Das Function Node ht vorher mit folgendem Code die beiden Werte im Array getrennt und richtig zugewiesen und auch richtig in das Gerät geschrieben.
var fc=16; var sa=0; var addresses=1; var unitid = msg.payload.val[1]; var value = msg.payload.val[0]; //var slave_ip=msg.payload.slave_ip; //msg.slave_ip="192.168.1.31"; msg.payload={"value":value, 'fc': fc, 'unitid': unitid, 'address': sa , 'quantity': addresses }; return msg;
Jetzt trennt dieses Node beim gleichen Code die die Werte so als wäre es ein String und übergibt nicht als unitid 2 und als value 250, sondern als initid 5 und value 2.
Warum ist das so? und wie kann ich das wieder ändern?
lg Etze
-
Its your turn
-
@etzeste13 sagte in Function node nach update ohne Funktion?:
ch hänge mich hier mal dran, weil ich ein ähliches Thema habe.
Ähnlich ist nicht gleich!
Habe es mal abgetrennt -
Ehrlich gesagt, kann man darauf schwer antworten, wenn man weiß, was wie upgedated wurde. Ich habe in Erinnerung, dass am JS Adapter mal was gemacht wurde, aber letztlich ist das alles nur Spekulation.
Klarheit bekommt man erst, wenn man
- schaut, dass die String Konvertierung im Adapter ausgeschaltet ist,
- mit einer Debug Node schaut, was aus der iobroker-IN Node rauskommt.
Im 1. Fall halt den Haken rausmachen - dann muss man aber alles andere auch überprüfen, wo man vielleicht ggf. noch eine Konvertierung durchgeführt hat,
im 2. Fall falls ein JSON String rauskommt, den mit der entsprechenden Node zu konvertieren - dann würden aber die eckigen Klammern fehlen. -
Hallo Micky,
nachfolgend ein paar zusätzliche Daten:
- Die Einstellung " ioBroker-Werte in Zeichenkette" ist deaktiviert.
- Hier die Info aus der Debug.Node vom IoBroker Datenpunkt
und die Info die nach der Function Node rauskommt.
zur Übersicht der aufbau des Flows den ich hier debuge.
und als Info auch noch die Details des Datenpunkts von ioBroker...
{ "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1607851327142, "common": { "name": "Write_Reg0-2", "role": "value", "type": "array", "desc": "Manuell erzeugt", "read": true, "write": true }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "0_userdata.0.SPR8_0.Write_Reg0-2", "type": "state" }
Bzgl der Details vom Update kann ich sagen dass ich gestern von sowohl alle JS controller (aktuell 3.3.22) als auch die Versionen von NodeJS (14.19.0) auf letzstand gebracht habe.
Zuvor waren auf dem Slave wo ich Node-Red laufen hatte noch JS-controler 3.2.xx und NodeJS 12.x.x und ich hatte eine vesentlich ältere Node Red version, ich denke sicher ein halbes Jahr alt.
Ich hoffe das hilft, damit du eine besseren Überblick bekommst. Lass mich einfach wissen, solltenst du noch infos brauchen.
Ich hätte einfach nur gern, dass ich das Array ein Array bleibt und sich nicht wie ein String verhält.lg
Etze -
Hallo Hormoran,
ich würde den Betreff eher auf " geänderte Datenübergabe von ioBroker zu NodeRed nach Update? taufen. Ich glaube nicht das das function node was falsch macht, aber m.M ist die Ausganglage anders...
lg -
@etzeste13 sagte in Function node nach update ohne Funktion?:
ch würde den Betreff eher auf " geänderte Datenübergabe von ioBroker zu NodeRed nach Update? taufen
dann streiche würde und setze werde ... machen
-
@etzeste13 Nun letztlich ist es egal - ob es durch ein Update des JS Adapters, Admin oder eines Adapters kommt:
Fakt ist, dass ein String rauskommt, das zeigt ja die Debug Node eindeutig. Wenn die Option in Zeichenkette deaktiviert ist, dann kommt halt ein String raus. Du kannst das Array nun in der Function Node machen oder eine Change Node davor schalten.
Ehrlich gesagt verstehe ich auch nicht warum Du aus Deiner iobroker IN Node das Objekt ausliest anstelle nur des Wertes. Ich kann zumindest anhand der function Node nicht erkennen, dass Du irgendeine Eigenschaft Deines Objektes verwendest.
Ich gehe mal davon aus, dass Du gerne Zahlen und keine Strings in Deinen Werten haben willst.
Du kannst Deine function Node, wie folgt ändern:
var fc=16; var sa=0; var addresses=1; msg.payload.val = msg.payload.val.split(","); var unitid = Number(msg.payload.val[1]); var value = Number(msg.payload.val[0]); //var slave_ip=msg.payload.slave_ip; //msg.slave_ip="192.168.1.31"; msg.payload={"value":value, 'fc': fc, 'unitid': unitid, 'address': sa , 'quantity': addresses }; return msg;
Falls Du nicht die function Node nicht ändern willst - zeige ich Dir noch eine Möglichkeit, wie man ohne function Nodes auskommt.
Mit dieser Change Node und JSONATA kommst zum gleichen Ergebnis:
Ist halt etwas intuitiver - da Du das payload Objekt quasi visuell zusammenbaust:
-
@mickym
Hallo Micky,wo du recht hast, hast du recht. Wenn jezt wirklich immer ein String übergeben wird, und das nicht mehr anzupassen ist, muss ich den Flow eben anpassen.
Warum ich aus der IN Node das Objekt nehme, kann ich dir auch nicht sagen. Ich habe mir das damals mit viel probieren Node-Red angeeignet, weil für mein ModBus Gerät der ioBroker Adapter nicht funktonierte. Habe den Flow mit viel Try and Error entwickelt und da war mit der Unterschied von Objekt und value noch nicht so bewusst. Je länger ich mich mit ioBroker beschäftige um so besser mehr bleibt hängen....
Wie auch immer, den val.split befehl kannte ich nicht, aber nach so was habe ich auch gesucht und werde ich auch zeitnah ausprobieren.
Ich werde mir das auch mit der CHANGE Node anschauen.. schaut auch vielversprechend und wie du sagst übersichtlicher aus.
Meine Grundsätzliche Frage ist beantwortet - es werden jetzt immer Strings ausgetauscht.
Sollte ich bzgl der Umsetzung bzw Nodes noch Fragen haben, meld ich mich nochmals.
Vielen Dank für die schnelle und proffessionelle Hilfe!!
lg
Etze