Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Schleife über alle Datenpunkte

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Schleife über alle Datenpunkte

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

      @a200:

      Hallo,

      gibt es eine Möglichkeit eine Schleife über alle Datenpunkte zu erzeugen? So könnte ich eine Liste inkl. Werte erstellen, DP löschen usw.

      Danke für eure Tipps.

      a200. `
      Kannst du das genauer beschreiben?

      1 Reply Last reply Reply Quote 0
      • a200
        a200 last edited by

        ich würde gerne z.B. einen Array mit allen Datenpunkten haben.

        "admin.0.info.updatesList","admin.0.info.updatesNumber","javascript.0","javascript.0.eBus"….

        Damit wäre ich in der Lage per Skript alle Datenpunkte auslesen, ausgeben, manipulieren, löschen...

        Hoffe, dass ich mich etwas klarer ausgedrückt habe?! :roll:

        a200

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

          Für ein Array mit den statischen Objekten (ohne state) aller Datenpunkte:

          var objects = [];
          
          $('state').each(function (id, i) {
              var obj = getObject(id);
              if (obj) objects[i] = obj;
          });
          

          Für ein Array inklusive der Zustände:

          var objects = [];
          
          $('state').each(function (id, i) {
              var obj = getObject(id);
              if (obj) {
                  obj.state = getState(id);
                  objects[i] = obj;
              }
          });
          
          R 1 Reply Last reply Reply Quote 0
          • a200
            a200 last edited by

            @paul53:

            Für ein Array mit den statischen Objekten (ohne state) aller Datenpunkte:

            ! `var objects = new Array; ! $('state').each(function (id, i) { var obj = getObject(id); if (obj) objects[i] = obj; });` Für ein Array inklusive der Zustände: `~~[code]~~var objects = new Array; ! $('state').each(function (id, i) { var obj = getObject(id); if (obj) { obj.state = getState(id); objects[i] = obj; } });` ! Super. Vielen Dank. Ich werde es am Wochenende testen. ! LG, ! a200.[/i][/code][/i] `

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

              Hallo paul53, leider hat ja a200 nie geschrieben, wie es bei ihm funktioniert hat. Da ich vor einem nahezu identischen Problem stehe, nehme ich den über die Forum-Suchfunktion gefundenen Faden mal wieder auf.

              Leider komme ich mit Deinem Script nicht ganz zurecht, bzw. bekommen nur Fehlermeldungen. Es scheint mir aber sehr passend für mein Problem zu sein, ein Array zu bauen und damit dann ein JSON-Tabellen-String zu erstellen, das ich dann noch in einen Datenpunkt schreiben muss, um es dann in VIS als Tabelle anzeigen zu können.

              Ich fülle derzeit minütlich mit dem Parser eine ganze Latte Datenpunkte (Abfahrtszeiten des ÖPNV) und möchte diese dann am Ende in VIS als Tabelle darstellen.

              Scrrenshot

              Derzeit habe ich unter parser.0 nur Datenpunkte, die mit "DVB_ZS" beginnen. In Zukunft kommen da aber sicherlich auch noch andere hinzu. Ich brauche nun nur die "DVB_ZS" Datenpunkte aus dem Objekt parser.0.

              Der letzte String im Namen ["1a", "1b" ... ]

              • gibt mit der Zahl an, die wievielt-nächste Verbindung das ist (später in der VIS-Tabelle die Zeile).
              • gibt mit dem Buchstaben die Liniennummer, Abfahrtszeit, Bahnsteig, Endhaltestelle etc. an (später in der VIS-Tabelle die Spalte)

              an.

              Ich scheitere schon daran Dein RegEx wirklich zu verstehen und bekomme auch noch nicht mal Dein Script - auf die für mich notwendige Untermenge an Datenpunkten - reduziert.

              Kannst Du mir da bitte weiterhelfen? Vielen Dank.

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

                @radioman sagte:

                bekommen nur Fehlermeldungen.

                Durch die Umstellung des Forums haben sich Fehler eingeschlichen. Habe es eben repariert.

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

                  @paul53

                  Habe es eben repariert.

                  Danke, soweit hatte ich Deinen Code testweise gestern auch schon bei meiner Fehlersuche minimiert. Leider habe ich durch die anderen Adapter (rflink, deconz, Sonos, DasWetter, Javasript) so viele Objekte (scheinbar knapp 5000 - siehe rechts oben im Screenshot), dass ein Script mit nur Deinen Zeilen

                  var objects = [];
                   
                  $('state').each(function (id, i) {
                      var obj = getObject(id);
                      if (obj) {
                          obj.state = getState(id);
                          objects[i] = obj;
                      }
                  });
                  

                  (auf meinem eigentlich potenten Rock64) mindestens 3 Sekunden lang läuft (= iOBroker blockiert) und dabei 3000 Zeilen Warnungen auswirft.

                  Kannst Du mir bitte helfen, dass Dein Script nur eine bestimmte Untermenge an Objekten untersucht/einliest?
                  Ich hatte sowas versucht wie

                  $('parser.0.state').each(function (id, i) {
                  
                  oder noch verrückter:
                  
                  $('state.o.state.DVB_SZ*').each(function (id, i) {
                  

                  aber das tut alles nicht. Aber eventuell geht das ja auch gar nicht?
                  Dann kann ich mir immer noch eine normale for-to-next-Schleife mit hartvercodeten Datenpunktnamen bauen.

                  Danke.

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

                    @radioman sagte:

                    aber das tut alles nicht.

                    Die Doku kennst Du?

                    $('parser.0.*').each(function (id, i) {
                    
                    R 1 Reply Last reply Reply Quote 0
                    • R
                      radioman @paul53 last edited by

                      Nein, den Separator kannte ich in der Tat noch nicht - funzt 1a.
                      Damit komme ich nun weiter - Danke, paul53!

                      R 1 Reply Last reply Reply Quote 0
                      • R
                        Ralf 8 @radioman last edited by

                        Das Thema ist zwar schon sehr alt, habe aber keine andere passende Anleitung gefunden und bin erst noch Anfänger.
                        Ich wollte schon fragen, wie ich denn an die Werte der Datenpunkte komme, habe es aber selbst herausgefunden und möchte das für weitere Leser ergänzen:

                        var objects = [];
                        
                        $('0_userdata.0.*').each(function (id, i) {
                            if (getState(id).val != false) {
                                // id ist die Bezeichnung des Datenpunktes und mit getState(id).val bekommt man den Wert
                                log(id + ': ' + getState(id).val);
                            }
                        });
                        

                        Vielleicht kann aber noch jemand erklären, was man mit dem Ausdruck:

                        if (obj) {
                                obj.state = getState(id);
                                objects[i] = obj;
                        

                        weiter oben anfangen kann?

                        Kann man die Auswahl $('datenpunkt.*').each noch weiter eingrenzen?
                        z.B. mit Filter auf Objekte vom Typ state oder Rolle: device, indicator, state machen?

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

                          @ralf-8 sagte: Kann man die Auswahl $('datenpunkt.*').each noch weiter eingrenzen?

                          Ja, siehe Doku.

                          R 1 Reply Last reply Reply Quote 0
                          • R
                            Ralf 8 @paul53 last edited by

                            @paul53
                            Mit der Doku tue ich mich noch schwer, daher herzlichen Dank dass Du mir genau die richtige Stelle zum Nachlesen zeigst.

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            502
                            Online

                            31.7k
                            Users

                            79.8k
                            Topics

                            1.3m
                            Posts

                            5
                            13
                            2203
                            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