Verhinderung Selbsttriggerung und indirekte Events

Begonnen von Ralf.E, 05 Februar 2017, 15:43:26

Vorheriges Thema - Nächstes Thema

Ralf.E

Hi,

ich probiere hier gerade mit FTUI und einem DOIF, welches mir ein wenig bei der Heizungssteuerung helfen soll.

Soweit habe ich verstanden, dass DOIF generell eine Selbsttriggerung verhindert. Am Beispiel des folgenden DOIF Auszuges:
DOELSEIF ( [sys_var_cmdHeizungHaus] eq "eco" && [?sys_var_stateHeizungHaus] ne "eco" )
(
    ( set sys_var_stateHeizungHaus eco )
)

Wenn in obigem Beispiel durch set sys_var_cmdHeizungHaus eco das Event auslöst und die Bedingung zutrifft, wird set sys_var_stateHeizungHaus eco ausgeführt.

Soweit ich das jetzt nachvollziehen konnte, löst der Bedingungsteil set sys_var_stateHeizungHaus eco auch für sys_var_stateHeizungHaus kein Event aus, welches von anderen ausgewertet wird und somit kein Update z.B. eines entsprechenden FTUI-Widgets erfolgt.

Ist es soweit richtig, dass DOIF nicht nur seine eigene Selbsttriggerung unterbindet, sondern bei allen referenzierten und durch das DOIF geänderten Objekten eine Auslösung von Events unterbindet?

Ändere ich das DOIF in:
DOELSEIF ( [sys_var_cmdHeizungHaus] eq "eco" && [?sys_var_stateHeizungHaus] ne "eco" )
## cmd_x_1
(
)
## cmd_x_2
(
    ( set sys_var_stateHeizungHaus eco )
)

und verzögere mit einem wait 0,1 die Ausführung von set sys_var_stateHeizungHaus eco, löst dagegen das Setzen von sys_var_stateHeizungHaus ein Event aus und das entsprechende FTUI-Widget wird aktualisiert.

Ist das so ein zugesichertes Verhalten? Anstelle des waits wird hier vermutlich auch selftrigger ein gleiches Verhalten erlauben?

Gruß Ralf

Rpi4> FHEM, TabletUI, Z-Wave, EnOcean, Hue, HmIP via Debmatic

Ellert

Ohne die Verwendung des Attributes selftrigger unterbindet DOIF Loops, s. http://forum.fhem.de/index.php/topic,41859.0.html

Es kann aber vorkommen, das ein Zielgerät als verzögerte Reaktion Events auslöst und DOIF triggert.

Beispiel
Ein Startauslöser lässt den Befehl set TTS tts Text1 ausführen und der zweite Zweig lauscht auf ![TTS:playing], dann wird der zweite Zweig ausgeführt, da playing erst dann null wird, nachdem der Text zu Ende gesprochen wurde.

ZitatSoweit ich das jetzt nachvollziehen konnte,...

Poste doch mal einen entsprechendes Eventlogging falls Du weitere Fragen hast, dann könnte man evtl. mehr sehen.

Ralf.E

Hi,

Zitat von: Ellert am 05 Februar 2017, 18:02:35
Es kann aber vorkommen, das ein Zielgerät als verzögerte Reaktion Events auslöst und DOIF triggert.

mir geht es weniger darum ein Selftrigger eines DOIF's zu erreichen, sondern eher wie im Beispiel genannt, dass das Setzen eines Dummies keinen Event des Dummies verursacht, welcher dann z.B. von einer anderen DOIF-Instanz oder eben FTUI ausgewertet werden kann.

In meinem ersten Bespiel fühlt sich das so an, dass nicht nur ein Selftrigger des DOIF's unterbunden wird, sondern Events für alle in einem DOIF verwendeten 'devices'. Wobei ich jetzt nicht weiß, ob das durch DOIF oder dem FHEM-Framework unterbunden wird...

Gruß Ralf
Rpi4> FHEM, TabletUI, Z-Wave, EnOcean, Hue, HmIP via Debmatic

Damian

Zitat von: Ralf.E am 05 Februar 2017, 18:36:17
Hi,

mir geht es weniger darum ein Selftrigger eines DOIF's zu erreichen, sondern eher wie im Beispiel genannt, dass das Setzen eines Dummies keinen Event des Dummies verursacht, welcher dann z.B. von einer anderen DOIF-Instanz oder eben FTUI ausgewertet werden kann.

In meinem ersten Bespiel fühlt sich das so an, dass nicht nur ein Selftrigger des DOIF's unterbunden wird, sondern Events für alle in einem DOIF verwendeten 'devices'. Wobei ich jetzt nicht weiß, ob das durch DOIF oder dem FHEM-Framework unterbunden wird...

Gruß Ralf

FHEM selbst unterbindet das, allerdings merkt es die Schleife erst in der ersten Wiederholung, daher habe ich auch in DOIF einen Mechanismus eingebaut der die Selbsttriggerung unterbindet. Es werden keine Trigger angenommen, bis das ausgeführte Kommando zurückkehrt.


Bsp: externer Tigger -> DOIF sperrt alle weiteren Trigger (setzt intern einen Semaphor)-> führt Kommando aus (Kontrolle wird an FHEM abgegeben)-> Kommando führt weiters Kommando aus ->usw....->Kontrolle kehrt an das DOIF zurück (Semaphor wird gelöscht)->DOIF ist bereit für neue Trigger.

D. h. Egal wie tief die verschachtelten Befehle sind - DOIF ignoriert sie alle, bis das ursprüngliche Kommando mit allen Iterationen beendet ist.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ellert

Zitat von: Ralf.E am 05 Februar 2017, 18:36:17
Hi,

mir geht es weniger darum ein Selftrigger eines DOIF's zu erreichen, sondern eher wie im Beispiel genannt, dass das Setzen eines Dummies keinen Event des Dummies verursacht, welcher dann z.B. von einer anderen DOIF-Instanz oder eben FTUI ausgewertet werden kann.

In meinem ersten Bespiel fühlt sich das so an, dass nicht nur ein Selftrigger des DOIF's unterbunden wird, sondern Events für alle in einem DOIF verwendeten 'devices'. Wobei ich jetzt nicht weiß, ob das durch DOIF oder dem FHEM-Framework unterbunden wird...

Gruß Ralf
Du kannst Readings mit setstate setzen ohne dass ein Event erzeugt wird. Du musst die Syntax verwenden, die in "Raw definition" verwendet wird.

allgemein
setstate <Gerätename> <Datums- und Zeitstempel> <Readingsname> <Wert>
konkret
setstate LiGa_di 2017-02-05 22:30:20 cmd_nr 2