Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JSON String zu Datenpunkten

    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

    JSON String zu Datenpunkten

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

      Hallo, ich habe überhaupt keine Ahnung von JS.🤦
      Kann mir bitte jemand ein kleines Skript zusammenbasteln? Für viele hier bestimmt eine Kleinigkeit...
      Ich bekomme über MQTT folgende JSON in einem Datenpunkt erzeugt die ich zerlegen möchte:

      {
      "1.8.0":223945,
      "2.8.0":0,
      "3.8.1":1668,
      "4.8.1":64273,
      "1.7.0":3016,
      "2.7.0":0,
      "3.7.0":10,
      "4.7.0":146,
      "1.128.0":0
      }
      

      Nun möchte ich zb. den ersten Satz "1.8.0" in einen Datenpunkt Schreiben mit dem Wert "223945"
      Das gleiche mit den folgenden Sätzen in weitere Datenpunkte.
      Die Daten kommen aus einem AMIS Lesegerät für Smartmeter.
      Vielleicht hat so was schon mal jemand umgesetzt und kann mir da weiterhelfen.
      Danke im voraus.
      Grüße Alex

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @mayli01 last edited by paul53

        @mayli01

        const idJson = 'mqtt.0...'; // ID eintragen
        const id180 = '0_userdata.0...'; // eigener Datenpunkt vom Typ Zahl
        // usw.
        
        on(idJson, function(dp) {
           let obj = JSON.parse(dp.state.val);
           setState(id180, obj['1.8.0'], true);
           // usw.
        });
        
        mayli01 1 Reply Last reply Reply Quote 0
        • mayli01
          mayli01 @paul53 last edited by

          @paul53
          Vielen danke für die schnelle Antwort!
          Anscheinend bin ich zu blöd für sowas... hab jetzt für den ersten Datenpunkt folgendes eingetragen:

          const idJson = 'mqtt.0.AMIS-Alex-Haushalt.Haushalt'; // ID eintragen (Datenpunkt der JSON)
          const id180 = ' mqtt.0.AMIS-Alex-Haushalt.180'; // eigener Datenpunkt vom Typ Zahl (Datenpunkt vom ersten Wert 1.8.0)
          // usw.
           
          on(idJson, function(dp) {
             let obj = JSON.parse(dp.stat.val);
             setState(id180, obj['1.8.0'], true);
             // usw.
          });
          

          Leider wird nichts ausgegeben...

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @mayli01 last edited by paul53

            @mayli01 sagte:

            Leider wird nichts ausgegeben...

            Der Wert vom Json-Datenpunkt muss sich erst ändern, damit getriggert wird.

            const id180 = ' mqtt.0.AMIS-Alex-Haushalt.180';
            

            Vor mqtt ist ein Leerzeichen im String !

            Eigene Datenpunkte sollte man nicht im Namensraum eines Adapters erstellen, da der Adapter die Objekte verwaltet, also auch löschen kann.

            mayli01 1 Reply Last reply Reply Quote 0
            • mayli01
              mayli01 @paul53 last edited by

              @paul53
              Der JSON Datenpunkt ändert sich alle 3 sec.
              Habs jetzt noch einmal neu gemacht aber trotzdem ohne erfolg 🙆‍♂️

              const idJson = 'mqtt.0.AMIS-Alex-Haushalt.Haushalt'/*AMIS-Alex-Haushalt/Haushalt*/; // ID eintragen
              const id180 = '0_userdata.0.AMIS.180'/*Amis 180*/; // eigener Datenpunkt vom Typ Zahl
              // usw.
               
              on(idJson, function(dp) {
                 let obj = JSON.parse(dp.stat.val);
                 setState(id180, obj['1.8.0'], true);
                 // usw.
              });
              

              2020-09-17 15_39_13-objects - ioBroker.png
              2020-09-17 15_39_57-objects - ioBroker.png

              F 1 Reply Last reply Reply Quote 0
              • F
                fastfoot @mayli01 last edited by

                @mayli01 sagte in JSON String zu Datenpunkten:

                JSON.parse(dp.stat.val)

                schau doch mal was da falsch sein könnte 🙂

                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @fastfoot last edited by

                  @fastfoot sagte:

                  Schau doch mal was da falsch sein könnte

                  Sorry, ein e vergessen.

                     let obj = JSON.parse(dp.state.val);
                  
                  mayli01 F 2 Replies Last reply Reply Quote 0
                  • mayli01
                    mayli01 @paul53 last edited by

                    @paul53
                    Danke! Wenn man keine Ahnung von Js hat fällt mir sowas bestimmt nicht auf🤦 👍

                    1 Reply Last reply Reply Quote 0
                    • F
                      fastfoot @paul53 last edited by

                      @paul53 sagte in JSON String zu Datenpunkten:

                      Sorry, ein e vergessen.

                      ich hatte das dem TE unterstellt, mir war nicht bewusst das das von Dir kam. Bei so vielen hilfreichen Beiträgen darf das aber schonmal passieren👍

                      hanss 1 Reply Last reply Reply Quote 0
                      • hanss
                        hanss @fastfoot last edited by

                        @paul53
                        Hallo Paul,
                        Wie bekomme ich die darunterliegende id von
                        "javascript.0.haus.Heizung.OG_Kueche.FensterOffen"
                        also
                        "javascript.0.haus.Heizung.OG_Kueche"
                        ohne einfach den String begrenzen, weil die Länge variabel ist.
                        Vielen Dank.

                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @hanss last edited by paul53

                          @hanss sagte in JSON String zu Datenpunkten:

                          Wie bekomme ich die darunterliegende id

                          function parentId(id) {
                             return id.substring(0, id.lastIndexOf('.'));
                          }
                          
                          hanss 1 Reply Last reply Reply Quote 0
                          • hanss
                            hanss @paul53 last edited by

                            @paul53
                            vielen Dank, Du bist wirklich eine große Hilfe.

                            1 Reply Last reply Reply Quote 0
                            • B
                              bjappler last edited by bjappler

                              Hallo, ich habe diesen Beitrag gefunden und nutze das hier erwähnte script bisher erfolgreich für Datenpunkte als Zahl .
                              Ich habe folgende Frage:

                              • Wie kann ich die Untervariablen "ble temp" und "ble hum" auszulesen?

                              Nachfolgend mein Datenpunkt (über MQTT JSON) :

                              {
                                
                                "temp": 19.5,
                                "demand": 40,
                                "fan": "1",
                                "ble": {
                                  "temp": 21.11,
                                  "hum": 76.86,
                                  "bat": 2111
                                },
                                "autob": "A4C13885DD31",
                                "autor": 0,
                                "autot": 17.5,
                                "auto0": "00:00",
                                "auto1": "00:00",
                                "autop": false
                              }
                              

                              Die Haupvariablen z.B. "env" kann ich ohne Probleme wie folgt auslesen:

                              setState(id180, obj['env'], true);
                              

                              Wie müss der Code für "ble temp" aussehen?

                              Ich habe alles mögliche ausprobiert, leider klappt es z.B. mit dem nachfolgenden Code nicht

                              setState(id180, obj['ble.temp'], true);
                              

                              Ich freue mich auf Eure Antwort.

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @bjappler last edited by

                                @bjappler sagte: "ble temp" auszulesen?

                                setState(id180, obj.ble.temp, true);
                                
                                B 1 Reply Last reply Reply Quote 0
                                • B
                                  bjappler @paul53 last edited by

                                  @paul53 vielen Dank, das klappt! 🙂

                                  Gibt es eigentlich eine Möglichkeit das o.g. Script auch als Blockly aufzubauen, um den Wert "ble temp" auszulesen? Habe viele Scripte probiert, es hatte aber dann letzendlich nur dieses hier geklappt.

                                  Ansonsten werde ich dieses hier einfach weiter nutzen 😊

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

                                    @bjappler sagte in JSON String zu Datenpunkten:

                                    um den Wert "ble temp" auszulesen?

                                    der Block Attribut "ble.temp" von "json" liefert das
                                    Screenshot_20240804-144357_Firefox.jpg

                                    vorher Struktur ansehen
                                    Screenshot_20240804-144521_Firefox.jpg

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    868
                                    Online

                                    31.8k
                                    Users

                                    80.0k
                                    Topics

                                    1.3m
                                    Posts

                                    6
                                    16
                                    2356
                                    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