NEWS
Umgerechneten Sensorwert glätten
-
Grüßt euch!
Ich habe einen selbst gebastelten Füllstandssensor für meine Zisterne in Betrieb. Funktioniert über einen Ultraschallsensor den ich an einen Arduino angeschlossen habe, der die Entfernung zur Wasseroberfläche misst. Mittels NodeRed und einem 'function' Node rechne ich den Wert von cm in % um gebe den Wert zur Weiterverarbeitung aus.
Funktioniert wunderbar, bis auf eine Kleinigkeit: Der gemessene Wert springt öfters einfach so auf einen komplett anderen Wert. z.B. von 30% aktuellem Füllstand auf 130% und wieder zurück. Ich meine das das Insekten sind, die in der Zisterne ihr Unwesen treiben und so die falschen Messwerte produzieren.
Ich würde diese sprunghaft veränderten Werte gerne herausfiltern. Evtl über eine maximale Veränderung des Wertes. Meine Ansatz wäre, ignoriere den aktuellen Wert, sollte er mehr als 10% zum vorherigen verändert sein. Leider habe ich gerade nicht wirklich eine Idee, wie ich das umsetzen kann. Mag mir jemand auf die Sprünge helfen?Vielen Dank!
-
Sieht in Flot dann so aus:
Und so der function Node:
-
@azrael42 ich würde versuchen mir den Wert in eine Kontext-Variable zu schreiben: context.lastvalue z.B.
- den kannst du beim nächsten Flow wieder abgreifen und mit dem aktuellen Wert vergleichen.
Starten würde ich mit einer fix eingegebene maximalen Abweichung (den Wert kannst du dir später auch aus einem ioBroker Objekt holen) - ich würde auch gleich Dist1 vergleichen - so in etwa könnte dass dann aussehen - Syntax hab ich jetzt im Code nicht gecheckt. (in der ersten Zeile hast du den ; vergessen.)
var Dist1 = msg.payload; var maxdeviation = 20; //hab ich mal als Beispiel genommen // das brauchst du, damit der Vergleich unten beim ersten Mal nicht fehl schlägt if (!context.lastvalue) { context.lastvalue = Dist1; } //Vergleich des letzten Wertes mit dem aktuellen Wert if (Dist1 > (context.lastvalue + maxdeviation) || Dist1 < (context.lastvalue - maxdeviation)) { Dist1 = context.lastvalue; } else { context.lastvalue = Dist1; }
Falls du noch mehr Infos brauchst, gerne.
- den kannst du beim nächsten Flow wieder abgreifen und mit dem aktuellen Wert vergleichen.
-
Nimm einfach eine Filternode und nutz einfach die Filternnode im Nahbandmodus.
Ich verstehe nicht, warum man immer selbst programmieren will, anstatt die Möglichkeiten vorhandenere Nodes zu nutzen.
-
@mickym ganz einfach, wenn man den Node nicht kennt (weil erst ein paar wenige Wochen mit Node-Red unterwegs, so wie ich), dann kann man ihn auch nicht benutzen.
- Danke für den Tip!
-
@superflip sagte in Umgerechneten Sensorwert glätten:
@mickym ganz einfach, wenn man den Node nicht kennt (weil erst ein paar wenige Wochen mit Node-Red unterwegs, so wie ich), dann kann man ihn auch nicht benutzen.
- Danke für den Tip!
Ja deswegen sage ich immer - function Nodes nur in wenig Einzelfällen zu nutzen - sonst macht man sich das hervorragende Tool mit vorgefertigten Bausteinen, die gerade dann beim Debuggen viel Vorteile bilden - irgendwann kaputt.
Man kann auch den ganzen Flow in eine function Node packen und nur noch triggern und output anderen Nodes überlassen.
Deswegen rate ich gerade Anfängern function Nodes so lange wie möglich zu meiden, weil man sonst wieder ins herkömmliche Programmieren verfällt.
-
@mickym bin grundsätzlich voll bei dir! - hab bei meinen vielen Flows (ca. 40) bisher erst ein einziges Mal selbst die Function Node benutzt.
- meine Antwort hat sich auch hauptsächlich auf "Ich verstehe nicht, warum ...." bezogen. Ich werde nach solchen Sätzen halt in Zukunft 3x überlegen, ob ich überhaupt auf eine Frage antworten soll ...
-
@superflip sagte in Umgerechneten Sensorwert glätten:
@mickym bin grundsätzlich voll bei dir! - hab bei meinen vielen Flows (ca. 40) bisher erst ein einziges Mal selbst die Function Node benutzt.
- meine Antwort hat sich auch hauptsächlich auf "Ich verstehe nicht, warum ...." bezogen. Ich werde nach solchen Sätzen halt in Zukunft 3x überlegen, ob ich überhaupt auf eine Frage antworten soll ...
Na falls ich mich unverschämt ausgedrückt haben sollte, dann entschuldige ich mich . Man soll immer schreiben, was man sich denkt - und auch wenn man mal Widerspruch erntet, finde ich das nicht schlimm, sondern durchaus belebend.
Das Schlimmste wäre, wenn ich Dir die Lust verderben würde, hier weiterhin Hilfestellung für andere leisten zu wollen, das wollte ich auf keinen Fall.
-
@mickym
danke!
-
@mickym said in Umgerechneten Sensorwert glätten:
Nimm einfach eine Filternode und nutz einfach die Filternnode im Nahbandmodus.
Okay, schaue ich heute Abend rein und erstatte Bericht.
Zum anderen Thema: Ich muss gestehen, mir geht es sehr häufig auch so wie @superflip. Das kann man an meiner Frage hier auch sehen. Recht häufig fehlt mir die Erfahrung und das Wissen, wie ich etwas angehe. Um so dankbarer bin ich über die Hilfe hier im Forum.
Hätte ich den function Node in meinem Flow auch mit Bordmitteln einfach umsetzen können? -
@azrael42 sagte in Umgerechneten Sensorwert glätten:
Hätte ich den function Node in meinem Flow auch mit Bordmitteln einfach umsetzen können?
Ja function Node ist Bestandteil der Standardnodes - aber die Filternode ist auch Bestandteil der Standardnodes und insofern auch ein Boardmittel - da muss nichts installiert werden.
Früher hieß die Filternode nur RBE Node:
-
@azrael42 Da die Hardware selbst gebaut ist, könnte man auch direkt im Arduino unplausible Werte herausfiltern.
-
@peterfido Du hast Recht. Das ding ist nur IN der Zisterne verbaut und glorreicher Weise habe ich das Kabel ohne Möglichkeit zur Trennung eingebaut. Nicht besonders Weitsichtig...
Lange Rede, kurzer Sinn: Nochmal da dran zu gehen, ist mir zu aufwendig. -
@mickym said in Umgerechneten Sensorwert glätten:
Nimm einfach eine Filternode und nutz einfach die Filternnode im Nahbandmodus.
Hab ich verwendet und funktioniert. Danke!