Suche notify mit Verzögerung

Begonnen von grappa24, 05 Dezember 2013, 17:20:25

Vorheriges Thema - Nächstes Thema

grappa24

Hallo zusammen,

ich suche nach einer Möglichkeit, ein notify zeitverzögert an ein Event zu koppeln, sprich die Aktion soll erst x Sekunden nach Eintreten des Event ausgelöst werden.

VG, Dieter

FHEM 6.1, 2 x RasPi 3B+, Debian Buster; KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200
Rollo-/Lichtsteuerung/-szenarien, T-Sensoren, Fensterkontakte, Heizungssteuerung, HEOS, Sprachsteuerung mit Alexa-FHEM, Netatmo, Nuki, ...

rudolfkoenig

define ntfy1 notify Fernbedienung:.* sleep 7.5;; set Lampe $EVENT

grappa24

FHEM 6.1, 2 x RasPi 3B+, Debian Buster; KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200
Rollo-/Lichtsteuerung/-szenarien, T-Sensoren, Fensterkontakte, Heizungssteuerung, HEOS, Sprachsteuerung mit Alexa-FHEM, Netatmo, Nuki, ...

maci

Hallo,

Ich wäre jetzt dein wirklich alten Beitrag wieder auf.

Ich beschäftige mich derzeit mit dem Thema.

Ich habe dies nun ausprobiert, es funktioniert, jedoch habe ich entdeckt, wenn ich in der sleeptime noch einmal ein event auf dem Device Fernbedienung auslöse, dann passiert es dass das Device Lampe 2 mal geschaltet wird.
wenn es ein set Lampe off oder on ist passiert nicht viel, wenn es jedoch wie in dem Beispiel ein $EVENT ausgelöst wird, kann die Lampe in den Beispiel ein und gleich darauf wieder ausgeschaltet wird (bzw. umgekehrt).

Lässt sich dieses Verhalten verhindern?
Bzw. lässt sich das erneute triggern nutzen, dass die Zeit allgemein verlängert wird. Dazu müsste aber die sleeptime erneut zu laufen beginnen.
Derzeit läuft die sleeptime 2 mal ab, wenn ich 1 mal erneut triggere.
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

Beta-User

Man kann das z.B. dadurch lösen, dass man ein at definiert (mit defmod), (angelehnt an den bisherigen Code hier) in etwa so:

define ntfy1 notify Fernbedienung:.* defmod at_ntfy1 at +00:00:08 set Lampe $EVENT

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

CoolTux


define ntfy1 notify Fernbedienung:.* set $SELF inactive; sleep 7.5; set Lampe $EVENT; set $SELF active
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

maci

Zitat von: CoolTux am 06 Dezember 2017, 12:37:02

define ntfy1 notify Fernbedienung:.* set $SELF inactive; sleep 7.5; set Lampe $EVENT; set $SELF active


Ja das funktioniert jetzt so wie sollte.
Das sollte eigentlich im Wiki ergänzt werden. Ich habe aber keinen Zugang und die Lösung ist auch nicht von mir.

Eine ander Frage als Ergänzung: wenn ich die Sleepzeit variabel haben will.
Ich habe es versucht als Dummy. Wenn ich ein sleep [Dummy] mache, steht im Log das dies keine Sekunden sind.
Aber im Dummy habe ich zB 10 angegeben.
Fhem auf Dell Thinclient, Fhem auf Raspebrry Pi4,
UniPi Vers. 1.1 mit Raspberry Pi3, 1wire USB Adapter mit OWX
Netatmo Wetterstation + Regenmesser + Netatmo Thermostat
Homematic mit HMLan

CoolTux

Das so genannte SetMagic Variante geht nur bei aufruf der CommandSet Funktion, also bei set Befehlen. sleep ist ein Befehl für sich. Da musst Du dann wenn auf Perl Ebene gehen.


define ntfy1 notify Fernbedienung:.* { fhem("set $SELF inactive; sleep " . Value('timerDummy') . "; set Lampe $EVENT; set $SELF active") }
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

ahstax

Hallo,

Eine Verständnisfrage:

dieses Notify sollte ja eine LED auf rot schalten, wenn ein Fenster 30 Minuten offen ist, verstehe ich das richtig?

define ntfy1 notify Fenster:open sleep 1800;; set LED:red


Was passiert denn, wenn das Fenster innerhalb der Sleep-Zeit wieder geschlossen wird, Zustand also Fenster:close? Wird das Notify abgebrochen?

Neugierige Grüße,
Andreas

Byte09

Zitat von: ahstax am 16 Januar 2019, 08:42:36
Hallo,

Eine Verständnisfrage:

dieses Notify sollte ja eine LED auf rot schalten, wenn ein Fenster 30 Minuten offen ist, verstehe ich das richtig?

define ntfy1 notify Fenster:open sleep 1800;; set LED:red


Was passiert denn, wenn das Fenster innerhalb der Sleep-Zeit wieder geschlossen wird, Zustand also Fenster:close? Wird das Notify abgebrochen?

Neugierige Grüße,
Andreas

nein, da das notify das schliessen nichtmal mitbekommt ( rein Event-basierend ) . nach ablauf des sleep findet keine prüfung des statuses statt.

gruss Byte09

justme1968

nein. das sleep läuft weiter.

es gibt aber ein benanntes sleep das sich abbrechen lässt.

WATCHDOG solltest du dir auch anschauen
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Wernieman

das ist der Vorteil der oben genannten defmod-Lösung. Beim Fenster-.Schließen kannst Du mit einem delete das Temp-at löschen und damit genau das erreichen.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Beta-User

WATCHDOG ist sicher einen Blick wert;

Wer das mit dem "defmod-at" verfeinern will:
define ntfy1 notify Fenster:open defmod at_Check_Fenster at +00:01:30 {if (Value("Fenster") eq "open" ) {fhem "set set LED red"}}

Sowas macht aber eigentlich nur dann Sinn, wenn es sich nicht mit watchdog lösen läßt. Hier z.B. meine virtuellen verzögerten Türkontakte (zwei Außentüren im Wohnzimmer):
define Tuerkontakt_WZ_notify notify (Balkontuer|Terrassentuer_WZ):(open|closed).* {\
  if($EVENT eq "open" )\
{fhem 'defmod at_Check_WZ at +00:01:30 {if (Value("Balkontuer") eq "open" or Value("Terrassentuer_WZ") eq "open" ) {fhem "set Virtueller_Tuerkontakt_WZ offen"}}';;\
  } else {\
fhem "set Virtueller_Tuerkontakt_WZ geschlossen" if( Value("Virtueller_Tuerkontakt_WZ") ne "geschlossen" && Value("Balkontuer") eq "closed" && Value("Terrassentuer_WZ") eq "closed")\
  }\
}

(Man könnte das auch mit structure machen, schon klar...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files