Mehrere DOELSEIF in einem DOIF starten nicht?

Begonnen von Thoffi1978, 09 Juli 2016, 20:41:40

Vorheriges Thema - Nächstes Thema

Thoffi1978

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

Ellert

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.

Thoffi1978

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

automatisierer

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.

en-trust

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 ?

gbomacfly

FHEM auf Debian Server, LogDB, MAX!-HT, Yeelight, Sonoff-Tasmota, IT, Signalduino434, nanoCUL868
FHEM-Keller auf RPI Zero mit OBIS (FHEM2FHEM)
FHEM-WZ auf RPI Zero - BT auf Alexa
Diverse Eigenbausensoren mit Arduino/MQTT

Otto123

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
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

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

en-trust

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

rabehd

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?
Auch funktionierende Lösungen kann man hinterfragen.

en-trust

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

rabehd

#11
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.
Auch funktionierende Lösungen kann man hinterfragen.

pc1246

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
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

Otto123

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
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

en-trust

#14
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") }