Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Msg payload string wert extrahieren

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

Msg payload string wert extrahieren

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
24 Beiträge 4 Kommentatoren 20.8k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • inesaI Offline
    inesaI Offline
    inesa
    schrieb am zuletzt editiert von
    #1

    Hallo

    Folgenes Problem Ich bekomme von meinen Sonoff folgene Daten übermittlet

    /Smarthome/dachboden/intelnuc/tele/Nuc/SENSOR : msg.payload : string[154]

    {"Time":"2018-06-08T15:22:49","ENERGY":{"Total":66.302,"Yesterday":0.410,"Today":0.268,"Period":1,"Power":18,"Factor":0.48,"Voltage":231,"Current":0.162}}
    

    Daraus möchte ich einen Wert Power und Current extrahieren um diese dann in meiner Weboberfläche anzuzeigen.

    So geht es jedenfalls nicht````
    msg.payload=msg.payload.Power;
    return msg;

    
    Ines
    1 Antwort Letzte Antwort
    0
    • Jey CeeJ Online
      Jey CeeJ Online
      Jey Cee
      Developer
      schrieb am zuletzt editiert von
      #2
      msg.payload=msg.payload.ENERGY.Power;
      

      Damit müsste es gehen.

      Persönlicher Support
      Spenden -> paypal.me/J3YC33

      1 Antwort Letzte Antwort
      0
      • inesaI Offline
        inesaI Offline
        inesa
        schrieb am zuletzt editiert von
        #3

        Hallo

        Geht leider nicht kommt dies im debug

        "TypeError: Cannot read property 'Power' of undefined"

        Die Daten kommen per mqtt zu nod-red

        Ines

        1 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          Garf
          schrieb am zuletzt editiert von
          #4

          Du musst die gewünschten Daten aus dem String herausschneiden (parsen).

          Schau dir dies mal an:

          https://stackoverflow.com/questions/449 … sg-payload

          https://www.w3schools.com/Jsref/jsref_substring.asp

          https://developer.mozilla.org/de/docs/W ... /substring

          https://de.wikibooks.org/wiki/Websiteen ... te:_String

          1 Antwort Letzte Antwort
          0
          • inesaI Offline
            inesaI Offline
            inesa
            schrieb am zuletzt editiert von
            #5

            Habe das mal so versucht in eine funktion gepackt

            var msg = msg.payload;
            var value = msg.substr(99,103);
            return msg;
            
            

            klappt leider nicht bin wohl noch ziemlicher Anfänger :?

            Verstehe zwar was ich machen muß krieg das aber in nod-red

            nicht hin.

            1 Antwort Letzte Antwort
            0
            • G Offline
              G Offline
              Garf
              schrieb am zuletzt editiert von
              #6

              Nein, so kann es nicht funktionieren.

              Du musst die Variable value wieder der Variable msg.payload zuweisen. Dann kannst Du auch das Ergebnis im Debug-Node sehen.

              var msg = msg.payload;
              var value = msg.substr(99,103);
              msg.payload = value;
              return msg;
              

              Der Weg wird aber kein zufriedenstellendes Ergebnis bringen, da sich die Werte und damit die Länge des Strings verändern können. Du schneidest aber an genau definierten Stellen einen Teilstring aus.

              Ich würde den gesamten String in Einzelwerte zerlegen und in ein Array schreiben. Sähe dann so aus:

              3639_screen1.jpg

              Deine gewünschten Werte stehen in der Variablen msg.paylaod[5] und msg.paylaod[8].

              1 Antwort Letzte Antwort
              0
              • inesaI Offline
                inesaI Offline
                inesa
                schrieb am zuletzt editiert von
                #7

                Danke für deine Hilfe 🙂

                ok ich lege eine Funktion an

                msg.payload :array[9]

                und extrahiere dann daraus mit

                msg.paylaod[5] und msg.paylaod[8]

                meine gewünschten Variablen.

                Wie würde der Code aussehen um das ganze in ein Array zu schreiben ?

                1 Antwort Letzte Antwort
                0
                • G Offline
                  G Offline
                  Garf
                  schrieb am zuletzt editiert von
                  #8

                  Klar könnte ich dir das fertige Javascript posten und Du hättest die Lösung. Besser wäre es jedoch, wenn Du verstehst was Du da eigentlich machst und wie dies alles in Node Red so funktioniert.

                  Aus deinem Posts kann ich herauslesen, dass bei dir das Grundlagenwissen und Verständnis noch fehlt. :roll:

                  Ist auch nachvollziehbar und nicht schlimm. Woher soll man es als Anfänger auch haben.

                  Hier kannst Du dich in das Thema einlesen: https://nodered.org/docs/user-guide/messages

                  Mich würde erst einmal interessieren, ob Du dein vorheriges Script um die eine Zeile ergänzt hast und nun ein Ergebnis im debug Node siehst. Wenn ja, wie sieht dies aus?

                  Deshalb bleibe noch kurz bei deinem kleinen Javascript und schau dir das Ergebnis mit dem Substring genau an. Im Anschluss machen wir uns dann auf den richtigen Weg und benutzen an Stelle der Substring Javafunktion die Splitfunktion. Diese erstellt automatisch die Array. Ich schaue mich in der Zwischenzeit noch mal um, ob es hierfür nicht schon ein fertiges Node gibt.

                  1 Antwort Letzte Antwort
                  0
                  • inesaI Offline
                    inesaI Offline
                    inesa
                    schrieb am zuletzt editiert von
                    #9

                    Hallo

                    Wenn ich diese Funktion einfüge bekomme ich im Debug dies

                    "Function tried to send a message of type string"

                    var msg = msg.payload;

                    var test = msg.substr(3,6);

                    msg.payload = test;

                    return msg;

                    egal welche zahlen ich eingebe bekomme nur diese Fehlermeldung

                    Ines

                    1 Antwort Letzte Antwort
                    0
                    • G Offline
                      G Offline
                      Garf
                      schrieb am zuletzt editiert von
                      #10

                      Hi,

                      eine unglückliche Auswahl der Variablennamen führt zu dem Fehler.

                      Versuche es bitte mit folgendem Javascript:

                      var string = msg.payload;
                      var test = string.substr(3,6);
                      msg.payload = test;
                      return msg;
                      

                      Hier noch der kleine Testflow.

                      [{"id":"a34c31f5.640b28","type":"inject","z":"1109363a.41365a","name":"","topic":"","payload":"{\"Time\":\"2018-06-08T15:22:49\",\"ENERGY\":{\"Total\":66.302,\"Yesterday\":0.410,\"Today\":0.268,\"Period\":1,\"Power\":18,\"Factor\":0.48,\"Voltage\":231,\"Current\":0.162}}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":200,"wires":[["8c0169c.096a698"]]},{"id":"8c0169c.096a698","type":"function","z":"1109363a.41365a","name":"","func":"var string = msg.payload;\nvar test = string.substr(3,6);\nmsg.payload = test;\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":200,"wires":[["147c1657.ec1dc2"]]},{"id":"147c1657.ec1dc2","type":"debug","z":"1109363a.41365a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":520,"y":200,"wires":[]}]
                      

                      Dann bitte ein wenig testen und wieder melden. Dann gehen wir das eigentliche Problem an, damit du endlich zu dem gewünschten Ergebnis kommst.

                      1 Antwort Letzte Antwort
                      0
                      • inesaI Offline
                        inesaI Offline
                        inesa
                        schrieb am zuletzt editiert von
                        #11

                        Wenn ich diesen Code verwende bekomme ich als Anzeige im gauge

                        var string = msg.payload;
                        var test = string.substr(9,10);
                        msg.payload = test;
                        return msg;
                        

                        "2018" warum versteh ich noch nicht so richtig wie wird das im String gezählt ?

                        Mit inject node string und debug node bekomme ich von deinen testflow dies

                        "id":"a" als filter habe ich das verwendet

                         var string = msg.payload;
                        var test = string.substr(3,6);
                        msg.payload = test;
                        return msg;
                        

                        Bei a34c31f und diesen code

                        var string = msg.payload;
                        var test = string.substr(7,8);
                        msg.payload = test;
                        return msg;
                        

                        Verstehe einfach nicht wie das gezählt hier wird

                        Ines

                        1 Antwort Letzte Antwort
                        0
                        • G Offline
                          G Offline
                          Garf
                          schrieb am zuletzt editiert von
                          #12

                          @inesa:

                          Wenn ich diesen Code verwende bekomme ich als Anzeige im gauge "2018" warum versteh ich noch nicht so richtig wie wird das im String gezählt ? `

                          Das kann doch nicht funktionieren. Das Dashboard gauge Node erwartet einen Zahlenwert (float oder integer) und keinen String. Wir benutzen zur Zeit nur Strings. Warum bleibst Du nicht erst auf der Flowseite und schaust dir die Ergebnisse im debug Node an?

                          Die Ergebenisse sieht man rechts unter debug.

                          3639_screen2.jpg

                          > Wie kann man deinen teststring einsetzen… Mit den Grundlagen solltest Du dich aber noch einmal sehr intensiv beschäftigen!

                          Das ist ein Flow (clipboard), den importiert man nach Node Red. Über das Menü, dann import auswählen, dann Clipboard und mit copy und paste den Code in das große Fenster kopieren und auf deiner Flowseite abspeichern. Die Links zu den Youtube Videos zeigen wie es geht.

                          https://www.youtube.com/watch?v=_uN–N7YE24

                          https://www.youtube.com/watch?v=vLhVxWRtWc8

                          1 Antwort Letzte Antwort
                          0
                          • HomoranH Nicht stören
                            HomoranH Nicht stören
                            Homoran
                            Global Moderator Administrators
                            schrieb am zuletzt editiert von
                            #13

                            @Garf:

                            Mit den Grundlagen solltest Du dich aber noch einmal sehr intensiv beschäftigen! `

                            Hier gibt es auch noch etwas:

                            http://www.iobroker.net/docu/?page_id=4284&lang=de

                            Gruß

                            Rainer

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            1 Antwort Letzte Antwort
                            0
                            • G Offline
                              G Offline
                              Garf
                              schrieb am zuletzt editiert von
                              #14

                              @Homoran:

                              Hier gibt es auch noch etwas: `
                              Super, vielen Dank, das kannte ich auch noch nicht.

                              Vielleicht sollt man diese und andere allgemeine Infos zu Node Red unter Bekanntmachungen anpinnen. Die Gesamtübersicht aller Anleitung finde ich etwas unübersichtlich.

                              1 Antwort Letzte Antwort
                              0
                              • HomoranH Nicht stören
                                HomoranH Nicht stören
                                Homoran
                                Global Moderator Administrators
                                schrieb am zuletzt editiert von
                                #15

                                Wir werden die Doku (hoffentlich) bald überarbeiten. Die ist nicht immer auf dem aktuellen Stand.

                                So ist diese Seite von Mai 2016 😞

                                Merkwürdigerweise funktioniert die Suche darin aber sehr gut 😄

                                Gruß

                                Rainer

                                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                1 Antwort Letzte Antwort
                                0
                                • inesaI Offline
                                  inesaI Offline
                                  inesa
                                  schrieb am zuletzt editiert von
                                  #16

                                  Das mit dem Testflow hab ich schon mal hinbekommen

                                  Der Rest muss auf heute Abend warten.

                                  Dank an euch schon mal

                                  Ines

                                  1 Antwort Letzte Antwort
                                  0
                                  • inesaI Offline
                                    inesaI Offline
                                    inesa
                                    schrieb am zuletzt editiert von
                                    #17

                                    Mit diesen Code habe ich meine gewünschte Ausgabe hinbekommen

                                    var string = msg.payload;
                                    var test = string.substr(106,2);
                                    msg.payload = test;
                                    return msg;
                                    

                                    Einen flow zur Ausgabe auf meinen Dashboard mit livedaten vom Sonoff Pow

                                    habe ich mir auch gleich zusammengebaut.Nur leider ändert sich der String manchmal

                                    und die Ausgabe ist dann fehlerhaft.Zufriednstellend ist das leider noch nicht.

                                    Im debug Fenster wird mir nach import des flows nicht das Array angezeigt wie man es

                                    bei Graf sehen kann.

                                    Warum ist das so ?

                                    Ines

                                    1 Antwort Letzte Antwort
                                    0
                                    • G Offline
                                      G Offline
                                      Garf
                                      schrieb am zuletzt editiert von
                                      #18

                                      @inesa:

                                      Warum ist das so ? Weil Du noch viel in Javascriptprogrammierung und der Verwendung unter Node Red lernen musst. Da mir primär die Zeit und auch wenig die Lust fehlt, dir dies aus der Ferne Schritt für Schritt beizubringen, setze ich auf diese Aussage von dir > Das mit dem Testflow hab ich schon mal hinbekommen `
                                      und poste die fertige Lösung. In den vorherigen Posts hatte ich übrigens bereits geschrieben, dass die substring Methode nicht der richtige Weg zum gewünschten Ergebnis ist, da mit der substring Funktion an genau vorher definierten Stellen etwas abgeschnitten wird, sich aber die Positionen der Messwerte je nach Messgröße verändern können. Somit ein absolutes no go.

                                      [{"id":"a34c31f5.640b28","type":"inject","z":"1109363a.41365a","name":"","topic":"","payload":"{\"Time\":\"2018-06-08T15:22:49\",\"ENERGY\":{\"Total\":66.302,\"Yesterday\":0.410,\"Today\":0.268,\"Period\":1,\"Power\":18,\"Factor\":0.48,\"Voltage\":231,\"Current\":0.162}}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":100,"wires":[["8a3b7ff7.cec02"]]},{"id":"8a3b7ff7.cec02","type":"function","z":"1109363a.41365a","name":"","func":"var oldstring = msg.payload;\nvar newstring = oldstring.replace(/{|}|\"/g,\"\");\nvar re = /\\s*,\\s*/;\nvar nameList = newstring.split(re);\nmsg.payload=nameList;\nflow.set(\"power\",msg.payload[5]);\nflow.set(\"current\",msg.payload[8]);\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":100,"wires":[["df30b04d.fcd7b8","741a4d3f.db3874","9d5094c1.7897a8"]]},{"id":"df30b04d.fcd7b8","type":"debug","z":"1109363a.41365a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":530,"y":100,"wires":[]},{"id":"741a4d3f.db3874","type":"function","z":"1109363a.41365a","name":"Power","func":"var oldstring = flow.get(\"power\");\nvar newstring = oldstring.replace(/Power:/g,\"\");\nmsg.payload =parseFloat(newstring);\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":160,"wires":[["a94fb3d7.b87a9","9d7b9caf.b00dc"]]},{"id":"9d5094c1.7897a8","type":"function","z":"1109363a.41365a","name":"current","func":"var oldstring = flow.get(\"current\");\nvar newstring = oldstring.replace(/Current:/g,\"\");\nmsg.payload =parseFloat(newstring);\nreturn msg;","outputs":1,"noerr":0,"x":369,"y":200,"wires":[["362d4eb.a67d3b2","19d2e720.226ca9"]]}]
                                      

                                      Und so sollte es dann nachher aussehen:

                                      3639_screen4.jpg
                                      Beispieltestflow

                                      3639_screen5.jpg
                                      Anzeigewerte Debug-Nodes

                                      3639_screen6.jpg
                                      Gauge-Anzeigen im Dashboard

                                      Jetzt schau mal, dass Du die drei function-Nodes in dein Flow eingebaut bekommst. Und bitte nicht frustiert sein. Das was Du hier machen möchtest ist vom Schwierigkeitsgrad her etwas für Fortgeschrittenen.

                                      Wenn Du noch Fragen hast, oder noch etwas fehlt bzw. nicht funktioniert dann kannst Du dich gerne wieder melden.

                                      Über ein Feedback, gerne auch mit Screenshots, freue ich mich immer sehr. Getreu dem Motto von John „Hannibal“ Smith: > ****Ich liebe es, wenn ein Plan funktioniert.****

                                      Und jetzt viel Erfolg damit.

                                      Gruß

                                      Garf

                                      1 Antwort Letzte Antwort
                                      0
                                      • inesaI Offline
                                        inesaI Offline
                                        inesa
                                        schrieb am zuletzt editiert von
                                        #19

                                        Danke Graf für deine Hilfe werde versuchen das in meinen flow mit einzubauen.

                                        Wie ich das von Dir verstanden habe würde das auch mit anderen flow's funktionieren ?

                                        Ich möchte bei mir zu Hause sämtliche Geräte in nod-red einbauen um es dann

                                        übersichtlich auf einen Tablet darzustellen. Ein schalten von Licht oder anderen Dingen

                                        war bisher nicht das Problem was ja auch recht simpel ist im Dashboard abzubilden.

                                        Die visuelle Darstellung von Messwerten bereit mir noch Schwierigkeiten.

                                        Eine simple Darstellung des aktuellen Wetters mit Openweather was mein erster Versuch

                                        der sich gut mit etwas code realisieren ließ

                                        return { payload: msg.payload.tempc};
                                        

                                        Ok jetzt mach ich mich an Arbeit nochmals vielen Dank

                                        Ines

                                        1 Antwort Letzte Antwort
                                        0
                                        • G Offline
                                          G Offline
                                          Garf
                                          schrieb am zuletzt editiert von
                                          #20

                                          @inesa:

                                          Ok jetzt mach ich mich an Arbeit nochmals vielen Dank `

                                          Und wie läuft es?

                                          Heute noch eine deutlich einfachere Lösung gefunden.

                                          3639_screen11.jpg

                                          3639_screen12.jpg

                                          Und hier noch der Flow

                                          [{"id":"8c0169c.096a698","type":"function","z":"1109363a.41365a","name":"Power","func":"var myObj, x;\nmyObj = msg.payload;\nx = myObj.ENERGY.Power;\nmsg.payload = x;\nreturn msg;","outputs":1,"noerr":0,"x":350,"y":24,"wires":[["147c1657.ec1dc2"]]},{"id":"147c1657.ec1dc2","type":"debug","z":"1109363a.41365a","name":"Power","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":540,"y":24,"wires":[]},{"id":"d6bdcf92.0373f","type":"inject","z":"1109363a.41365a","name":"","topic":"","payload":"{\"Time\":\"2018-06-08T15:22:49\",\"ENERGY\":{\"Total\":66.302,\"Yesterday\":0.41,\"Today\":0.268,\"Period\":1,\"Power\":18,\"Factor\":0.48,\"Voltage\":231,\"Current\":0.162}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":24,"wires":[["8c0169c.096a698","cdcf5d25.55b6a8"]]},{"id":"cdcf5d25.55b6a8","type":"function","z":"1109363a.41365a","name":"current","func":"var myObj, x;\nmyObj = msg.payload;\nx = myObj.ENERGY.Current;\nmsg.payload = x;\nreturn msg;","outputs":1,"noerr":0,"x":360,"y":60,"wires":[["cfa3e142.36cc68"]]},{"id":"cfa3e142.36cc68","type":"debug","z":"1109363a.41365a","name":"Strom","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":539,"y":60,"wires":[]}]
                                          

                                          Und genau diese Lösung hatte Je Cee bereits am 08.06. gepostet. Ist mir jetzt ein wenig peinlich, positiv betrachtet habe ich aber auch wieder eine Menge dazu gelernt. 😉

                                          @Jey Cee:

                                          msg.payload=msg.payload.ENERGY.Power;
                                          

                                          Damit müsste es gehen. `
                                          Ja, funktioniert einwandfrei.

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          677

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe