FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: en-trust am 10 März 2018, 19:34:16

Titel: DOIF löst nicht mehr aus
Beitrag von: en-trust am 10 März 2018, 19:34:16
seit dem ich do always eingefügt habe, werden meine Aktionen nicht mehr ausgeführt. Was stimmt daran nicht ?

([residents] eq "home") (set Modus_RL Auto)
DOELSEIF ([residents] eq "home" and (Fr-So[23:00-09:00])) (set Modus_RL AUS)
DOELSEIF ([residents] eq "absent") (set Modus_RL Away)
DOELSEIF ([residents] eq "gone") (set Modus_RL Holiday)
DOELSEIF (set Modus_RL AUS)


([Modus_RL] eq "Auto" and ([[du_WZ.Jalousie.Rechts.Up_WT]|8] or [[du_WZ.Jalousie.Rechts.Up_WE]|7])) (set WZ.Jalousie.Rechts 100)
DOELSEIF ([Modus_RL] eq "Auto" and ([[du_WZ.Jalousie.Rechts.Down]|8] or [[du_WZ.Jalousie.Rechts.Down]|7])) (set WZ.Jalousie.Rechts 0)
DOELSEIF ([Modus_RL] eq "Holiday" and [Tageslicht] eq "hell") (set WZ.Jalousie.Rechts 15)
DOELSEIF ([Modus_RL] eq "Holiday" and [Tageslicht] eq "dunkel") (set WZ.Jalousie.Rechts 0)
DOELSEIF ([Modus_RL] eq "Away" and [Tageslicht] eq "hell") (set WZ.Jalousie.Rechts 15)
DOELSEIF ([Modus_RL] eq "Away" and [Tageslicht] eq "dunkel") (set WZ.Jalousie.Rechts 0)
DOELSEIF ([Modus_RL] eq "XMas" and ([[du_WZ.Jalousie.Rechts.Up_WT]|8] or [[du_WZ.Jalousie.Rechts.Up_WE]|7])) (set WZ.Jalousie.Rechts 100)
DOELSEIF ([Modus_RL] eq "XMas" and [Tageslicht] eq "dunkel") (set WZ.Jalousie.Rechts 0)


bei beiden ist das attribut do always drin.
Ist der Resident absent sollte eigentlich das Rollo auf 15 gesetzt werden.

DOELSEIF ([Modus_RL] eq "Away" and [Tageslicht] eq "hell") (set WZ.Jalousie.Rechts 15)

wurde aber nicht.

Muss ich überhaupt do always nehmen ?
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: Ellert am 10 März 2018, 19:42:00
ZitatMuss ich überhaupt do always nehmen ?
Wenn eine Bedingung mehr als einmal direkt nacheinander wahr werden darf und schalten soll, dann ja, sonst nicht.
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: en-trust am 10 März 2018, 20:25:00
dann wäre das always ja eigentlich richtig.
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: Otto123 am 10 März 2018, 20:47:08
poste doch mal ein list wenn es nicht gegangen ist aber hätte sollen. da sieht man die Zustände und events...

Gruß Otto
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: KernSani am 10 März 2018, 22:02:24
Erklärt das Ganze nicht wirklich, aber im ersten DOIF sind ein paar Unsauberkeiten:

1.) Du frägst einmal auf "home", einmal auf "home" und weitere Bedingungen ab - Die Zweige sollten eindeutig sein, sonst kann es zu komischem Verhalten kommen, je nachdem in welche Status sich das DOIF gerade befindet und ob do always gesetzt ist oder nicht.
2.) Das letzte DOELSEIF im ersten DOIF ist falsch, die Bedingung fehlt (eigentlich müsste das ein DOELSE sein)

Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: en-trust am 13 März 2018, 12:13:54
Ist es dann eher ratsam, wenn ich neben der home Abfrage dann auch jeweils die gegeteilige Zeitangabe mit abfrage, um es eindeutiger zu machen ?

([residents] eq "home" and (So-Fr[09:30-22:30])) (set Modus_RL Auto)
DOELSEIF ([residents] eq "home" and (Fr-So[23:00-09:00])) (set Modus_RL AUS)
DOELSEIF ([residents] eq "absent") (set Modus_RL Away)
DOELSEIF ([residents] eq "gone") (set Modus_RL Holiday)
DOELSE (set Modus_RL AUS)
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: Otto123 am 13 März 2018, 12:18:10
Ist der Syntax deiner Zeitangabe überhaupt richtig? Ich habe beim ersten mal nichts gesagt, weil sich bei DOIF ja alle Nasen lang was ändert ..
Aber aktuelle Doku:
ZitatWochentagsteuerung   back

Hinter der Zeitangabe kann ein oder mehrere Wochentage getrennt mit einem Pipezeichen | angegeben werden. Die Syntax lautet:

[<time>|012345678] 0-8 entspricht: 0-Sonntag, 1-Montag, ... bis 6-Samstag sowie 7 für Wochenende und Feiertage (entspricht $we) und 8 für Arbeitstage (entspricht !$we)

alternativ mit Buchstaben-Kürzeln:

[<time>|So Mo Di Mi Do Fr Sa WE AT] WE entspricht der Ziffer 7 und AT der Ziffer 8

Edit: Naja ich habe es mal probiert, Scheint die Doku nicht auf dem aktuellen Entwicklungsstand  ;)
Er nimmt es und setzt Timer

Gruß Otto
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: nils_ am 13 März 2018, 12:56:23
Zitat von: Otto123 am 10 März 2018, 20:47:08
poste doch mal ein list wenn es nicht gegangen ist aber hätte sollen. da sieht man die Zustände und events...

das wäre immer noch hilfreich....


andere frage:
warum baust du "do always" ein?
hat irgendwas nicht funktioniert?
lief es vorher??

soll nicht bedeuten, das es falsch ist "do always" zu benutzen. will nur den grund von dir verstehen? ;)
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: en-trust am 13 März 2018, 13:02:43
vielleicht habe ich auch den Sinn von do always nicht verstanden.
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: nils_ am 13 März 2018, 13:46:57
Zitat von: en-trust am 13 März 2018, 13:02:43
vielleicht habe ich auch den Sinn von do always nicht verstanden.

das kann ich nicht beurteilen, aber genau deshalb frage ich nach :)


das komplette list bist du noch schuldig.
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: en-trust am 15 März 2018, 19:25:19
hier mal das list des Modus Rolladen der derzeit vermutlich wegen der zusätzlichen Zeitangabe nicht funktioniert.

Internals:
   CFGFN      ./FHEM/fhem_activeactors.cfg
   DEF        ([residents] eq "home") (set Modus_RL Auto)
DOELSEIF ([residents] eq "home" and (Fr-So[23:00-09:00])) (set Modus_RL AUS)
DOELSEIF ([residents] eq "absent") (set Modus_RL Away)
DOELSEIF ([residents] eq "gone") (set Modus_RL Holiday)
DOELSE (set Modus_RL AUS)
   NAME       Modus_RL.Anwesenheit
   NR         164
   NTFY_ORDER 50-Modus_RL.Anwesenheit
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-03-15 19:22:42   Device          residents
     2018-03-13 13:29:18   cmd             1
     2018-03-13 13:29:18   cmd_event       residents
     2018-03-13 13:29:18   cmd_nr          1
     2018-03-15 19:22:42   e_residents_STATE home
     2018-03-15 17:59:26   error           condition c02: Bareword "Fr" not allowed while "strict subs" in use, line 1.

     2018-03-13 12:08:39   mode            enabled
     2018-03-13 13:29:18   state           cmd_1
     2018-03-15 09:00:00   timer_01_c02    15.03.2018 23:00:00
     2018-03-15 09:00:00   timer_02_c02    16.03.2018 09:00:00
     2018-03-13 14:34:53   wait_timer      no timer
   Regex:
   condition:
     0          InternalDoIf($hash,'residents','STATE') eq "home"
     1          InternalDoIf($hash,'residents','STATE') eq "home" and (Fr-SoDOIF_time($hash,0,1,$wday,$hms))
     2          InternalDoIf($hash,'residents','STATE') eq "absent"
     3          InternalDoIf($hash,'residents','STATE') eq "gone"
   days:
   devices:
     0           residents
     1           residents
     2           residents
     3           residents
     all         residents
   do:
     0:
       0          set Modus_RL Auto
     1:
       0          set Modus_RL AUS
     2:
       0          set Modus_RL Away
     3:
       0          set Modus_RL Holiday
     4:
       0          set Modus_RL AUS
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      durTimerPresence_cr: 83,durTimerPresence: 01:23:14
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   residents
     timerevent durTimerPresence_cr: 83,durTimerPresence: 01:23:14
     triggerDev residents
     timerevents:
       durTimerPresence_cr: 83
       durTimerPresence: 01:23:14
     timereventsState:
       durTimerPresence_cr: 83
       durTimerPresence: 01:23:14
     triggerEvents:
       durTimerPresence_cr: 83
       durTimerPresence: 01:23:14
     triggerEventsState:
       durTimerPresence_cr: 83
       durTimerPresence: 01:23:14
   internals:
     0           residents:STATE
     1           residents:STATE
     2           residents:STATE
     3           residents:STATE
     all         residents:STATE
   interval:
     0          -1
     1          0
   itimer:
   localtime:
     0          1521151200
     1          1521187200
   readings:
   realtime:
     0          23:00:00
     1          09:00:00
   time:
     0          23:00:00
     1          09:00:00
   timeCond:
     0          1
     1          1
   timer:
     0          0
     1          0
   timers:
     1           0  1
   trigger:
   triggertime:
     1521151200:
       localtime  1521151200
       hash:
     1521187200:
       localtime  1521187200
       hash:
   uiState:
   uiTable:
Attributes:
   group      Anwesenheit
   room       Automation
   wait       900:180


Der Heizungsmodus FHZ klappt wenn ich away bin.

([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)


RL bleibt hingegen auf Auto

([residents] eq "home") (set Modus_RL Auto)
DOELSEIF ([residents] eq "home" and (Fr-So[23:00-09:00])) (set Modus_RL AUS)
DOELSEIF ([residents] eq "absent") (set Modus_RL Away)
DOELSEIF ([residents] eq "gone") (set Modus_RL Holiday)
DOELSE (set Modus_RL AUS)
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: Otto123 am 15 März 2018, 19:32:26
Da ist doch was mit dem Syntax faul ->
condition c02: Bareword "Fr" not allowed while "strict subs" in use, line 1.

das bezieht sich darauf -> DOELSEIF ([residents] eq "home" and (Fr-So[23:00-09:00])) (set Modus_RL AUS)

Eventuell so: [Fr-So|23:00-09:00]

Siehe mein Beitrag #6 dort habe ich die Definition probiert und die meckert nicht, aber die Ausführung scheint dann zu meckern.
Also ich würde es nach commandref machen
[23:00-09:00|Fr Sa So]

Gruß Otto
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: CoolTux am 15 März 2018, 19:34:05
Zitat
define di_clock_radio DOIF ([06:30|Mo Di Mi] or [08:30|Do Fr Sa So]) (set radio on) DOELSEIF ([08:00|Mo Di Mi] or [09:30|Do Fr Sa So]) (set radio off)


Beispiel aus der Commandref
Titel: Antw:DOIF löst nicht mehr aus
Beitrag von: Ellert am 15 März 2018, 19:51:02
Der Umstieg vom WeekdayTimer ist nicht immer leicht define shutter WeekdayTimer bath 12345|05:20|up 12345|20:30|down