NEWS
Zwei-Punkt Regler (Hysterese)
-
Hallo zusammen,
ich habe einen Regensensor von mySensors an ioBroker angeschlossen und überführe den Status per JS in eine Variable "Regen_aktuell".
Bei einem Test habe ich nun festgestellt, dass der Regler im Übergang ziemlich oft zwischen "kein Regen" und "Regen" wechselt (digitaler Wert). Daher wollte ich nun per JS einen Zwei-Punkt Regler oder Hysterese einsetzten.
Bin nur ziemlich ratlos wie sowas in JS aussieht.
Viele Grüße
Trident
-
-
Hallo,
ich würde da anders skripten. Ein altes Beispiel aus dem Forum prüft, ob die letzte Sayit Ansage gerade eben oder schon länger her ist, um doppelte Ansagen zu vermeiden. Im Falle des Regensensors passt das, als ja keine Mengenwerte (Regenmenge oder so) gemessen werden, sondern nur die Ausgabe true/false etwas beruhigt werden soll.
Deshalb mein Vorschlag:
var idRegensensor = 'xxxxxxxxxxx'; // Objekt Regensensor, das true/false liefert, eintragen var updateZeit = 3; // Dauer in s, innerhalb der keine Updates angenommen werden var lastUpdate = null; on(idRegensensor, function(obj) { if (!lastUpdate || ((new Date()).getTime() - lastUpdate) > 1000 * parseInt(updateZeit, 10)) { lastUpdate = (new Date()).getTime(); log(obj.state.val); // ersetzen durch neuen Befehl zB setState(Variable für Regensensor, obj.state.val); } });Ist keine echte Hysterese, hat aber den gleichen Effekt. Schließlich gibt es keinen Wert zwischen false und true. ;)
Gruß
Pix
-
@pix:sondern nur die Ausgabe true/false etwas beruhigt werden soll. `
Dass es sich um einen binären Wert handelt, habe ich überlesen. Darauf kann natürlich keine Hysterese, sondern nur Verzögerung angewendet werden, wie pix beschrieben hat.Die Updatezeit würde ich allerdings anders auswerten:
var idRegensensor = 'xxxxxxxxxxx'; // Objekt Regensensor, das true/false liefert, eintragen var updateZeit = 3; // Dauer in s, innerhalb der keine Updates angenommen werden var lastUpdate = getState(idRegensensor).lc; on(idRegensensor, function(dp) { if (dp.state.lc - lastUpdate > updateZeit) { lastUpdate = dp.state.lc; setState(Variable für Regensensor, dp.state.val); } });
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