Hauptmenü

DOIF Rollade

Begonnen von Spartacus, 26 November 2015, 11:28:42

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich verstehe beim Besten Willen nicht, warum dieses DOIF nicht richtig triggert.
Auto ist ein dummy und wird in einem anderen DOIF zusammen mit "GA.ss.SA.Licht" gesetzt.

Auszug aus dem anderen DOIF:
(set GA.ss.SA.Licht on, set Auto on, set offtime.GA.ss.SA.Licht.dum {(OffTimeLicht())})


Der Wert von Auto steht momentan auch auf "on" und "GA.ss.SA.Licht" ist ebenfalls "on"

Warum ist dann der cmdState von diesem DOIF auf "off"? Ich hätte hier ein "on" erwartet.
Internals:
   DEF        ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

   NAME       diRollo
   NR         951
   NTFY_ORDER 50-diRollo
   STATE      off
   TYPE       DOIF
   Readings:
     2015-12-10 16:31:59   Device          GA.ss.SA.Licht
     2015-12-10 16:31:59   cmd_event       GA.ss.SA.Licht
     2015-12-10 16:31:59   cmd_nr          3
     2015-12-10 16:31:59   e_Auto_STATE    on
     2015-12-10 16:31:59   e_GA.ss.SA.Licht_STATE on
     2015-12-10 16:31:59   state           off
     2015-12-09 22:00:30   wait_timer      no timer
   Condition:
     0          InternalDoIf('Auto','STATE','') eq "on"
     1          InternalDoIf('Auto','STATE','') eq "on" and InternalDoIf('GA.ss.SA.Licht','STATE','') eq "off"
   Devices:
     0           Auto
     1           GA.ss.SA.Licht
     all         Auto GA.ss.SA.Licht
   Do:
     0:
       0
     1:
       0          set Rollo close, set Auto off
     2:
       0
   Helper:
     globalinit 1
     last_timer 0
     sleepdevice GA.ss.SA.Licht
     sleepsubtimer -1
     sleeptimer -1
   Internals:
     0           Auto:STATE
     1           GA.ss.SA.Licht:STATE
     all         Auto:STATE GA.ss.SA.Licht:STATE
   Itimer:
   Readings:
   State:
   Timerfunc:
   Trigger:
Attributes:
   alias      auto Rollo schließen
   cmdState   on|off|off
   devStateIcon .*on:general_an@lightgreen .*off:general_aus@red
   do         resetwait
   group      Scripte
   icon       fts_shutter_down
   wait       0:30:0


Für Hilfe wäre ich dankbar!
Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat von: Spartacus am 10 Dezember 2015, 16:58:19
Hallo,
ich verstehe beim Besten Willen nicht, warum dieses DOIF nicht richtig triggert.
Auto ist ein dummy und wird in einem anderen DOIF zusammen mit "GA.ss.SA.Licht" gesetzt.

Auszug aus dem anderen DOIF:
(set GA.ss.SA.Licht on, set Auto on, set offtime.GA.ss.SA.Licht.dum {(OffTimeLicht())})


Der Wert von Auto steht momentan auch auf "on" und "GA.ss.SA.Licht" ist ebenfalls "on"

Warum ist dann der cmdState von diesem DOIF auf "off"? Ich hätte hier ein "on" erwartet.
Internals:
   DEF        ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE


Es ist ganz einfach. Es werden nicht immer alle Bedingungen ausgewertet, sondern nur die, bei denen auch das triggernde Device vorkommt, da bei dir der Trigger von GA.ss.SA.Licht kam, wird der erste Fall bei der Auswertung erst gar nicht angepackt.

D. h. wenn der erste Fall auch beim Lichttrigger ausgewertet werden soll, dann muss dieses Device auch in der ersten Bedingung  wie auch immer abgefragt werden.

Gruß

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

Spartacus

Hi Damian,
danke für den Tipp.
Aber das Dummy-Device "Auto" ist doch auch ein triggerndes Device in der ersten Bedingung. Oder muss in allen Bedingungen immer das Gleiche triggernde Device vorkommen, wenn mein Konstrukt funktionieren soll?

Dann müsste ich das irgendwie so machen, oder?
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat von: Spartacus am 10 Dezember 2015, 21:05:56
Hi Damian,
danke für den Tipp.
Aber das Dummy-Device "Auto" ist doch auch ein triggerndes Device in der ersten Bedingung. Oder muss in allen Bedingungen immer das Gleiche triggernde Device vorkommen, wenn mein Konstrukt funktionieren soll?

Dann müsste ich das irgendwie so machen, oder?
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

Christian

Wie ich es schon geschrieben habe, steht es auch in der Commandref:
Zitat
Die Angaben werden immer von links nach rechts abgearbeitet. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.

Eine Bedingung wird nur dann ausgewertet, wenn das triggernde Device drin vorkommt, ansonsten wird diese Bedingung nicht berücksichtigt.


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

Spartacus

Hi Damian,
danke Dir! Aber ich bin zu blöd das zu raffen! Inzwischen funktioniert der o.a Code, aber warum Auto in meinem ersten Bsp. Kein triggerndes Devise ist, raffe ich trotz der Erklärung aus der Commandref nicht!

Für mich ist Auto das erste Device in diesem DOIF welches auf ein Trigger-Event reagieren müsste Was allerdings sein kann ist, dass im anderen DOIF zuerst  das Gartenlicht auf on und dann erst Auto gesetzt wird! Wenn das so ist, dann müsste es funzen, wenn ich das in dem anderen DOIF vertauschen...

Spartacus
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Damian

Zitat von: Spartacus am 11 Dezember 2015, 19:47:49
Hi Damian,
danke Dir! Aber ich bin zu blöd das zu raffen! Inzwischen funktioniert der o.a Code, aber warum Auto in meinem ersten Bsp. Kein triggerndes Devise ist, raffe ich trotz der Erklärung aus der Commandref nicht!

Für mich ist Auto das erste Device in diesem DOIF welches auf ein Trigger-Event reagieren müsste Was allerdings sein kann ist, dass im anderen DOIF zuerst  das Gartenlicht auf on und dann erst Auto gesetzt wird! Wenn das so ist, dann müsste es funzen, wenn ich das in dem anderen DOIF vertauschen...

Spartacus

Ich habe doch nicht behauptet, dass "Auto" nicht triggert. In deiner ersten Definition:

Internals:
   DEF        ([Auto] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE


hat zuletzt "GA.ss.SA.Licht" mit "on" getriggert, weil:
    2015-12-10 16:31:59   Device          GA.ss.SA.Licht
    2015-12-10 16:31:59   cmd_event       GA.ss.SA.Licht
    2015-12-10 16:31:59   e_GA.ss.SA.Licht_STATE on


und dann geht DOIF wie folgt vor:

1. schaue in der ersten Bedingung, ob GA.ss.SA.Licht vor kommt, nein -> dann gehe zu nächsten Bedingung
2. schaue in der zweiten Bedingung, ob GA.ss.SA.Licht vor kommt, ja -> werte die Bedingung aus, sie ist nicht wahr, dann gehe zur nächsten Bedingung
3. DOELSE -> setze cmd_3
4. Ende der Abarbeitung der Definition

Gruß

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

Spartacus

Hallo,
jetzt bin ich am Ende! Der o.a. Code hat jetzt mehrere Tage sauber funktioniert.
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?Auto] eq "on" and [GA.ss.SA.Licht] eq "off")
(set Rollo close, set Auto off)
DOELSE

Jetzt habe ich das Dummy Auto umbenannt und das DOIF arbeitet nicht mehr.

([?state.di.01.GA.ss.SA.Licht.dum] eq "on" and [GA.ss.SA.Licht] eq "on")
DOELSEIF
([?state.di.01.GA.ss.SA.Licht.dum] eq "on" and [GA.ss.SA.Licht] eq "off")
(set EG.wz.RO.links closes, set EG.wz.RO.rechts closes, set state.di.01.GA.ss.SA.Licht.dum off)
DOELSE


Wenn GA.ss.SA.Licht abgeschaltet wird, dann wird zwar cmd2 kurz ausgeführt, aber der Befehl state.di.01.GA.ss.SA.Licht.dum off wird nicht ausgeführt.
Was ist denn da jetzt passiert?
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Spartacus

Hallo,
Keine Ahnung was da passiert ist, aber nach einem Neustart der Kiste, lief es plötzlich wieder!
Alles wieder OK!
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R