notify mit disabledAfterTrigger

Begonnen von TomLee, 29 Juli 2020, 16:44:33

Vorheriges Thema - Nächstes Thema

TomLee

Hallo,

was verstehe ich an der Doku falsch ?

ZitatdisabledAfterTrigger <sekunden>

deaktiviert die Ausführung für <sekunden> nach dem das notify ausgelöst wurde.

Ich möchte das die Befehle zeitverzögert ausgeführt werden, zum Test hier 10 Sekunden (eigentlich etwa 2,5 Sekunden)
Der Ausführungsteil wird aber sofort ausgeführt, InternalVal holt sich immer den EACH_INDEX vor dem betätigen der Taste, der Scriptaufruf wird nicht verzögert ausgeführt.

Wo ist mein Denkfehler, was hab ich nicht verstanden ?

defmod FB_433_2_TasteC_notify_1 notify FB_433_2_TasteC:off {InternalVal("FB_433_2_TasteC","EACH_INDEX","") eq "1" ? system("/opt/fhem/voucher.sh &") : system("/opt/fhem/voucherx.sh &")}
attr FB_433_2_TasteC_notify_1 disabledAfterTrigger 10

setstate FB_433_2_TasteC_notify_1 2020-07-29 16:27:22
setstate FB_433_2_TasteC_notify_1 2020-07-29 16:10:14 state active


Gruß

Thomas

vielleicht ist es besser noch zu zeigen was wie zusammen spielt:

if ($NAME eq "FB_433_2_TasteC" && $EVENT eq "off")
{Each($NAME, ReadingsVal($NAME,"count","0"));fhem("set EG_Echo_Kueche sounds Glocken")}


defmod FB_433_2_TasteC IT 0FF0FFF0FF 0F F0
attr FB_433_2_TasteC IODev sduino
attr FB_433_2_TasteC group Fernbedienung_Küche
attr FB_433_2_TasteC room IT

setstate FB_433_2_TasteC off
setstate FB_433_2_TasteC 2020-07-28 19:08:24 count 1,2
setstate FB_433_2_TasteC 2020-07-28 21:50:10 protocol 0
setstate FB_433_2_TasteC 2020-07-29 16:27:22 state off


Beta-User

Bei disabledAfterTrigger geht es um die _wiederholte_ Ausführung. Das Attribut bewirkt also "nur", dass weitere Ereignisse dann nicht zur erneuten Ausführung des Anweisungsteils führen, verzögert wird der Ausführungsteil aber nicht, wenn der (noch nicht) deaktivierte trigger kommt.

Ist z.B. hilfreich, wenn man mehrere OMG-Gateways hat und dann z.B. dieselbe Temperaturinfo über mehrere Kanäle an den m2Server abgeliefert werden (andere Module, z.B. IT-Module+CUL würden sowas direkt verwerfen).
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

TomLee

#2
Muss ich mein Vorhaben jetzt verwerfen oder gibt es eine Möglichkeit ein sleep zu machen, ohne das das System steht ?

edit:

2 Tasten oder DOIF verwenden ist klar

Otto123

Du willst die sh Datei verzögern?
system("/opt/fhem/voucher.sh &") : system("/opt/fhem/voucherx.sh &")
mach doch ein sleep in der sh Datei.

Oder versuch ein
defmod FB_433_2_TasteC_notify_1 notify FB_433_2_TasteC:off sleep 3;;{InternalVal("FB_433_2_TasteC","EACH_INDEX","") eq "1" ? system("/opt/fhem/voucher.sh &") : system("/opt/fhem/voucherx.sh &")}
Sollte auch gehen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

#4
Sehr cool Danke Otto  :)

defmod FB_433_2_TasteC_notify_1 notify FB_433_2_TasteC:off sleep 2;;{InternalVal("$NAME","EACH_INDEX","") eq "1" ? system("/opt/fhem/voucher.sh &") : system("/opt/fhem/voucherx.sh &")}




Der oben gezeigte Code ist meine ausgedachte Alternative zum Modul Taster, um auf zwei Tastendrücke zu reagieren.

TomLee

Die Alternative ist aber noch nicht ganz fertig.

Ich bekomme es einfach nicht hin noch ein delete($defs{FB_433_2_TasteC}{EACH_INDEX}) an die system-Befehle anzuhängen.

Wie macht man es denn, ich mein ich hab alle mir bekannten Möglichkeiten durch und sitze schon ewig daran.

amenomade

Einfach
;;{Befehl} am Ende des define Kommandos anhängen sollte gehen.

Reicht es nicht, EACH_INDEX auf 0 zu setzen?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TomLee

Zitat von: amenomade am 29 Juli 2020, 18:34:44
Einfach
;;{Befehl} am Ende des define Kommandos anhängen sollte gehen.

Komm ich nicht mit, gehts bitte genauer.
Ziel ist sowas in der Art
... system("/opt/fhem/voucher.sh &"); delete{($defs{FB_433_2_TasteC}{EACH_INDEX})}...


ZitatReicht es nicht, EACH_INDEX auf 0 zu setzen?

EACH_INDEX muss auf jedenfall wieder von vorne anfangen, ob 0 zielführend wäre müsst ich ausprobieren, weiß aber ehrlich gesagt nicht wie ich ihn setzen kann.

amenomade

Zitat von: TomLee am 29 Juli 2020, 19:03:03

Ziel ist sowas in der Art
... system("/opt/fhem/voucher.sh &"); delete{($defs{FB_433_2_TasteC}{EACH_INDEX})}...

Und was geht damit nicht?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TomLee

delete argument is not a HASH or ARRAY element or slice at (eval 70171) line 1.

mit modify FB_433_2_TasteC_notify_1

Wie gesagt ich hab schon einige Varianten durch auch wieder mit{}

amenomade

#10
Wahrscheinlich weil der schon gelöscht wurde?

delete ist eine Funktion
also delete() ist richtig, delete{} falsch
Setze den doch auf 0 statt zu löschen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TomLee

Sry, hab irgendwas kopiert gehabt, mein Code von dem ich die ganze Zeit ausgehe das er richtig ist, ist dieser:

delete($defs{FB_433_2_TasteC}{EACH_INDEX})

Mit dem gibts beim modify des notify

syntax error at (eval 85614) line 1, at EOF
syntax error at (eval 85614) line 1, near "):"


ZitatWahrscheinlich weil der schon gelöscht wurde?

sry das ist Quatsch  :) , ich definiere doch nur das notify.

ZitatSetze den doch auf 0 statt zu löschen.

Zitat von: TomLee am 29 Juli 2020, 19:03:03
... ob 0 zielführend wäre müsst ich ausprobieren, weiß aber ehrlich gesagt nicht wie ich ihn setzen kann.

Wie gesagt ich hab keine Vorstellung was Each dann macht und wieder von vorne beginnt.




amenomade

#12
Hatte nicht verstanden, dass es beim modify des notifies kommt.

Zitatsyntax error at (eval 85614) line 1, near "):"
Woher kommt der Doppelpunkt nach Klammer? Wie machst Du genau deine Änderung?

EDIT: bei mir passt in der DEF:
FB_433_2_TasteC:off sleep 2;{InternalVal("$NAME","EACH_INDEX","") eq "1" ? system("/opt/fhem/voucher.sh &") : system("/opt/fhem/voucherx.sh &");delete($defs{FB_433_2_TasteC}{EACH_INDEX})}
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

#13
Ah... ich glaube, ich habe verstanden. Wiederum Perl Grundlagen... Es wäre Zeit, dass Du dich einarbeitest.

Du versuchts das nicht an der Stelle hinzuzufügen, wo ich es hieroben gemacht habe, sondern direkt in dem Perl ternary Operator. Das geht natürlich nicht, und Du musst auf die normale if Struktur wechseln.

EDIT: es gibt eine Alternativ mit bedingung ? do {Befehl1; Befehl2, ...} : do {Befehl3; Befehl4} aber das wird total unübersichtlich im Vergleich mit einem normalen if

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

TomLee

Mit

defmod FB_433_2_TasteC_notify_1 notify FB_433_2_TasteC:off sleep 3;;{if (InternalVal("$NAME","EACH_INDEX","") eq "1")\
{system("/opt/fhem/voucher.sh &");;delete($defs{FB_433_2_TasteC}{EACH_INDEX})}\
else {system("/opt/fhem/voucherx.sh &");;delete($defs{FB_433_2_TasteC}{EACH_INDEX})}}\


macht das sleep Probleme, im Log steht:

2020.07.29 21:41:18 3: sduino IT_set: FB_433_2_TasteC off
2020.07.29 21:41:19 3: Das ist FB_433_2_TasteC off off
2020.07.29 21:41:21 2: After sleep: Unknown command {if, try help.
Unknown command delete($defs{FB_433_2_TasteC}{EACH_INDEX})}
else, try help.
Unknown command delete($defs{FB_433_2_TasteC}{EACH_INDEX})}}
, try help.


ohne sleep hab ich zwar erstmal keine Möglichkeit für einen zweiten Tastendruck die Datei wird gedruckt aber EACH_INDEX wird nicht gelöscht:

2020.07.29 21:42:34 3: sduino IT_set: FB_433_2_TasteC off
2020.07.29 21:42:34 3: FB_433_2_TasteC_notify_1 return value: 2
2020.07.29 21:42:34 3: Das ist FB_433_2_TasteC off off


Das mit do schau ich mir später sonst morgen an.