Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Function node nach update ohne Funktion?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Function node nach update ohne Funktion?

    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      etzeste13 last edited by

      @haselchen

      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

      haselchen Homoran 2 Replies Last reply Reply Quote 0
      • haselchen
        haselchen Most Active @etzeste13 last edited by

        @mickym

        Its your turn 🍺

        1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @etzeste13 last edited by

          @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

          E 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active last edited by

            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

            1. schaut, dass die String Konvertierung im Adapter ausgeschaltet ist,
            2. 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.

            1 Reply Last reply Reply Quote 0
            • E
              etzeste13 last edited by

              @mickym

              Hallo Micky,

              nachfolgend ein paar zusätzliche Daten:

              1. Die Einstellung " ioBroker-Werte in Zeichenkette" ist deaktiviert.
              2. Hier die Info aus der Debug.Node vom IoBroker Datenpunkt 74298c47-27d8-4043-b609-21b1688ea5c2-grafik.png
                und die Info die nach der Function Node rauskommt. 4fc0169a-9726-4fbf-a869-49ee1068cb81-grafik.png

              zur Übersicht der aufbau des Flows den ich hier debuge.

              fc1c5c60-f260-4046-9c00-d7f571c26b9e-grafik.png

              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

              mickym 1 Reply Last reply Reply Quote 0
              • E
                etzeste13 @Homoran last edited by

                @homoran

                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

                Homoran 1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @etzeste13 last edited by Homoran

                  @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

                  1 Reply Last reply Reply Quote 0
                  • mickym
                    mickym Most Active @etzeste13 last edited by mickym

                    @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;
                    

                    dc80ff32-d40b-4d93-be4a-b88d6c13301c-image.png

                    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:

                    e3a8d168-21c9-4da7-b74b-5f75e2f94f7e-image.png

                    Ist halt etwas intuitiver - da Du das payload Objekt quasi visuell zusammenbaust:

                    7a6fa86d-5260-410d-867e-8326fa9ef324-image.png

                    [
                       {
                           "id": "5f6460d0dd7f6f87",
                           "type": "change",
                           "z": "ebe8134f6b5af26c",
                           "name": "",
                           "rules": [
                               {
                                   "t": "set",
                                   "p": "val",
                                   "pt": "msg",
                                   "to": "$split(payload.val, \",\")",
                                   "tot": "jsonata"
                               },
                               {
                                   "t": "set",
                                   "p": "payload",
                                   "pt": "msg",
                                   "to": "{\t   \"fc\":16,\t   \"address\":0,\t   \"quantity\":1,\t   \"unitid\":$number(val[1]),\t   \"value\":$number(val[0])\t}",
                                   "tot": "jsonata"
                               },
                               {
                                   "t": "delete",
                                   "p": "val",
                                   "pt": "msg"
                               }
                           ],
                           "action": "",
                           "property": "",
                           "from": "",
                           "to": "",
                           "reg": false,
                           "x": 470,
                           "y": 220,
                           "wires": [
                               [
                                   "4aed01807b30b8fd"
                               ]
                           ]
                       }
                    ]
                    

                    E 1 Reply Last reply Reply Quote 1
                    • E
                      etzeste13 @mickym last edited by

                      @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

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      979
                      Online

                      31.7k
                      Users

                      79.8k
                      Topics

                      1.3m
                      Posts

                      4
                      9
                      456
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo