Hauptmenü

selftrigger

Begonnen von doman75, 07 Februar 2019, 15:06:49

Vorheriges Thema - Nächstes Thema

doman75

hallo, ich habe eine DOIF zum Testen, das schaltet einfahc mal einen Dummy on und off. Drücke ich auf Aus beim DOIF, geht der dummy aus und das DOIF auch, drücke ich auf An beim DOIF, geht das DOIF auf An und der Dummy ebenso, aber nachden 10 Sekunden wait geht nur der Dummy auf aus und das DOIF bleibt auf An, es steht immer da das cmd1_2 ausgeführt wurde, niemals cmd2, das kann ja aber nicht sein nur da geht ja der Dummy aus. Jemand eine Idee was ich falsch mache oder wie ich es machen kann?

Grüße
Swen


defmod TEST DOIF ([$Self] eq "on") (set DummyTest on) (set TEST off)\
DOELSEIF\
([$Self] eq "off") (set DummyTest off)\
\

attr TEST cmdState on|off
attr TEST eventMap on:An off:Aus
attr TEST setList on off
attr TEST wait 0,10

Damian

Der erste Zweig wurde als von cmd_1 auf on umdefiniert und von cmd_2 auf off. Damit kann der Zustand des Moduls nur on sein und im zweiten Zweig statt cmd_2  off.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

doman75

Naja das weiss ich im ersten Teil "on" wird ja dasselbe Doif  ja mit set TEST off  gesetzt, der Teil im "off" Bereich wird ja auch ausgeführt nur der Status ändert sich nicht mit auf oft. Ich weiss nicht wie ich es besser erklären soll, vielleicht einfach mal die Raw importieren.

Damian

#3
Zitat von: doman75 am 07 Februar 2019, 18:44:32
Naja das weiss ich im ersten Teil "on" wird ja dasselbe Doif  ja mit set TEST off  gesetzt, der Teil im "off" Bereich wird ja auch ausgeführt nur der Status ändert sich nicht mit auf oft. Ich weiss nicht wie ich es besser erklären soll, vielleicht einfach mal die Raw importieren.

set Test off befindet sich im ersten Zweig, daher on

Edit: Was du willst, ist eher: cmdState on,off|off
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

doman75

Das stimmt mit on,off|off hatte ich schon getestet und das hat funtkioniert. Aber mir ist nicht klar warum es ohne das zusätzliche off f+r cmd1_2 nicht geht, im cmd1_2 (set TEST off) triggert das DOIF sich ja im Prinzip selber auf cmd2. Was im cmd2 steht "(set DummyTest off)" wird ja auch ausgeführt nur der eigene DOIF Status bleibt bei cmd1_2 hängen.

Damian

Zitat von: doman75 am 08 Februar 2019, 06:47:09
Das stimmt mit on,off|off hatte ich schon getestet und das hat funtkioniert. Aber mir ist nicht klar warum es ohne das zusätzliche off f+r cmd1_2 nicht geht, im cmd1_2 (set TEST off) triggert das DOIF sich ja im Prinzip selber auf cmd2. Was im cmd2 steht "(set DummyTest off)" wird ja auch ausgeführt nur der eigene DOIF Status bleibt bei cmd1_2 hängen.

Das tut er gerade nicht, das Modul triggert sich normalerweise nicht selbst, siehe Attribut selftrigger.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

doman75


2019-02-08 07:55:41.225 DOIF TEST cmd_nr: 1
2019-02-08 07:55:41.225 DOIF TEST cmd_seqnr: 1
2019-02-08 07:55:41.225 DOIF TEST cmd: 1.1
2019-02-08 07:55:41.225 DOIF TEST cmd_event: set_on_cmd_1
2019-02-08 07:55:41.225 DOIF TEST An
2019-02-08 07:55:41.228 DOIF TEST wait_timer: 08.02.2019 07:55:51 cmd_1_2 set_on_cmd_1
2019-02-08 07:55:51.230 DOIF TEST wait_timer: no timer
2019-02-08 07:55:51.236 DOIF TEST cmd_nr: 2
2019-02-08 07:55:51.236 DOIF TEST cmd: 2
2019-02-08 07:55:51.236 DOIF TEST cmd_event: set_off_cmd_2
2019-02-08 07:55:51.236 DOIF TEST Aus
2019-02-08 07:55:51.240 DOIF TEST cmd_nr: 1
2019-02-08 07:55:51.240 DOIF TEST cmd_seqnr: 2
2019-02-08 07:55:51.240 DOIF TEST cmd: 1.2
2019-02-08 07:55:51.240 DOIF TEST cmd_event: set_on_cmd_1
2019-02-08 07:55:51.240 DOIF TEST An


Also da ich nicht $Self schreibe nehme ich an es erkennt gar nicht das es sich um sich selbst ahnelt beim Befehl "set TEST off", im eventlog sieht man aber sehr schön das cmd2 sehr wohl ausgelöst wird, aber  der letzte Befehl eben cmd1_2 ist.

doman75

ich habe jetzt beim wait attr mal 0,10:10 gesetzt um cmd2 zu verzögern aber das greift gar nicht. Ist die Syntax falsch?

amenomade

#8
Zitat von: doman75 am 08 Februar 2019, 07:58:48

Also da ich nicht $Self schreibe nehme ich an es erkennt gar nicht das es sich um sich selbst ahnelt beim Befehl "set TEST off"
Und Du nimmst falsch an.
Zitat von: CommandRefStandardmäßig unterbindet das DOIF-Modul Selbsttriggerung. D. h. das Modul reagiert nicht auf Events, die es selbst direkt oder indirekt auslöst.
Niemand hat von $SELF geredet.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

doman75

Zitat von: amenomade am 25 Februar 2019, 18:09:05
Und Du nimmst falsch an.Niemand hat von $SELF geredet.
Warum wird es dann ausgeführt? Im Auszug der log sieht man ja eindeutig das cmd_2 ausgeführt wird, obwohl keine attribut selftrigger gesetzt ist.

Ellert

#10
Nach Ablauf des wait im ersten Zweig wird set TEST off ausgeführt und das DOIF wechselt in cmd_2.
Erst erst nach Abschluss des set, ist der erste Zweig abgeschlossen und danach befindet sich DOIF wieder in Zustand 1, wie nach jeder Abarbeitung des ersten Zweigs (cmd _nr 1, cmd_seq 2 => cmd_1)

Das hat mit Selbsttriggerung nichts zu tun, damit wird die hier http://forum.fhem.de/index.php/topic,41859.0.html beschriebene LOOP wieder eingeschaltet.

doman75

Ein loop ist das nicht cmd1 wird ja nicht wieder angetriggert.

amenomade

#12
Also nochmal:

([$Self] eq "on") <--- das ist Bedingung1 mit trigger auf self
     (set DummyTest on) <--- das ist Befehl 1.1
     (set TEST off) <--- das ist Befehl 1.2
DOELSEIF
([$Self] eq "off")  <--- das ist Bedingung2 mit trigger auf self
    (set DummyTest off) <--- das ist Befehl 2
attr TEST setList on off <--- damit bedeutet set TEST on = set TEST cmd_1 und set TEST off = set TEST cmd_2 ---- als Befehle

Du druckst auf on
Bedingung1 triggert => die Befehle 1.1 und 1.2 werden ausgeführt
- Befehl 1.1 sofort = dummy geht on
- Befehl 1.2 nach 10 Sek = set DOif off = set DOIF cmd_2 = führe Befehl 2 aus, aber ohne das DOIF zu triggern (selftriggern), sprich ohne dass Bedingung1 und Bedingung2 wieder bewertet werden und deswegen neue Befehle gestartet werden. Dummy geht aus (das ist eh Befehl 2)
- Und hier endet die Sequenz, die von Bedingung1 getriggert vom Knopfdruck gestartet wurde. Das DOIF wird auf Zustand 1.2 (An) gesetzt

EDIT: korrigiert nach https://forum.fhem.de/index.php/topic,97050.msg911998.html#msg911998 Bedingung1 triggert
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

tomspatz

Darf ich das hier mal Kapern mit der Frage nach $Self = $SELF

LG
Tom

amenomade

#14
Naja... Eigentlich hast Du Recht, es sollte genau $SELF sein. Die Bedingungen mit $Self würden wahrscheinlich nie triggern. Aber er druckt auf den Knöpfe An oder Aus in der WebUI, um die jeweilige Zweige zu starten. Führt zum gleichen Ergebnis
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus