Schalter - kurze Impulse unterdrücken

Begonnen von BorisKsoll, 27 März 2018, 18:42:52

Vorheriges Thema - Nächstes Thema

BorisKsoll

Hallo,

ich habe gerne klassische Schalter - keine Taster. Ich schalte mein Licht über zwei notify - eines für ein und eines für aus:

P52:reading:.on set Badlicht on

P52:reading:.off set Badlicht off

Die Schalter laufen über Firmata (Arduino).

Mein Problem: ab und zu flackert das Licht kurz auf. Ich möchte also gerne, dass kurze Schaltimpulse "abgefangen" werden. Wenn der Schalter nicht für mindestens 0,1 Sekunden geschaltet wird, dann soll nichts passieren. (Nicht länger, da sonst bei einen gewollten Schalten eine merkliche Schaltverzögerung entsteht).

Das klassische Entprellen verhindert ja nur eine Mehrfachauslösung des gleichen Events.

Ich vermute, dass ich da jetzt mit if etwas machen müsste - um dann nach 0,1sek zu prüfen ob sich der Zustand nochmals geändert hat (und wenn ja, verwerfen - sonst Änderung umsetzen). Wäre das der richtige Weg oder geht es leichter? Gibt es vielleicht ein Attribut, dass ich nicht gefunden habe?

Vielen Dank
Boris

Thorsten Pferdekaemper

Hi,
und warum ist das kein "klassisches Entprellen"? Zumindest auf der Arduino-Seite sollte das doch ein ganz normales Entprellen tun, oder?
Gruß,
   Thorsten
FUIP

BorisKsoll

#2
Entprellen wäre ja bei Mehrfachimpulsen nur einen durchzulassen. Ich will aber null Impulse bei nur kurzer Aktivierung (durch el. Störung - Vermutlich durch Schwankungen des Wiederstandes in den teilweise recht langen Leitungen zum Schalter).

Ich möchte es FHEM-Seitig lösen. Auf dem Arduino läuft Firmata ohne Modifikationen - da möchte ich keine zweite Baustelle öffnen.

Damian

define di_badlicht DOIF ([P52:reading] eq "on") (set Badlicht on) DOELSE (set Badlicht off)
attr di_badlicht wait 0.5:0.5


wait entprellt in diesem Fall.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

BorisKsoll

Super!

Das löst exakt mein Problem - genial.

Vielen Dank!

wait
Das Attribut verzögert die Befehlsausführung, nach wahr werden einer Bedingung.
Laufende Wait-Timer werden bei einem eingeleiteten Statuswechsel des DOIF abgebrochen, daher werden die zu verzögernden Befehle nicht mehr ausgeführt.