Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Sql.0 abfrage

    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

    Sql.0 abfrage

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

      irgendwie hab ich ein Brett vorm Kopp

      ich schreibe mit Betteriewerte in die DB

      jetzt hab ich 20 Geräte die ich nicht einzeln klimpern will also :

       `// -----------------------------------------------------------------------------
      // ----- Abfragen von Werten aus der Datenbank (SQL) ---------------------------
      // -----------------------------------------------------------------------------
      
      var id = "%attery%" 
      var ind = 0;
      
      var arrBatterie = [];
      var devicename;
      
      SQLAbfrage();
      
      //----- alle Geräte lesen 
      function SQLAbfrage () {
          sendTo('sql.0', 'query', 'SELECT * FROM iobroker.datapoints WHERE name LIKE \'' + id + '\'', GetResults);
      }
      
      //----- mit diesen den zugehörigen letzten Wert
      function GetResults (dpoint) {
          var length = dpoint.result.length;
      
          for (var i = 0; i <= length-1; i++) {
              sendTo('sql.0', 'query', 'SELECT val FROM iobroker.ts_number WHERE id = ' + dpoint.result[i].id + ' ORDER BY ts DESC LIMIT 1',devi);    
      
              var name = dpoint.result[i].name;
              name = name.substring(name.indexOf(".0.")+3);
      
              devicename = name.substring(0, name.indexOf(".battery"));
              if (devicename.length < 1) {
                  devicename = name.substring(0, name.indexOf(".percent")); 
              }
              if (devicename.length < 1) {
                  devicename = name.substring(0, name.indexOf(".BATTERY"));
              }
      //------- nur den devicenamen ohne schnickschnak        
      
          }
      }
      
      function devi(result) {
         var wert = JSON.stringify(result.result);
      
      }`
      
      und jetzt komm ich nicht weiter... in der Schleife habe ich die übergabe an die nächste Funktion aber ich brauche noch paar Werte für den Array den ich zusammen bauen will... 
      
      am ende will ich ein array haben  mit   "devicename,wert" im arrBatterie[/i][/i]
      
      1 Reply Last reply Reply Quote 0
      • apollon77
        apollon77 last edited by

        Willkommen in der asynchronen Welt von JavaScript.

        In deinem Ansatz machst DU die erste SQL-Abfrage und dann werden die ganzen anderen quasi parallel gefeuert und rufe alle jeweils die "devi"-Funktion auf. Diese setzt immer nur die Variable "wert". Wenn Du bei deiner Query auch die ID immer als ergebnis mit selektierst kannst du in devi deine array-Werte korrekt setzen.

        Dann musst Du nur nach der letzten Rückmeldung ggf das tun was Du tun willst wenn alles fertig ist nach dem Füllen.

        Das macht man ggf indem man sich eine Zähler merkt der am Anfang =die Anzahl der Datenpunkte ist und mit jeder Antwort vermindert wird. Wenn er mach dem vermindern = 0 ist ist man an sich fertig und kann dann das tun was man noch braucht.

        1 Reply Last reply Reply Quote 0
        • arteck
          arteck Developer Most Active last edited by

          ok soweit verstanden aber

          function devi(result) {
             var wert = JSON.stringify(result.result);
          
          }
          

          wie bekomme ich aus der Funktion den rückgabewert pro Schleifendruchgang

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

            Nimm ein Array oder Objekt und füge alle antworten rein.

            Also mit nem Array ein

            werte.push(result.result);

            Und werte ist eine globale Variable.

            Und am besten hierhin ein check wenn die Länge des werte Arrays so lang wie die Anzahl der datenpunkte ist dann gleichbedeutend „Nachbearbeitung“ machen

            Gesendet vom Handy …

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

            Support us

            ioBroker
            Community Adapters
            Donate

            758
            Online

            31.7k
            Users

            79.9k
            Topics

            1.3m
            Posts

            2
            4
            564
            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