Eingangssignal nur zeitverzögert schalten, wenn das Signal noch besteht

Begonnen von Jogi, 13 Februar 2017, 14:59:14

Vorheriges Thema - Nächstes Thema

Jogi

Hallo,
ich habe ein seltsames Phänomen:
Ich bekomme Störsignale von einigen Leuchtstoffröhren, die sich auf meinen 433Mhz-Empfänger auswirken und dadurch bekomme ich -ausgerechnet an meiner Alarmanlage- kurzzeitig das Signal, dass der Alarm "ausgeschaltet" wurde. Dadurch werden in dem Moment einige Lampen in meinem Haus ausgeschaltet, die normalerweise im Alarmfall vorher eingeschaltet wurden.
Ich habe schon neue Starter und Röhren bestellt, möchte das Problem aber gerne bis zur endgültigen Fehlerbeseitigung lösen und möchte dazu folgendes realisieren:
Ich kann über den Eventmonitor beobachten, dass das Ereignis immer dann auftritt, wenn die Leuchtstoffröhren -über einen Bewegungssensor angesteuert- anschalten. Dann treten ganz kurze Impulse auf.
Die könnte ich abfangen, wenn ich den GPIO-Eingang zeitverzögert schalten lassen könnte. Leider bekomme ich das nicht hin.
Ich habe den debounce_in_ms schon auf 250ms gestellt, das reicht aber nicht.
Deswegen habe ich in dem zugehörigen dummy eine sleep-Funktion eingestellt. ABER das Sleep fragt scheinbar nicht ab, ob der Kontakt noch "on" ist, sondern schaltet einfach nach der eigestellten Zeit ein, auch wenn das Ereignis nicht mehr vorliegt.
define nTest2on notify testschalter:on sleep 2.5;; set Testlampe on
In dem Beispiel schaltet die Testlampe auch kurz ein, wenn "testschalter" nur 1s eingeschaltet und dann wieder ausgeschaltet wurde.
Ich brauche aber eine Funktion, die den Kontakt nur zeitverzögert einschaltet, wenn das Ereignis (high an GPIOX) noch vorliegt. Wenn das Ereignis vor der Zeit auf off geht (low an GPIOX) soll nicht geschaltet werden.

Habt Ihr einen Tipp?


betateilchen

Zitat von: Jogi am 13 Februar 2017, 14:59:14
Habt Ihr einen Tipp?

Gib mal "help watchdog" in die FHEM Befehlszeile ein, vielleicht kann Dir das weiterhelfen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Jogi

Zitat von: betateilchen am 13 Februar 2017, 15:01:58
Gib mal "help watchdog" in die FHEM Befehlszeile ein, vielleicht kann Dir das weiterhelfen.
Das habe ich mir angeguckt, aber nicht wirklich verstanden.
Wie müsste der Befehl denn aussehen, dass es funktioniert?
Kann mir jemand helfen?

Vielen Dank!

Jogi

Zitat von: Jogi am 13 Februar 2017, 18:14:04
Das habe ich mir angeguckt, aber nicht wirklich verstanden.
Wie müsste der Befehl denn aussehen, dass es funktioniert?
Kann mir jemand helfen?

Vielen Dank!
Hat keiner einen Tipp für mich?

Thorsten Pferdekaemper

Zitat von: Jogi am 14 Februar 2017, 20:24:06
Hat keiner einen Tipp für mich?
Naja, ich verstehe nicht so ganz, was Du willst. Könntest Du das mal in zwei bis drei kurzen Sätzen darlegen?
Gruß,
   Thorsten
FUIP

betateilchen

Zitat von: Jogi am 13 Februar 2017, 14:59:14
die sich auf meinen 433Mhz-Empfänger auswirken und dadurch bekomme ich -ausgerechnet an meiner Alarmanlage

Alarmanlage per Funk ist ja an sich schon gruslig. Aber das dann ausgerechnet noch auf 433 MHz zu versuchen, grenzt an groben Unfug...

Zitat von: Thorsten Pferdekaemper am 14 Februar 2017, 20:29:33
Naja, ich verstehe nicht so ganz, was Du willst.

Das ist im Prinzip ganz einfach: Lampen nur ausschalten, wenn das Schaltsignal dazu eine bestimmte zeitlang aktiv ist, damit die Störimpulse beim Einschalten der Lampen nicht als "Schaltsignal" erkannt werden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Morgennebel

Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Thorsten Pferdekaemper

Zitat von: betateilchen am 15 Februar 2017, 07:49:26Das ist im Prinzip ganz einfach: Lampen nur ausschalten, wenn das Schaltsignal dazu eine bestimmte zeitlang aktiv ist, damit die Störimpulse beim Einschalten der Lampen nicht als "Schaltsignal" erkannt werden.
Ah, ok. Da ist tatsächlich der watchdog wahrscheinlich das Mittel der Wahl.
Zitat
define <name> watchdog <regexp1> <timespec> <regexp2> <command>

Start an arbitrary FHEM command if after <timespec> receiving an event matching <regexp1> no event matching <regexp2> is received.
Das eine Event wäre das "off" und das zweite "on". So schwierig dürfte das ja nicht sein.
Gruß,
   Thorsten
FUIP

Jogi

Zitat von: Thorsten Pferdekaemper am 15 Februar 2017, 11:34:22
Ah, ok. Da ist tatsächlich der watchdog wahrscheinlich das Mittel der Wahl.Das eine Event wäre das "off" und das zweite "on". So schwierig dürfte das ja nicht sein.
Gruß,
   Thorsten
Scheinbar ist es doch schwieriger, denn ich bekomme es nicht hin.
Ich habe mir jetzt mal einen Testaufbau gemacht:
Testlampe ist das Gerät, das eingeschaltet werden soll, wenn der Kontakt länger als z.B. 3Sekunden geschlossen ist.
testschalter simuliert den Kontakt
Dazu habe ich mir einen Watchdog angelegt, der die Lampe einschalten soll und einen dummy, der sie wieder ausschaltet:
define wTest watchdog testschalter:on 00:00:03 testschalter:off set Testlampe on

define nTest2off notify testschalter:off sleep 2.5;; set Testlampe off

Nun passiert folgendes:
Beim ersten Einschalten läuft alles wie es soll. Liegt der Kontakt (testschalter) kürzer als 3s an passiert nichts. Liegt er länger an, schaltet Testlampe ein. Geht testschalter wieder auf off, schaltet Testlampe wieder aus. Soweit alles ok.
ABER: Das ganze funktioniert nur einmal! Schalte ich danach den testschalter wieder auf on passiert nichts mehr!
Erst wenn ich FHEM neu starte funktioniert es wieder exakt einmal. Danach wieder nicht.

Was ist falsch? Wo ist mein Denkfehler???




Beta-User

...suche mal in der commandref zu watchdog, Stichwort trigger...
Und den Punkt nicht vergessen ;).

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Jogi

Zitat von: Beta-User am 16 Februar 2017, 11:33:12
...suche mal in der commandref zu watchdog, Stichwort trigger...
Und den Punkt nicht vergessen ;).

Gruß, Beta-User
Vielen Dank, aber damit habe ich es nicht hinbekommen:
define wTest watchdog testschalter:on 00:00:03 testschalter:off set Testlampe on
;; trigger .

Ich habe aber das Attribut autoRestart 1 gefunden und damit geht es!

Beta-User

Schön, dass es geklappt hat, allerdings konnte es mit Deinem Code auch nicht klappen, commandref:define w watchdog FHT80 00:15:00 SAME set FHT80 date;; trigger w .
Bei Dir hätte es also "... trigger wTest ." sein müssen statt "... trigger ."  ;)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors