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. Werte aus JSON übernehmen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Werte aus JSON übernehmen

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

      Hi,

      ich möchte mehrere Werte aus einen JSON String als msg.payload an ein Objekt übergeben.

      Die msg.payload muss dazu wie folgt aussehen "CURRENT=WERT1&VOLTAGE=WERT2"

      Einzelne Werte aus einem JSON String zu extrahieren ist nicht das Problem, aber wie setzte ich merhere Werte als Variable in einem String zusammen?

      Ro75 mickym 2 Replies Last reply Reply Quote 0
      • Ro75
        Ro75 @LibertyX82 last edited by

        @libertyx82 'CURRENT='+WERT1+'&VOLTAGE='+WERT2

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

          @libertyx82 Na die WERT1 und WERT2 müssen unterschiedlicher Eigenschaften einer payload sein oder sie sind bereits Bestandteil eines Objektes. Ich würde vorschlagen Du machst das mal konkret - sprich woher kommen WERT1 und WERT2. Von function Nodes rate ich ab. Jedenfalls müssen beide Werte Bestandteil des eingehenden Nachrichtenobjektes sein oder Du holst es aus einem Kontext.

          L 1 Reply Last reply Reply Quote 0
          • L
            LibertyX82 @mickym last edited by

            @mickym
            Die Werte kommen als JSON String aus einem Node

            e1525912-bf14-4cb9-bae5-a957c7d58b06-image.png

            {"timestamp":"2023-02-18T21:32:15.000+01:00","power":271.85,"lastMeterConsumption":417.8481905,"accumulatedConsumption":4.857743,"accumulatedProduction":0,"accumulatedConsumptionLastHour":0.207066,"accumulatedProductionLastHour":0,"accumulatedCost":1.195093,"currency":"EUR","minPower":133.88,"averagePower":225.5,"maxPower":2855.5,"powerProduction":0,"minPowerProduction":0,"maxPowerProduction":0,"lastMeterProduction":0.2099675,"signalStrength":null}
            

            Verschiedene Werte hieraus sollen als msg.payload dann in ein iobroker Objekt geschrieben werden, dazu muss die msg.payload in dem Format "CURRENT=WERT1&VOLTAGE=WERT2" sein.

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

              @libertyx82 Na dann ist es einfach:

              aber sag doch einfach, welchen Wert1 Du als Current und welchen Du als Voltage haben willst?

              Na ja seis drum - man kann halt nur so gut helfen, wie man konkrete Fragen bekommt:

              061fc6d8-a2fc-40b3-8d1e-fc87341691ca-image.png

              4d7145cd-f568-4409-ba28-de1e502b22bb-image.png

              Wenn man das in einen Datenpunkt im iobroker schreiben will, dann jagt man es einfach durch die JSON Node. 😉

              Wie gesagt - das was Du willst musst halt konkret formulieren.

              414f3e3b-15ec-422d-be06-e368a0934dba-image.png

              L 1 Reply Last reply Reply Quote 0
              • L
                LibertyX82 @mickym last edited by LibertyX82

                @mickym
                Tatsächlich geht es um fast alle Werte aus dem JSON string.
                Aber das hat mir schon geholfen, muss es ja nur entwprechend anpassen 🙂

                Allerdings ist mir gerade aufgefallen, dass der Wert lastMeterConsumption die falsche Einheit hat und ich diesen durch 1000 teilen müsste.

                Gibt es auch eine Möglichkeit, dass nicht jede Nachricht aus dem Node bearbeitet wird sondern nur z.B. jede 5.?

                Great SUN mickym 2 Replies Last reply Reply Quote 0
                • Great SUN
                  Great SUN @LibertyX82 last edited by

                  @libertyx82 Ist das Thema jetzt gelöst, oder brauchst Du bei der Umsetzung noch Hilfe?

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

                    @libertyx82 Wie gesagt, wenn Du das als Objekte in iobroker schreiben willst - dann erzeugst Du String nicht selbst, sondern nutzt das Objekt. Macht einfach keinen Sinn sonst.

                    Wenn das nicht genau 5 Nachrichten sein müssen, dann empfehle ich Dir die Delay Node. um die Nachrichtenrate zu begrenzen und die Zwischennachrichten zu löschen.

                    Wenn Du unbedingt zählen willst - dann musst halt eine kleine function Node schreiben.

                    [
                       {
                           "id": "042e386430770412",
                           "type": "function",
                           "z": "289f539dcc33814e",
                           "name": "nur alle 5 Nachrichten senden",
                           "func": "var counter = context.get(\"counter\") || 0;\ncounter++;\n\nif (counter==5) counter = 0;\ncontext.set(\"counter\", counter);\nif (!counter) return msg;",
                           "outputs": 1,
                           "noerr": 0,
                           "initialize": "",
                           "finalize": "",
                           "libs": [],
                           "x": 2710,
                           "y": 4600,
                           "wires": [
                               []
                           ]
                       }
                    ]
                    

                    var counter = context.get("counter") || 0;
                    counter++;
                    
                    if (counter==5) counter = 0;
                    context.set("counter", counter);
                    if (!counter) return msg;
                    
                    L 1 Reply Last reply Reply Quote 0
                    • L
                      LibertyX82 @mickym last edited by

                      @mickym

                      Muss nicht exakt jede 5. sein, Delay Node mit 1msg/5s passt perfekt Danke!

                      Ich schreibe den Wert der msg.payload als Wert in ein iobroker objekt
                      fc009c84-8614-4916-a52d-4bc433b35c6b-image.png

                      Daher müsste ich den Wert von lastMeterConsumption davor umrechnen

                      Great SUN mickym 2 Replies Last reply Reply Quote 0
                      • Great SUN
                        Great SUN @LibertyX82 last edited by Great SUN

                        @libertyx82 Warum machst Du da kein Device draus oder ein Verzeichnis und speicherst die Werte einzeln?

                        -> SET_STATES
                            -> POWER
                                 241,02
                            -> CURRENT
                                 2,01
                        
                        mickym 1 Reply Last reply Reply Quote 0
                        • mickym
                          mickym Most Active @LibertyX82 last edited by mickym

                          @libertyx82 dann rechnest halt um
                          8d21f7c0-60aa-49f4-995a-64e2590594dc-image.png

                          L 1 Reply Last reply Reply Quote 0
                          • mickym
                            mickym Most Active @Great SUN last edited by

                            @great-sun Na dann kann er gleich meinen Subflow nehmen, der schreibt alle Werte eines JSON in einzelne Datenpunkte:

                            https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen

                            Great SUN 1 Reply Last reply Reply Quote 0
                            • Great SUN
                              Great SUN @mickym last edited by

                              @mickym Siehste, noch einfacher 🙂

                              1 Reply Last reply Reply Quote 0
                              • L
                                LibertyX82 @mickym last edited by LibertyX82

                                @mickym
                                Da hätte ich drauf kommen können

                                Da ich die Werte in iobroker nicht weiter bearbeite sondern lediglich in ein virtuelles Geräte meines SmartHome schreibe, reicht mir das.

                                Nochmals Danke!

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                613
                                Online

                                31.7k
                                Users

                                79.7k
                                Topics

                                1.3m
                                Posts

                                4
                                14
                                452
                                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