Hauptmenü

DOIF löst nicht mehr aus

Begonnen von en-trust, 10 März 2018, 19:34:16

Vorheriges Thema - Nächstes Thema

en-trust

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 ?

Ellert

ZitatMuss ich überhaupt do always nehmen ?
Wenn eine Bedingung mehr als einmal direkt nacheinander wahr werden darf und schalten soll, dann ja, sonst nicht.

en-trust

dann wäre das always ja eigentlich richtig.

Otto123

poste doch mal ein list wenn es nicht gegangen ist aber hätte sollen. da sieht man die Zustände und events...

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

KernSani

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)

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

en-trust

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)

Otto123

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

nils_

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? ;)
viele Wege in FHEM es gibt!

en-trust

vielleicht habe ich auch den Sinn von do always nicht verstanden.

nils_

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.
viele Wege in FHEM es gibt!

en-trust

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)

Otto123

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

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Ellert

Der Umstieg vom WeekdayTimer ist nicht immer leicht define shutter WeekdayTimer bath 12345|05:20|up 12345|20:30|down