FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Thoffi1978 am 09 Juli 2016, 20:41:40

Titel: Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: Thoffi1978 am 09 Juli 2016, 20:41:40
Hallo.
Ich möchte mehrere DOF´s schalten und habe folgenden Code:
([04:00-05:40|8] and [myCalView:today_001_summary] eq "Arbeit Torsten Frueh") (set Oldesloe_0430 start) DOELSE (set Oldesloe_0430 stop)
DOELSEIF
([06:50-08:40|7] and [myCalView:today_001_summary] eq "Arbeit Torsten WE") (set Oldesloe_0730 start) DOELSE (set Oldesloe_0730 stop)
DOELSEIF
([10:00-12:40|8] and [myCalView:today_001_summary] eq "Arbeit Torsten Spaet") (set Oldesloe_1200 start) DOELSE (set Oldesloe_1200 stop)
DOELSEIF
([13:00-15:40|8] and [myCalView:today_001_summary] eq "Arbeit Torsten Frueh") (set Rahlstedt_1400 start) DOELSE (set Rahlstedt_1400 stop)
DOELSEIF
([17:30-19:40|7] and [myCalView:today_001_summary] eq "Arbeit Torsten WE") (set Rahlstedt_1830 start) DOELSE (set Rahlstedt_1830 stop)
DOELSEIF
([20:30-22:40|8] and [myCalView:today_001_summary] eq "Arbeit Torsten Spaet") (set Rahlstedt_2155 start) DOELSE (set Rahlstedt_2155 stop

Leider wurde heute am Samstag nichts geschaltet, obwohl eigentlich alles erfüllt sein müßte.
Könnt Ihr mir sagen, ob ich irgendwo etwas falsch geschrieben habe in der DOIF Anweisung?

List DOIF:
Internals:
   DEF        ([04:00-05:40|8] and [myCalView:today_001_summary] eq "Arbeit Torsten Frueh") (set Oldesloe_0430 start) DOELSE (set Oldesloe_0430 stop)
DOELSEIF
([06:50-08:40|7] and [myCalView:today_001_summary] eq "Arbeit Torsten WE") (set Oldesloe_0730 start) DOELSE (set Oldesloe_0730 stop)
DOELSEIF
([10:00-12:40|8] and [myCalView:today_001_summary] eq "Arbeit Torsten Spaet") (set Oldesloe_1200 start) DOELSE (set Oldesloe_1200 stop)
DOELSEIF
([13:00-15:40|8] and [myCalView:today_001_summary] eq "Arbeit Torsten Frueh") (set Rahlstedt_1400 start) DOELSE (set Rahlstedt_1400 stop)
DOELSEIF
([17:30-19:40|7] and [myCalView:today_001_summary] eq "Arbeit Torsten WE") (set Rahlstedt_1830 start) DOELSE (set Rahlstedt_1830 stop)
DOELSEIF
([20:30-22:40|8] and [myCalView:today_001_summary] eq "Arbeit Torsten Spaet") (set Rahlstedt_2155 start) DOELSE (set Rahlstedt_2155 stop)
   NAME       DBPlan_AnAus
   NR         283
   NTFY_ORDER 50-DBPlan_AnAus
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-07-09 19:45:00   Device          myCalView
     2016-07-09 06:48:29   cmd             2
     2016-07-09 06:48:29   cmd_event       myCalView
     2016-07-09 06:48:29   cmd_nr          2
     2016-07-09 19:45:00   e_myCalView_today_001_summary Arbeit Torsten WE
     2016-07-09 06:48:29   state           cmd_2
     2016-07-09 06:48:20   timer_1_c1      10.07.2016 04:00:00|8
     2016-07-09 06:48:20   timer_2_c1      10.07.2016 05:40:00|8
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"8") and ReadingValDoIf($hash,'myCalView','today_001_summary','','',AttrVal($hash->{NAME},'notexist',undef)) eq "Arbeit Torsten Frueh"
   Days:
     0          8
     1          8
   Devices:
     0           myCalView
     all         myCalView
   Do:
     0:
       0          set Oldesloe_0430 start
     1:
       0          set Oldesloe_0430 stop
   Helper:
     event      t_001_bdate: 27.06.2016,t_001_btime: 10:00:00,t_001_summary: Arbeit Torsten spät,t_001_source: Arbeit_Torsten,t_001_edate: 27.06.2016,t_001_etime: 11:00:00,t_001_mode: next,t_002_bdate: 28.06.2016,t_002_btime: 13:00:00,t_002_summary: Arbeit Torsten Spaet,t_002_source: Arbeit_Torsten,t_002_location: abcd,t_002_edate: 28.06.2016,t_002_etime: 21:30:00,t_002_mode: next,t_003_bdate: 05.07.2016,t_003_btime: 05:00:00,t_003_summary: Arbeit Torsten Frueh,t_003_source: Arbeit_Torsten,t_003_location: abcd,t_003_edate: 05.07.2016,t_003_etime: 13:45:00,t_003_mode: next,today_001_bdate: heute,today_001_btime: 07:45:00,today_001_summary: Arbeit Torsten WE,today_001_source: Arbeit_Torsten,today_001_edate: 09.07.2016,today_001_etime: 18:30:00,today_001_mode: next,t: 3 td: 1 tm: 0,c-term: 3,c-tomorrow: 0,c-today: 1
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   myCalView
     timerevent t_001_bdate: 27.06.2016,t_001_btime: 10:00:00,t_001_summary: Arbeit Torsten spät,t_001_source: Arbeit_Torsten,t_001_edate: 27.06.2016,t_001_etime: 11:00:00,t_001_mode: next,t_002_bdate: 28.06.2016,t_002_btime: 13:00:00,t_002_summary: Arbeit Torsten Spaet,t_002_source: Arbeit_Torsten,t_002_location: abcd,t_002_edate: 28.06.2016,t_002_etime: 21:30:00,t_002_mode: next,t_003_bdate: 05.07.2016,t_003_btime: 05:00:00,t_003_summary: Arbeit Torsten Frueh,t_003_source: Arbeit_Torsten,t_003_location: abcd,t_003_edate: 05.07.2016,t_003_etime: 13:45:00,t_003_mode: next,today_001_bdate: heute,today_001_btime: 07:45:00,today_001_summary: Arbeit Torsten WE,today_001_source: Arbeit_Torsten,today_001_edate: 09.07.2016,today_001_etime: 18:30:00,today_001_mode: next,t: 3 td: 1 tm: 0,c-term: 3,c-tomorrow: 0,c-today: 1
     triggerDev myCalView
     timerevents:
       t_001_bdate: 27.06.2016
       t_001_btime: 10:00:00
       t_001_summary: Arbeit Torsten spät
       t_001_source: Arbeit_Torsten
       t_001_edate: 27.06.2016
       t_001_etime: 11:00:00
       t_001_mode: next
       t_002_bdate: 28.06.2016
       t_002_btime: 13:00:00
       t_002_summary: Arbeit Torsten Spaet
       t_002_source: Arbeit_Torsten
       t_002_location: abcd
       t_002_edate: 28.06.2016
       t_002_etime: 21:30:00
       t_002_mode: next
       t_003_bdate: 05.07.2016
       t_003_btime: 05:00:00
       t_003_summary: Arbeit Torsten Frueh
       t_003_source: Arbeit_Torsten
       t_003_location: abcd
       t_003_edate: 05.07.2016
       t_003_etime: 13:45:00
       t_003_mode: next
       today_001_bdate: heute
       today_001_btime: 07:45:00
       today_001_summary: Arbeit Torsten WE
       today_001_source: Arbeit_Torsten
       today_001_edate: 09.07.2016
       today_001_etime: 18:30:00
       today_001_mode: next
       t: 3 td: 1 tm: 0
       c-term: 3
       c-tomorrow: 0
       c-today: 1
     timereventsState:
       t_001_bdate: 27.06.2016
       t_001_btime: 10:00:00
       t_001_summary: Arbeit Torsten spät
       t_001_source: Arbeit_Torsten
       t_001_edate: 27.06.2016
       t_001_etime: 11:00:00
       t_001_mode: next
       t_002_bdate: 28.06.2016
       t_002_btime: 13:00:00
       t_002_summary: Arbeit Torsten Spaet
       t_002_source: Arbeit_Torsten
       t_002_location: abcd
       t_002_edate: 28.06.2016
       t_002_etime: 21:30:00
       t_002_mode: next
       t_003_bdate: 05.07.2016
       t_003_btime: 05:00:00
       t_003_summary: Arbeit Torsten Frueh
       t_003_source: Arbeit_Torsten
       t_003_location: abcd
       t_003_edate: 05.07.2016
       t_003_etime: 13:45:00
       t_003_mode: next
       today_001_bdate: heute
       today_001_btime: 07:45:00
       today_001_summary: Arbeit Torsten WE
       today_001_source: Arbeit_Torsten
       today_001_edate: 09.07.2016
       today_001_etime: 18:30:00
       today_001_mode: next
       state: t: 3 td: 1 tm: 0
       c-term: 3
       c-tomorrow: 0
       c-today: 1
     triggerEvents:
       t_001_bdate: 27.06.2016
       t_001_btime: 10:00:00
       t_001_summary: Arbeit Torsten spät
       t_001_source: Arbeit_Torsten
       t_001_edate: 27.06.2016
       t_001_etime: 11:00:00
       t_001_mode: next
       t_002_bdate: 28.06.2016
       t_002_btime: 13:00:00
       t_002_summary: Arbeit Torsten Spaet
       t_002_source: Arbeit_Torsten
       t_002_location: abcd
       t_002_edate: 28.06.2016
       t_002_etime: 21:30:00
       t_002_mode: next
       t_003_bdate: 05.07.2016
       t_003_btime: 05:00:00
       t_003_summary: Arbeit Torsten Frueh
       t_003_source: Arbeit_Torsten
       t_003_location: abcd
       t_003_edate: 05.07.2016
       t_003_etime: 13:45:00
       t_003_mode: next
       today_001_bdate: heute
       today_001_btime: 07:45:00
       today_001_summary: Arbeit Torsten WE
       today_001_source: Arbeit_Torsten
       today_001_edate: 09.07.2016
       today_001_etime: 18:30:00
       today_001_mode: next
       t: 3 td: 1 tm: 0
       c-term: 3
       c-tomorrow: 0
       c-today: 1
     triggerEventsState:
       t_001_bdate: 27.06.2016
       t_001_btime: 10:00:00
       t_001_summary: Arbeit Torsten spät
       t_001_source: Arbeit_Torsten
       t_001_edate: 27.06.2016
       t_001_etime: 11:00:00
       t_001_mode: next
       t_002_bdate: 28.06.2016
       t_002_btime: 13:00:00
       t_002_summary: Arbeit Torsten Spaet
       t_002_source: Arbeit_Torsten
       t_002_location: abcd
       t_002_edate: 28.06.2016
       t_002_etime: 21:30:00
       t_002_mode: next
       t_003_bdate: 05.07.2016
       t_003_btime: 05:00:00
       t_003_summary: Arbeit Torsten Frueh
       t_003_source: Arbeit_Torsten
       t_003_location: abcd
       t_003_edate: 05.07.2016
       t_003_etime: 13:45:00
       t_003_mode: next
       today_001_bdate: heute
       today_001_btime: 07:45:00
       today_001_summary: Arbeit Torsten WE
       today_001_source: Arbeit_Torsten
       today_001_edate: 09.07.2016
       today_001_etime: 18:30:00
       today_001_mode: next
       state: t: 3 td: 1 tm: 0
       c-term: 3
       c-tomorrow: 0
       c-today: 1
   Internals:
   Interval:
     0          -1
     1          0
   Itimer:
   Localtime:
     0          1468116000
     1          1468122000
   Readings:
     0           myCalView:today_001_summary
     all         myCalView:today_001_summary
   Realtime:
     0          04:00:00
     1          05:40:00
   Regexp:
     0:
     All:
   State:
   Time:
     0          04:00:00
     1          05:40:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timers:
     0           0  1
   Trigger:
   Triggertime:
     1468116000:
       localtime  1468116000
       Hash:
     1468122000:
       localtime  1468122000
       Hash:
Attributes:
   room       ÖPNV


Vielen Dank
Hoffi
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: Ellert am 10 Juli 2016, 06:58:29
Du bist sehr grosszügig im Einsatz von DOELSE. Woraus leitest Du die mehrfache Verwendung in einem DOIF ab?

Zur Erinnerung, die Syntax aus der Befehlsreferenz:
define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)
Das DOIF endet nach dem ersten DOELSE.
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: Thoffi1978 am 11 Juli 2016, 18:07:57
mmh. macht Sinn.

Das mit dem "Schluß" nach dem DOELSE ist mir gar nicht so bewusst gewesen.
Dann müßte ich also entweder, alle als einzelne DOIF´s oder ganz zum Schluß ein
DOELSE set Oldesloe_.* stop; Rahlstedt_.* stop 
setzen?

Hoffi
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: automatisierer am 11 Juli 2016, 19:05:40
Zitat von: Ellert am 10 Juli 2016, 06:58:29
Du bist sehr grosszügig im Einsatz von DOELSE. Woraus leitest Du die mehrfache Verwendung in einem DOIF ab?

Zur Erinnerung, die Syntax aus der Befehlsreferenz:
define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)
Das DOIF endet nach dem ersten DOELSE.

da steht es doch..... DOELSEIF so viele wie du willst. DOELSE ist optional, dass muss nicht. Der DOELSE-Fall wird immer dann wahr, wenn keine der anderen Bedingungen die im DOIF oder DOELSEIF stehen zutreffen. Da muss man halt selber wissen, ob man das haben möchte oder nicht. Das erklärt dann ja auch warum nur ein DOELSE pro DOIF geht.
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: en-trust am 28 März 2018, 09:47:38
Eine generelle Frage...
DO IF... ist eine Stapelverarbeitung, arbeitet von oben nach unten.

Wenn sich eine Bedingung ändert springt er zum nächsten Else bis fhem unten angekommen ist. Wie bekommt man es aber hin, dass fhem immer wieder von vorne anfängt ?
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: gbomacfly am 28 März 2018, 10:10:06
attr DBPlan_AnAus do always
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: Otto123 am 28 März 2018, 10:20:28
Zitat von: en-trust am 28 März 2018, 09:47:38
Eine generelle Frage...
DO IF... ist eine Stapelverarbeitung, arbeitet von oben nach unten.

Wenn sich eine Bedingung ändert springt er zum nächsten Else bis fhem unten angekommen ist. Wie bekommt man es aber hin, dass fhem immer wieder von vorne anfängt ?
Hi,

ich würde das nicht als Stapelverarbeitung benennen. Und FHEM arbeitet Eventbasiert und nicht in Schleifen.

Erzeugt eines der im DOIF beteiligten Devices einen Event wird das DOIF getriggert, ist eine Bedingung erfüllt (DOIF oder DOELSEIF Zweig) ist dort Ende.
Ist keine erfüllt wird eine vorhandene DOELSE abgearbeitet, ansonsten passiert nichts.
Beim nächsten Event geht das Spiel von vorn los.

Siehe Doku (der "langweilige" Text am Anfang)  ;D -> https://fhem.de/commandref_DE.html#DOIF

Gruß Otto
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: rabehd am 28 März 2018, 10:22:36
Otto war schneller
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: en-trust am 28 März 2018, 10:32:18
do always hab ich bereits drin. Macht aber nicht was es soll.



([HomeOffice.OnOff] eq "on") (set Modus_FHZ Auto)
DOELSEIF ([residents] eq "home" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Auto)
DOELSEIF ([residents] eq "absent" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Away)
DOELSEIF ([residents] eq "gone" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Holiday)
DOELSEIF ([HomeOffice.OnOff] ne "on") (set Modus_FHZ AUS)
DOELSE (set Modus_FHZ AUS)


Habe folgendes versucht. Habe manuell mal residents auf absent gestellt, springt auf cmd_3 dann wieder zurück auf home, springt auf cmd_6

List...

Internals:
   CFGFN      ./FHEM/fhem_activeactors.cfg
   DEF        ([HomeOffice.OnOff] eq "on") (set Modus_FHZ Auto)
DOELSEIF ([residents] eq "home" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Auto)
DOELSEIF ([residents] eq "absent" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Away)
DOELSEIF ([residents] eq "gone" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Holiday)
DOELSEIF ([HomeOffice.OnOff] ne "on") (set Modus_FHZ AUS)
DOELSE (set Modus_FHZ AUS)
   NAME       Modus_FHZ.Anwesenheit
   NR         269
   NTFY_ORDER 50-Modus_FHZ.Anwesenheit
   STATE      cmd_6
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         logdb:
           TIME       1522225901.55681
           VALUE      6
       cmd_event:
         logdb:
           TIME       1522225901.55681
           VALUE      residents
       cmd_nr:
         logdb:
           TIME       1522225901.55681
           VALUE      6
       mode:
         logdb:
           TIME       1522222923.01689
           VALUE      enabled
       state:
         logdb:
           TIME       1522225901.55681
           VALUE      cmd_6
       wait_timer:
         logdb:
           TIME       1522224278.92304
           VALUE      no timer
   READINGS:
     2018-03-28 10:31:41   Device          residents
     2018-03-28 10:31:41   cmd             6
     2018-03-28 10:31:41   cmd_event       residents
     2018-03-28 10:31:41   cmd_nr          6
     2018-03-28 10:31:41   e_residents_STATE home
     2018-03-28 09:42:02   mode            enabled
     2018-03-28 10:31:41   state           cmd_6
     2018-03-28 10:04:38   wait_timer      no timer
   Regex:
   condition:
     0          InternalDoIf($hash,'HomeOffice.OnOff','STATE') eq "on"
     1          InternalDoIf($hash,'residents','STATE') eq "home" and InternalDoIf($hash,'HomeOffice.OnOff','STATE') ne "on"
     2          InternalDoIf($hash,'residents','STATE') eq "absent" and InternalDoIf($hash,'HomeOffice.OnOff','STATE') ne "on"
     3          InternalDoIf($hash,'residents','STATE') eq "gone" and InternalDoIf($hash,'HomeOffice.OnOff','STATE') ne "on"
     4          InternalDoIf($hash,'HomeOffice.OnOff','STATE') ne "on"
   devices:
     0           HomeOffice.OnOff
     1           residents HomeOffice.OnOff
     2           residents HomeOffice.OnOff
     3           residents HomeOffice.OnOff
     4           HomeOffice.OnOff
     all         HomeOffice.OnOff residents
   do:
     0:
       0          set Modus_FHZ Auto
     1:
       0          set Modus_FHZ Auto
     2:
       0          set Modus_FHZ Away
     3:
       0          set Modus_FHZ Holiday
     4:
       0          set Modus_FHZ AUS
     5:
       0          set Modus_FHZ AUS
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      durTimerPresence_cr: 56,durTimerPresence: 00:56:09
     globalinit 1
     last_timer 0
     sleepdevice Modus_FHZ.Anwesenheit
     sleepsubtimer 0
     sleeptimer -1
     timerdev   residents
     timerevent durTimerPresence_cr: 56,durTimerPresence: 00:56:09
     triggerDev residents
     timerevents:
       durTimerPresence_cr: 56
       durTimerPresence: 00:56:09
     timereventsState:
       durTimerPresence_cr: 56
       durTimerPresence: 00:56:09
     triggerEvents:
       durTimerPresence_cr: 56
       durTimerPresence: 00:56:09
     triggerEventsState:
       durTimerPresence_cr: 56
       durTimerPresence: 00:56:09
   internals:
     0           HomeOffice.OnOff:STATE
     1           residents:STATE HomeOffice.OnOff:STATE
     2           residents:STATE HomeOffice.OnOff:STATE
     3           residents:STATE HomeOffice.OnOff:STATE
     4           HomeOffice.OnOff:STATE
     all         HomeOffice.OnOff:STATE residents:STATE
   itimer:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   group      Anwesenheit
   room       Automation
   wait       900:180
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: rabehd am 28 März 2018, 11:56:16
ZitatHabe manuell mal residents auf absent gestellt, springt auf cmd_3 dann wieder zurück auf home, springt auf cmd_6
und die 2. Bedingung?
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: en-trust am 28 März 2018, 14:16:18
Momentan steht er auf cmd_2, weil HomeOffice auf off und Resident auf home stehen. Dann habe ich HomeOffice auf On gesetzt und er sprach auf cmd_1.
Dann habe ich resident auf absent gesetzt und fhem sprach auf cmd_6, obwohl HomeOffice On ist.

Internals:
   CFGFN      ./FHEM/fhem_activeactors.cfg
   DEF        ([HomeOffice.OnOff] eq "on") (set Modus_FHZ Auto)
DOELSEIF ([residents] eq "home" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Auto)
DOELSEIF ([residents] eq "absent" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Away)
DOELSEIF ([residents] eq "gone" and [HomeOffice.OnOff] ne "on") (set Modus_FHZ Holiday)
DOELSEIF ([HomeOffice.OnOff] ne "on") (set Modus_FHZ AUS)
DOELSE (set Modus_FHZ AUS)
   NAME       Modus_FHZ.Anwesenheit
   NR         269
   NTFY_ORDER 50-Modus_FHZ.Anwesenheit
   STATE      cmd_6
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         logdb:
           TIME       1522239341.63453
           VALUE      6
       cmd_event:
         logdb:
           TIME       1522239341.63453
           VALUE      residents
       cmd_nr:
         logdb:
           TIME       1522239341.63453
           VALUE      6
       mode:
         logdb:
           TIME       1522222923.01689
           VALUE      enabled
       state:
         logdb:
           TIME       1522239341.63453
           VALUE      cmd_6
       wait_timer:
         logdb:
           TIME       1522239281.18882
           VALUE      no timer
   READINGS:
     2018-03-28 14:15:41   Device          residents
     2018-03-28 14:15:41   cmd             6
     2018-03-28 14:15:41   cmd_event       residents
     2018-03-28 14:15:41   cmd_nr          6
     2018-03-28 14:14:08   e_HomeOffice.OnOff_STATE on
     2018-03-28 14:15:41   e_residents_STATE absent
     2018-03-28 09:42:02   mode            enabled
     2018-03-28 14:15:41   state           cmd_6
     2018-03-28 14:14:41   wait_timer      no timer
   Regex:
   condition:
     0          InternalDoIf($hash,'HomeOffice.OnOff','STATE') eq "on"
     1          InternalDoIf($hash,'residents','STATE') eq "home" and InternalDoIf($hash,'HomeOffice.OnOff','STATE') ne "on"
     2          InternalDoIf($hash,'residents','STATE') eq "absent" and InternalDoIf($hash,'HomeOffice.OnOff','STATE') ne "on"
     3          InternalDoIf($hash,'residents','STATE') eq "gone" and InternalDoIf($hash,'HomeOffice.OnOff','STATE') ne "on"
     4          InternalDoIf($hash,'HomeOffice.OnOff','STATE') ne "on"
   devices:
     0           HomeOffice.OnOff
     1           residents HomeOffice.OnOff
     2           residents HomeOffice.OnOff
     3           residents HomeOffice.OnOff
     4           HomeOffice.OnOff
     all         HomeOffice.OnOff residents
   do:
     0:
       0          set Modus_FHZ Auto
     1:
       0          set Modus_FHZ Auto
     2:
       0          set Modus_FHZ Away
     3:
       0          set Modus_FHZ Holiday
     4:
       0          set Modus_FHZ AUS
     5:
       0          set Modus_FHZ AUS
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      durTimerAbsence_cr: 1,durTimerAbsence: 00:01:00
     globalinit 1
     last_timer 0
     sleepdevice HomeOffice.OnOff
     sleepsubtimer 0
     sleeptimer -1
     timerdev   residents
     timerevent durTimerAbsence_cr: 1,durTimerAbsence: 00:01:00
     triggerDev residents
     timerevents:
       durTimerAbsence_cr: 1
       durTimerAbsence: 00:01:00
     timereventsState:
       durTimerAbsence_cr: 1
       durTimerAbsence: 00:01:00
     triggerEvents:
       durTimerAbsence_cr: 1
       durTimerAbsence: 00:01:00
     triggerEventsState:
       durTimerAbsence_cr: 1
       durTimerAbsence: 00:01:00
   internals:
     0           HomeOffice.OnOff:STATE
     1           residents:STATE HomeOffice.OnOff:STATE
     2           residents:STATE HomeOffice.OnOff:STATE
     3           residents:STATE HomeOffice.OnOff:STATE
     4           HomeOffice.OnOff:STATE
     all         HomeOffice.OnOff:STATE residents:STATE
   itimer:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   do         always
   group      Anwesenheit
   room       Automation
   wait       900:180
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: rabehd am 28 März 2018, 14:34:43
Du fragst HomeOffice.OnOff auf on ab, schreibst aber HomeOffice ist On. Ich hoffe Du schreibst nur technisch unsauber.

Zitatsprach auf cmd_6, obwohl HomeOffice On ist.
Du hast in Deinen Bedingungen festgelegt: Wenn residents entspricht "absent" und HomeOffice.OnOff entspricht NICHT "on", dann...
Somit bleibt ihm ja nur cmd_6!

Es gibt da auch einen Unterschied zwischen Event und Zustand.
ZitatDann habe ich resident auf absent gesetzt
Das ist das Event.
Zitatobwohl HomeOffice On ist
Das ist der Zustand.
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: pc1246 am 28 März 2018, 15:17:21
Moin
Endlich mal wieder ein gekaperter thread!
@en-trust: Hast du das wait 900:180 mit Absicht eingebaut? Ich weiss nicht was DOIF dann in der Zwischenzeit macht, sprich die 180 Sekunden bis es zu cmd_2 geht. Und das DOELSE schlaegt ja immer zu, wenn die anderen Bedingungen nicht erfuellt sind. DOalways scheint mir auch unnoetig zu sein, da Du ja immer sauber wechselst!
Gruss Christoph
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: Otto123 am 28 März 2018, 15:31:24
ergänzend zum Beitrag von rabehd wollt ich noch sagen:
Es hält absolut fit wenn man in dem einen Zweig auf eq und im anderen auf ne testet.
Auch immer die Logiktabelle im Kopf haben (0 and irgendwas) ist immer 0 nur (1 and 1) ist 1 bzw: (1 or irgendwas) ist immer 1 nur (0 or 0) ist 0!

Was soll den wirklich das Ziel sein? Ich denke der Ansatz ist falsch:
Die erste Bedingung ist für mich fragwürdig ([HomeOffice.OnOff] eq "on") ich denke hier fehlt eine weitere Bedingung sonst behakt sich das immer mit den (jetzt falschen) Alternativen.

Wie gesagt: Er geht NICHT von oben nach unten durch, er bleibt beim Zweig mit der wahren Bedingung hängen!!!

Gruß Otto
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: en-trust am 28 März 2018, 19:21:36
Vielleicht ist auch mein Ansatz falsch oder es geht einfacher.

Ausgangsitutation war...

([residents] eq "home") (set Modus_FHZ Auto)
DOELSEIF ([residents] eq "absent") (set Modus_FHZ Away)
DOELSEIF ([residents] eq "gone") (set Modus_FHZ Holiday)
DOELSE (set Modus_FHZ AUS)


Das funktionierte auch soweit, bis mein A5 sich ständig vom Netz (trotz hping oder wlan Prüfung) abgemeldet hat und die Jalousie permanent schloss bzw in dem Fall die FHZ auf den away Modus ging.

Also habe ich einen dummy HomeOffice.OnOff erstellt, wo ich fhem explizit sage, dass ich wirklich zu Hause bin (Status = On) und er somit die Regeln außer Kraft setzen soll.

Vielleicht geht es auch mit disabled und enable, statt auf HomeOffice abzufragen ?

#HomeOffice.OnOff definieren
define HomeOffice.OnOff dummy
attr HomeOffice.OnOff room 3.2_Anwesenheit,Automation
attr HomeOffice.OnOff webCmd on:off

#HomeOffice.Modus.OnOff definieren
define HomeOffice.Modus.On notify HomeOffice.OnOff:on.* { fhem ("set Modus_FHZ disable; set Modus_RL disable") }
define HomeOffice.Modus.Off notify HomeOffice.OnOff:off.* { fhem ("set Modus_FHZ enable; set Modus_RL enable") }
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: Otto123 am 28 März 2018, 21:21:29
Dann binde doch deinen festen dummy einfach in deine residents als Bewohner ein?
Titel: Antw:Mehrere DOELSEIF in einem DOIF starten nicht?
Beitrag von: rabehd am 29 März 2018, 08:32:16
Man sollte die Ursache beheben und nicht die Symptome überdecken. Wenn Deine Anwesenheitserkennung nicht stabil ist, dann musst Du dort ran.
Bei mir schaltet Tasker auf den Handy die Anwesenheit, zusätzlich kann ich das noch per telegram und seit ein paar Wochen sind iButton die Hauptlösung.
Auf jeden Fall würde ich über Otto's Vorschlag nachdenken.