NEWS
Wie kann ich im Adapter regelmäßig abfragen
-
Ich habe es dank eurer Hilfe geschafft, einen ersten Adapter zu bauen. Dieser wird über eine Schedule aufgerufen und funktioniert soweit.
Nun möchte ich gerne Befehlseingaben an den Adapter einbauen. Dazu ist ein Schedule sehr ungeeignet, da der Befehl dann erst zum Zeitpunkt des Schedules verarbeitet wird.
Ich muss nuna lso einen Dämon bauen.
Die Abfrage des Befehls dürfte kein Problem darstellen.
Wie kann ich aber die - bereits jetzt gelesenen - Daten weiter zyklisch abfragen?
JS bietet ja leider kein delay() an, das einfach in einer Dauerschleife wartet.
Wie realisiert ihr solche Punkte?
Gibt es irgendwo Beispiele dafür?
-
Am besten alles in eine Funktion und diese dann mit setTimeout verzögert aufrufen. Das ist quasi das Delay Nach dem du suchst.
Gesendet vom Handy …
-
ich mache das in meinem Adapter um die MinMax Tageswerte zu ermitteln.
timerMinMax = setInterval(MinMaxSchreiben, 1 *60000);
MinMaxSchreiben ist dann die eigentliche Funktion.
const utils = require(__dirname + '/lib/utils'); // Get common adapter utils const adapter = new utils.Adapter('mygeneral'); var SunCalc = require('suncalc'); var Math = require('mathjs'); var timerMinMax = null; adapter.on('unload', function (callback) { try { adapter.log.info('cleaned everything up...'); callback(); } catch (e) { callback(); } if (timerMinMax) { clearInterval(timerMinMax); timerMinMax = 0; } });
-
SetIntervall geht WENN du alles was da drin passiert unter Kontrolle hast. Sobald du aber zb externer Daten abfragst (request) ist setTimeout gefährlich weil es ihm egal ist ob der vorherige Lauf fertig war oder nicht. Er startet einfach den nächsten.
Wenn zb ein request in nen Timeout läuft weil die Webseite langsam ist dann stauen sich ggf requests auf.
Also nachdenken ob setIntervall sinnvoll ist.
Ich nutze daher meistens eine setTimeout der am Ende der Funktion einfach neu gesetzt wird. Damit ist sichergestellt das immer nur eins passiert.
Gesendet vom Handy …