NEWS
Sql.0 abfrage
-
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] -
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.
-
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 …
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden