Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Problem]Daten aus JSON nutzen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Problem]Daten aus JSON nutzen

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

      Hallo Leute, ich bin leider noch relativ unerfahren in der Nutzung mit Node-Red.

      Ich stehe gerade vor Aufgabe Daten die mir per MQTT und in JSON Format geschickt werden Auszuwerten, und jetzt stehe ich vor folgendem Problem das ich nicht weiß wie ich gezielt Werte aus dem JASON abfragen kann. Die folgende Abbildung zeigt den momentanen Aufbau meiner Testasusgabe, der Inject Node simuliert dabei die MQTT Nachricht. Die eingehende Nachricht sieht wie folgt aus.

      {"A-01 ":{"TAG":" ","Ziel":"ort ","DATUM":"12.04.2018","Zeit":"0"}}

      6860_image002.png_01d3d268.6b8dc040.png

      Der json Node formatiert mir nun entsprechend die eingehende msg.payload, so dass mir der debuger folgendes Ergebnis ausgibt.

      6860_image001.png_01d3d269.37674470.png

      Ich möchte nun gerne nur den Punkt DATUM ausgegeben bekommen, also hab ich einen Funktions-Node wie folgt eingebaut

      6860_x.jpg

      und folgende Funktion definiert

      var test = msg.payload.A-01.DATUM;

      msg.payload = test;

      return msg;

      Leider bekomme ich immer folgende Fehlermeldung

      6860_image002.png_01d3d269.96c92500.png

      Vielleicht kann mir ja jemand von euch erklären wo mein Fehler ist und wie ich den Punkt DATUM auslesen kann um ihn später zu verwenden.

      Vielen Dank für alle Beiträge bereits im vorraus!

      1 Reply Last reply Reply Quote 0
      • R
        rewenode last edited by

        Stell mal den Export deines Flow rein.

        Da ist ein Leerzeichen hinter A-01. Falls das so sein soll, kannst du das datum z.B. so erhalten:

        [{"id":"9a7aa50a.7d73c8","type":"inject","z":"29677dc5.77b46a","name":"","topic":"","payload":"{\"A-01 \":{\"TAG\":\" \",\"Ziel\":\"ort \",\"DATUM\":\"12.04.2018\",\"Zeit\":\"0\"}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":122.5,"y":1051,"wires":[["e86a90de.a62158"]]},{"id":"1c8163a5.e045e4","type":"debug","z":"29677dc5.77b46a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":482,"y":1054,"wires":[]},{"id":"e86a90de.a62158","type":"change","z":"29677dc5.77b46a","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.'A-01 '.DATUM","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":289.5,"y":1053,"wires":[["1c8163a5.e045e4"]]}]
        
        1 Reply Last reply Reply Quote 0
        • S
          SomeThingNice last edited by

          Erstmal vielen Dank an rewenode.

          Hier ist der Export von meinem Flow.

          [{"id":"15b9b55.6925b4b","type":"inject","z":"3bd6fff6.6e10c8","name":"","topic":"","payload":" {\"A-01 \":{\"TAG\":\" \",\"Ziel\":\"ort \",\"DATUM\":\"12.04.2018\",\"Zeit\":\"0\"}}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":"","x":370,"y":140,"wires":[["6af5d208.dfae8c"]]},{"id":"6af5d208.dfae8c","type":"json","z":"3bd6fff6.6e10c8","name":"","property":"payload","action":"","pretty":false,"x":578,"y":141,"wires":[["95f4603f.f8a958"]]},{"id":"95f4603f.f8a958","type":"debug","z":"3bd6fff6.6e10c8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":818,"y":142,"wires":[]}]
          

          Ja das Leerzeichen dahinter hab ich berücksichtigt, leider muss das so sein da ich die Daten so zugesandt bekomme.

          Gibt es eigentlich auch eine Lösung ohne Verwendung eines Change Bausteins?

          1 Reply Last reply Reply Quote 0
          • R
            rewenode last edited by

            Klar, functions-node ist in diesem einfachen Fall genauso einfach:

            [{"id":"9a7aa50a.7d73c8","type":"inject","z":"29677dc5.77b46a","name":"","topic":"","payload":"{\"A-01 \":{\"TAG\":\" \",\"Ziel\":\"ort \",\"DATUM\":\"12.04.2018\",\"Zeit\":\"0\"}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":122.5,"y":1051,"wires":[["d8d3a757.8a1f78"]]},{"id":"d8d3a757.8a1f78","type":"function","z":"29677dc5.77b46a","name":"per f-node","func":"let d = msg.payload['A-01 '].DATUM;\nmsg.payload = d;\n\nreturn msg;","outputs":1,"noerr":0,"x":297.5,"y":1052,"wires":[["7dc8cf94.7f6c8"]]},{"id":"7dc8cf94.7f6c8","type":"debug","z":"29677dc5.77b46a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":486,"y":1052,"wires":[]}]
            

            Warum kommt eigentlich der Change-node nicht in Frage?

            T 1 Reply Last reply Reply Quote 0
            • T
              ThomyTP @rewenode last edited by ThomyTP

              @rewenode
              Ich habe heute mal versuch meinen MQTT / Json String auszuwerten:

              So sind der String aus:
              {'data': [{'plantMoneyText': '9.2 (€)', 'plantName': 'xxx', 'plantId': '23422', 'isHaveStorage': 'false', 'todayEnergy': '2 kWh', 'totalEnergy': '33.6 kWh', 'currentPower': '164.2 W'}], 'totalData': {'currentPowerSum': '164.2 W', 'CO2Sum': '0 T', 'isHaveStorage': 'false', 'eTotalMoneyText': '9.2 (€)', 'todayEnergySum': '2 kWh', 'totalEnergySum': '33.6 kWh'}

              Ich wollten den Wert current Power auslesen.

              Leider bin ich auf ganzer Breite gescheitert.
              Wenn ich nur perr MQTT die Daten auf den Debuger lege, bekomme ich folgende Meldung:
              "Unexpected token ' in JSON at position 1"

              Als Test habe ich mal versucht einfach nur das Item auszulesen.

              [{"id":"8a70329b.ef589","type":"tab","label":"Flow 6","disabled":false,"info":""},{"id":"60f6dbff.eb65cc","type":"mqtt in","z":"8a70329b.ef589","name":"","topic":"inverter/plant_info","qos":"2","datatype":"json","broker":"c51b082c.bcad68","x":490,"y":180,"wires":[["9831eeb.105cb9"]]},{"id":"9831eeb.105cb9","type":"function","z":"8a70329b.ef589","name":"","func":"\nlet d = msg.payload['data'].currentPower;\nmsg.payload = d;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":700,"y":180,"wires":[["ab1699ec.3f381"]]},{"id":"ab1699ec.3f381","type":"debug","z":"8a70329b.ef589","name":"post response","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":900,"y":180,"wires":[]},{"id":"c51b082c.bcad68","type":"mqtt-broker","name":"openhab","broker":"192.168.111.128","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
              

              Hierbei bekomme ich:
              "Failed to parse JSON string"

              Nun stehe ich vor einen Rätsel..

              Hat jemand wohl eine Idee?

              Vielen Dank..

              R 1 Reply Last reply Reply Quote 0
              • R
                rewenode @ThomyTP last edited by

                @thomytp Ich weis jetzt nicht, wo dein String herkommt, Aber die einfachen Hochkommas müssen Doppelte sein. Und am Ende fehlt eine schließende geschweifte Klammer:

                {
                  "data": [
                    {
                      "plantMoneyText": "9.2 (€)",
                      "plantName": "xxx",
                      "plantId": "23422",
                      "isHaveStorage": "false",
                      "todayEnergy": "2 kWh",
                      "totalEnergy": "33.6 kWh",
                      "currentPower": "164.2 W"
                    }
                  ],
                  "totalData": {
                    "currentPowerSum": "164.2 W",
                    "CO2Sum": "0 T",
                    "isHaveStorage": "false",
                    "eTotalMoneyText": "9.2 (€)",
                    "todayEnergySum": "2 kWh",
                    "totalEnergySum": "33.6 kWh"
                  }
                }
                

                dann sollte das auch klappen.

                Wenn du es mit NodeRed machen willst, dann z.B. so:

                [
                   {
                       "id": "d93e3783.0c3008",
                       "type": "tab",
                       "label": "Flow 2",
                       "disabled": false,
                       "info": ""
                   },
                   {
                       "id": "55aec5b6.5ea1a4",
                       "type": "inject",
                       "z": "d93e3783.0c3008",
                       "name": "",
                       "props": [
                           {
                               "p": "payload"
                           },
                           {
                               "p": "topic",
                               "vt": "str"
                           }
                       ],
                       "repeat": "",
                       "crontab": "",
                       "once": false,
                       "onceDelay": 0.1,
                       "topic": "",
                       "payload": "{'data': [{'plantMoneyText': '9.2 (€)', 'plantName': 'xxx', 'plantId': '23422', 'isHaveStorage': 'false', 'todayEnergy': '2 kWh', 'totalEnergy': '33.6 kWh', 'currentPower': '164.2 W'}], 'totalData': {'currentPowerSum': '164.2 W', 'CO2Sum': '0 T', 'isHaveStorage': 'false', 'eTotalMoneyText': '9.2 (€)', 'todayEnergySum': '2 kWh', 'totalEnergySum': '33.6 kWh'}}",
                       "payloadType": "str",
                       "x": 420,
                       "y": 140,
                       "wires": [
                           [
                               "d65131d.704c25",
                               "62838cef.a94bc4"
                           ]
                       ]
                   },
                   {
                       "id": "e390c910.325d28",
                       "type": "debug",
                       "z": "d93e3783.0c3008",
                       "name": "",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "false",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 670,
                       "y": 580,
                       "wires": []
                   },
                   {
                       "id": "99207548.64ef78",
                       "type": "json",
                       "z": "d93e3783.0c3008",
                       "name": "JSON-String => javaScript-Objekt",
                       "property": "payload",
                       "action": "obj",
                       "pretty": false,
                       "x": 340,
                       "y": 500,
                       "wires": [
                           [
                               "35915391.5305d4",
                               "d37dd080.68411"
                           ]
                       ]
                   },
                   {
                       "id": "35915391.5305d4",
                       "type": "change",
                       "z": "d93e3783.0c3008",
                       "name": "msg.payload.data[0].currentPower => msg.payload",
                       "rules": [
                           {
                               "t": "set",
                               "p": "payload",
                               "pt": "msg",
                               "to": "payload.data[0].currentPower",
                               "tot": "msg"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 310,
                       "y": 580,
                       "wires": [
                           [
                               "e390c910.325d28"
                           ]
                       ]
                   },
                   {
                       "id": "d65131d.704c25",
                       "type": "change",
                       "z": "d93e3783.0c3008",
                       "name": "Konvertiere alle ' nach \"",
                       "rules": [
                           {
                               "t": "change",
                               "p": "payload",
                               "pt": "msg",
                               "from": "'",
                               "fromt": "str",
                               "to": "\"",
                               "tot": "str"
                           }
                       ],
                       "action": "",
                       "property": "",
                       "from": "",
                       "to": "",
                       "reg": false,
                       "x": 370,
                       "y": 360,
                       "wires": [
                           [
                               "99207548.64ef78",
                               "4c0e8fba.aacef"
                           ]
                       ]
                   },
                   {
                       "id": "62838cef.a94bc4",
                       "type": "debug",
                       "z": "d93e3783.0c3008",
                       "name": "",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "false",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 670,
                       "y": 140,
                       "wires": []
                   },
                   {
                       "id": "4c0e8fba.aacef",
                       "type": "debug",
                       "z": "d93e3783.0c3008",
                       "name": "",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "false",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 670,
                       "y": 360,
                       "wires": []
                   },
                   {
                       "id": "d37dd080.68411",
                       "type": "debug",
                       "z": "d93e3783.0c3008",
                       "name": "",
                       "active": true,
                       "tosidebar": true,
                       "console": false,
                       "tostatus": false,
                       "complete": "false",
                       "statusVal": "",
                       "statusType": "auto",
                       "x": 670,
                       "y": 500,
                       "wires": []
                   }
                ]
                

                2021-03-21_11-55-44.jpg

                T 1 Reply Last reply Reply Quote 0
                • T
                  ThomyTP @rewenode last edited by ThomyTP

                  @rewenode said in [Problem]Daten aus JSON nutzen:

                  Hallo,
                  vielen Dank schon mal für den Tip,das klappt ja schon mal ganz gut,..
                  Super respekt für die Top aufbereitung.. Ich habe noch nie einen Flow gemacht, daher auch meine doofen Fragen 🙂
                  Die Daten kommen von der Growatt API über MQTT:
                  Ich hatte leider nicht gesamten String kopiert, da kommt noch ein success am Ende was nun stresst.

                  {'data': [{'plantMoneyText': '9.6 (â^b¬)', 'plantName': 'xxxxx', 'plantId': '234482', 'isHaveStorage': 'false', 'todayEnergy': '1.1 kWh', 'totalEnergy': '35 kWh','currentPower': '0 W'}], 'totalData': {'currentPowerSum': '0 W', 'CO2Sum': '0 T', 'isHaveStorage': 'false', 'eTotalMoneyText': '9.6 (â^b¬)', 'todayEnergySum': '1.1 kWh', 'totalEnergySum': '35 kWh'}, 'success': True}
                  

                  Hier bekomme ich nun die Fehlermeldung
                  "Unexpected token T in JSON at position 378"

                  Im anschluss möchte ich die Daten an Volkszähler geben um diese zu visualiserern.

                  Ich hatte da an so einen Flow gedacht, bin ich da auf dem richtigem Weg?

                  
                  [{"id":"20226fae.f5f3f","type":"tab","label":"Flow 10","disabled":false,"info":""},{"id":"522399fd.b1ca3","type":"http request","z":"20226fae.f5f3f","name":"volkszaehler post","method":"POST","ret":"obj","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","x":750,"y":720,"wires":[["987b67cb.1a4978"]]},{"id":"1a4ac21f.e52006","type":"template","z":"20226fae.f5f3f","name":"post data url","field":"url","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"http://localhost/middleware.php/data/{{uuid}}.json?ts={{timestamp}}&value={{payload}}","x":730,"y":640,"wires":[["81bf5d64.86db58"]]},{"id":"c46f4ca6.8a3278","type":"json","z":"20226fae.f5f3f","name":"","property":"payload","action":"","pretty":false,"x":1190,"y":640,"wires":[["522399fd.b1ca3"]]},{"id":"987b67cb.1a4978","type":"debug","z":"20226fae.f5f3f","name":"post response","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1040,"y":720,"wires":[]},{"id":"81bf5d64.86db58","type":"change","z":"20226fae.f5f3f","name":"","rules":[{"t":"delete","p":"payload","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":980,"y":640,"wires":[["c46f4ca6.8a3278"]]},{"id":"4997c860.5affe","type":"change","z":"20226fae.f5f3f","name":"set uuid / timestamp","rules":[{"t":"set","p":"uuid","pt":"msg","to":"c0e80280-8978-11eb-aed4-7bf6c054beaa","tot":"str"},{"t":"set","p":"timestamp","pt":"msg","to":"","tot":"date"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":480,"wires":[["1a4ac21f.e52006"]]},{"id":"69a40557.f8ee4c","type":"debug","z":"20226fae.f5f3f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":550,"y":540,"wires":[]},{"id":"d07f3214.8ebcf","type":"json","z":"20226fae.f5f3f","name":"JSON-String => javaScript-Objekt","property":"payload","action":"obj","pretty":false,"x":220,"y":400,"wires":[["98cccdab.a3e568","43cf62d3.bdd86c"]]},{"id":"98cccdab.a3e568","type":"change","z":"20226fae.f5f3f","name":"msg.payload.data[0].currentPower => msg.payload","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.data[0].currentPower","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":190,"y":480,"wires":[["69a40557.f8ee4c","4997c860.5affe"]]},{"id":"cb896446.9a8198","type":"change","z":"20226fae.f5f3f","name":"Konvertiere alle ' nach \"","rules":[{"t":"change","p":"payload","pt":"msg","from":"'","fromt":"str","to":"\"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":260,"wires":[["d07f3214.8ebcf","5c34a8c0.88359"]]},{"id":"7f22423.5da973c","type":"debug","z":"20226fae.f5f3f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":550,"y":40,"wires":[]},{"id":"5c34a8c0.88359","type":"debug","z":"20226fae.f5f3f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":550,"y":260,"wires":[]},{"id":"43cf62d3.bdd86c","type":"debug","z":"20226fae.f5f3f","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":550,"y":400,"wires":[]},{"id":"70b8b8b.4428e48","type":"mqtt in","z":"20226fae.f5f3f","name":"","topic":"inverter/plant_info","qos":"2","datatype":"auto","broker":"c51b082c.bcad68","x":170,"y":40,"wires":[["7f22423.5da973c","cb896446.9a8198"]]},{"id":"c51b082c.bcad68","type":"mqtt-broker","name":"ziel","broker":"192.168.111.128","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
                  
                  R 1 Reply Last reply Reply Quote 0
                  • R
                    rewenode @ThomyTP last edited by

                    @thomytp
                    Das

                    'success': True
                    

                    muss in Anführungsstrichen stehen. Also

                    'success': 'True'
                    

                    oder

                    'success': "True"
                    

                    Du kannst das zwar im change-node berücksichtigen, aber wenn das außer True noch andere Fälle vorkommen können, musst du alle Fälle berücksichtigen.
                    Könnte man aber sicher einfacher mit regEx lösen, aber da bin ich nicht so der Experte, dass kann dir vlt. jemand anderes aus dem Ärmel schütteln.

                    Bildschirmfoto 2021-03-21 um 20.32.36.png

                    Zu der Weiterverarbeitung Richtung Volkszähler kann ich leider nicht weiterhelfen, da habe ich noch nie was mit gemacht.

                    T 1 Reply Last reply Reply Quote 0
                    • T
                      ThomyTP @rewenode last edited by

                      @rewenode
                      perfekt, vielen Dank, so langsam verstehe ich node-Red.

                      Nun muss ich es noch mit dem Volkszähler hinbekommen.. aber das wird sicher auch
                      🙂

                      1 Reply Last reply Reply Quote 0
                      • PLCHome 0
                        PLCHome 0 Developer last edited by

                        @thomytp said in [Problem]Daten aus JSON nutzen:

                        Die Daten kommen von der Growatt API über MQTT:

                        Schon mal den ioBroker Growatt Adapter getestet?

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        414
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        4
                        10
                        3853
                        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