Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Regex Ergebnis Problem

    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

    Regex Ergebnis Problem

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

      Hallo ich versuche einen Text mit Regex zu parsen.
      Im prinzip funktioniert es aber beim Zugriff auf das Ergebnis bekomme ich immer errors:

      Das ist der zu pasende Text: 1":{"Id":"01131B932F1C","Temperature":85.0},"
      hier der code:
      var reg = new RegExp("Id":"(............)");
      var ergebnis = reg.exec(single_values[i]);
      console.log(ergebnis);

      console ---> ['Id':'01131B932F1C','01131B932F1C'] --> passt

      wenn ich auf ergebnis[1], oder ergebnis.entries , oder ergebnis.entries[1] zugreifen möchte, kommt ein error.

      Kann mir hier jemand helfen ?

      viele Grüße

      Andreas

      mickym liv-in-sky 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @AndreasE112 last edited by

        @andrease112 Das ist ein JSON String - warum wandelst Du das nicht in JS Objekte um (parse und greifst auf die Werte zu?

        1 Reply Last reply Reply Quote 0
        • liv-in-sky
          liv-in-sky @AndreasE112 last edited by liv-in-sky

          @andrease112

          zum einem - code bitte in code tags einfügen https://forum.iobroker.net/post/394912

          
          
          let single_values=[' 1":{"Id":"01131B932F1C","Temperature":85.0},"']
          
          var reg = new RegExp('Id":"(............)');
          var ergebnis = reg.exec(single_values[0]);
          console.log(ergebnis);
          for(let u=0;u<ergebnis.length;u++){
          console.log(ergebnis[u]);}
          console.log(ergebnis.length);
          
          

          da fehlt doch noch die schleife (single_values[i]) - was soll ergebnis.entries sein ?

          Image 4.png

          die idee von @mickym gefällt mir auch besser

          1 Reply Last reply Reply Quote 0
          • A
            AndreasE112 last edited by

            Ich gebs ja zu... ich kann eigentlich nur C programmieren.... 😉 .... so modernes "Zeug" ist zwar cool übersteigt aber mein wissen.

            entries wird vom editor vorgeschlagen... deswegen hab ich es mal probiert.

            Ich hab keine Ahnung von JSON.

            Vielleicht könnt ihr mir ja sagen wie ich das am Besten auflöse:
            ich bekomme von "Tasmota" den folgenden String:

            {"Time":"2021-09-28T10:26:32","DS18B20-1":{"Id":"01131B932F1C","Temperature":85.0},"DS18B20-2":{"Id":"01131E9BA79C","Temperature":85.0},"DS18B20-3":{"Id":"0213169562AA","Temperature":21.6},"DS18B20-4":{"Id":"021316AF66AA","Temperature":73.2},"DS18B20-5":{"Id":"02131692A9AA","Temperature":69.9},"DS18B20-6":{"Id":"01131E80E9A7","Temperature":27.1},"DS18B20-7":{"Id":"01131E6FB0FF","Temperature":30.4},"ESP32":{"Temperature":53.3},"TempUnit":"C"}

            und möchte diese in einzelne Objekte zerlegen.
            Javascript.Tasmotaxxx.DS18B20-1.id und temp

            mickym liv-in-sky 3 Replies Last reply Reply Quote 0
            • mickym
              mickym Most Active @AndreasE112 last edited by mickym

              @andrease112 sagte in Regex Ergebnis Problem:

              {"Time":"2021-09-28T10:26:32","DS18B20-1":{"Id":"01131B932F1C","Temperature":85.0},"DS18B20-2":{"Id":"01131E9BA79C","Temperature":85.0},"DS18B20-3":{"Id":"0213169562AA","Temperature":21.6},"DS18B20-4":{"Id":"021316AF66AA","Temperature":73.2},"DS18B20-5":{"Id":"02131692A9AA","Temperature":69.9},"DS18B20-6":{"Id":"01131E80E9A7","Temperature":27.1},"DS18B20-7":{"Id":"01131E6FB0FF","Temperature":30.4},"ESP32":{"Temperature":53.3},"TempUnit":"C"}

              Du nimmst immer als erstes einen JSON Formatierer.

              Mit

              var obj = parse("{"Time":"2021-09-28T10:26:32","DS18B20-1":{"Id":"01131B932F1C","Temperature":85.0},"DS18B20-2":{"Id":"01131E9BA79C","Temperature":85.0},"DS18B20-3":{"Id":"0213169562AA","Temperature":21.6},"DS18B20-4":{"Id":"021316AF66AA","Temperature":73.2},"DS18B20-5":{"Id":"02131692A9AA","Temperature":69.9},"DS18B20-6":{"Id":"01131E80E9A7","Temperature":27.1},"DS18B20-7":{"Id":"01131E6FB0FF","Temperature":30.4},"ESP32":{"Temperature":53.3},"TempUnit":"C"}");
              

              oder falls das direkt als Objekt rausgenommen kommt und nicht als String - brauchst die Umwandlung natürlich nicht.
              https://www.w3schools.com/js/js_json_parse.asp

              Am Besten nutzt Du so einen JSON Formatter. Ich nehm den hier: https://jsonformatter.org/

              Im Tree-View kannst Du dann wunderbar die Hierachie erkennen:

              8c5bd006-2571-462f-99d4-275cb4e9aa33-image.png

              Auf den grünen Wert greifst dann mit

              obj.DS18B20-1.ID
              

              zu bzw. mit

              obj.DS18B20-1.Temperature
              

              auf die Temperatur usw.

              A 1 Reply Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky @AndreasE112 last edited by liv-in-sky

                @andrease112 sagte in Regex Ergebnis Problem:

                {"Time":"2021-09-28T10:26:32","DS18B20-1":{"Id":"01131B932F1C","Temperature":85.0},"DS18B20-2":{"Id":"01131E9BA79C","Temperature":85.0},"DS18B20-3":{"Id":"0213169562AA","Temperature":21.6},"DS18B20-4":{"Id":"021316AF66AA","Temperature":73.2},"DS18B20-5":{"Id":"02131692A9AA","Temperature":69.9},"DS18B20-6":{"Id":"01131E80E9A7","Temperature":27.1},"DS18B20-7":{"Id":"01131E6FB0FF","Temperature":30.4},"ESP32":{"Temperature":53.3},"TempUnit":"C"}

                beispiel:

                let myObjText={"Time":"2021-09-28T10:26:32","DS18B20-1":{"Id":"01131B932F1C","Temperature":85.0},"DS18B20-2":{"Id":"01131E9BA79C","Temperature":85.0},"DS18B20-3":{"Id":"0213169562AA","Temperature":21.6},"DS18B20-4":{"Id":"021316AF66AA","Temperature":73.2},"DS18B20-5":{"Id":"02131692A9AA","Temperature":69.9},"DS18B20-6":{"Id":"01131E80E9A7","Temperature":27.1},"DS18B20-7":{"Id":"01131E6FB0FF","Temperature":30.4},"ESP32":{"Temperature":53.3},"TempUnit":"C"}
                
                 var keys = Object.keys(myObjText);
                 
                for(let u=0;u<keys.length;u++){
                    if(keys[u].includes('DS18'))
                    log(myObjText[keys[u]].Id)
                }
                
                for(let u=0;u<keys.length;u++){
                    if(keys[u].includes('DS18'))
                    log(myObjText[keys[u]].Temperature)
                }
                
                
                

                Image 5.png

                1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @AndreasE112 last edited by liv-in-sky

                  @andrease112

                  jetzt muss du aber noch definieren, was du mit den einzelnen werten machen willst - in eine tabelle schreiben - in ein json-widget ausgeben (vis) oder datenpunkte erstellen für jeden einzelnen sensor, ...

                  1 Reply Last reply Reply Quote 0
                  • A
                    AndreasE112 @mickym last edited by

                    @mickym Hallo Micky... der Weg gefällt mir, leider funktioniert es noch nicht, ich hab nen compiler error.
                    woher weiss denn der Compiler dass es Id gibt ?

                    on({id: 'mqtt.'+instance+'.tele.tasmota_5D68E4.SENSOR', change: 'any'}, function (obj) {
                    var  Tasmota_Sensor_result =  getState('mqtt.'+instance+'.tele.tasmota_5D68E4.SENSOR').val;
                    console.log(Tasmota_Sensor_result);
                    var test = JSON.parse(Tasmota_Sensor_result);
                    var ergebnis = test.DS18B20-1.Id;
                    console.log(ergebnis);
                    
                    });
                    

                    script.js.Heizung.Pufferspeicher_temperaturen compile failed: at script.js.Heizung.Pufferspeicher_temperaturen:5

                    liv-in-sky OliverIO 2 Replies Last reply Reply Quote 0
                    • liv-in-sky
                      liv-in-sky @AndreasE112 last edited by

                      @andrease112 sagte in Regex Ergebnis Problem:

                      ergebnis = test.DS18B20-1.Id;

                      probier mal

                      ergebnis = test['DS18B20-1'].Id;
                      
                      A 1 Reply Last reply Reply Quote 0
                      • A
                        AndreasE112 @liv-in-sky last edited by

                        @liv-in-sky
                        das geht auch nicht, aber

                        var ergebnis = test.DS18B20-1.['Id']; 
                        

                        geht.

                        Das Ergebnis ist aber leider NaN.

                        liv-in-sky 1 Reply Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky @AndreasE112 last edited by liv-in-sky

                          @andrease112

                          das geht nicht , weil das -1 im namen als math-operation gesehen wird - das sieht man im editor - die "-1" von "DS18B20-1" ist eine berechnung. es ist immer doof, wenn object-keys einen bindestrich enthalten

                          bei mir geht es mit :

                          log( myObjText['DS18B20-1'].Id); 
                          

                          Image 6.png

                          1 Reply Last reply Reply Quote 0
                          • A
                            AndreasE112 last edited by

                            @andrease112 sagte in Regex Ergebnis Problem:

                            var ergebnis = test.DS18B20-1.['Id'];

                            Ja ich hatte einen . zu viel nach dem Variablennamen... jetzt funktionierts . Super 👍

                            1 Reply Last reply Reply Quote 0
                            • OliverIO
                              OliverIO @AndreasE112 last edited by

                              @andrease112 said in Regex Ergebnis Problem:

                              woher weiss denn der Compiler dass es Id gibt ?

                              Weiß er nicht, javascript wird teilweise kompiliert und teilweise interpretiert.
                              Er weiß es zur Laufzeit und wirft dann den Fehler aus.
                              Die Meckerlinien im javascript-adapter darf man nicht immer so vertrauen.
                              Die Meckern manchmal auch wenn es richtig ist.
                              Nur der Fehler der unten im log angezeigt wird ist dann real

                              1 Reply Last reply Reply Quote 0
                              • A
                                AndreasE112 last edited by

                                Hallo nochmal,
                                ich versuche gerade eine Website mit Regex zu parsen.
                                Ich finde auch die passenden Elemente, aber wie kann ich abfragen wieviele matches es gibt ?

                                .lenght funktioniert nicht...

                                                var reg = new RegExp('(?:[0-9].[0-9]{1,4}&nbsp;&deg;C)',"g");
                                                var ergebnis_temperaturen = body.match(reg);
                                                console.log( ergebnis_temperaturen);
                                log --> ['3.9&nbsp;&deg;C','3.4&nbsp;&deg;C','2.1&nbsp;&deg;C','3.4&nbsp;&deg;C','1.9&nbsp;&deg;C']
                                                console.log( ergebnis_temperaturen.lenght );
                                log--> undefined
                                
                                liv-in-sky 1 Reply Last reply Reply Quote 0
                                • liv-in-sky
                                  liv-in-sky @AndreasE112 last edited by

                                  @andrease112 sagte in Regex Ergebnis Problem:

                                  lenght

                                  length

                                  A 1 Reply Last reply Reply Quote 0
                                  • A
                                    AndreasE112 @liv-in-sky last edited by

                                    @liv-in-sky Danke .... es war natütlich der Typo... besser nicht mit Erkältung programmieren....

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

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    848
                                    Online

                                    31.8k
                                    Users

                                    80.0k
                                    Topics

                                    1.3m
                                    Posts

                                    4
                                    16
                                    450
                                    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