Doof defekt nach Änderung und wieder Rückbau

Begonnen von Wasserwerk33, 18 Mai 2020, 22:41:21

Vorheriges Thema - Nächstes Thema

Wasserwerk33

Hallo Leute,

Iregendwie habe ich mir mein DOIF zerschossen. Meinte ich hätte es wieder richtig zurückgebaut. Es hat vorher immer funktioniert. Wenn ich die Anlage abgeschaltet habe ging das Licht aus. Nur leider geht es jetzt nicht mehr aus. Es schaltet jetzt um um 22:10 obwohl Eltern präsent steht und Babysitter auf weg. Wo habe ich den Schreibfehler?

Ich wollte ein Zufallsgenerator mi5 einbauen da wo Eltern absent sind. Habe ich aber nicht hinbekommen. Vielleicht hättet ihr mal ein Tipp.

Das ganze DOIF hat auch wenn ich Check Abfrage gemacht habe vor 22:30 Uhr geschaltet das hat es vorher nicht gemacht.

Wo ist mein Fehler?  :(

Danke für die Hilfe

Internals:
   DEF        ((([22:15|Mo Di Mi Do So] or [23:30|Fr Sa]) and [?Eltern] eq "absent") and [?Babysitter] eq "weg") (set Erdgeschoss_Licht off)
DOELSEIF
((([22:30-23:59]) and [?avr:power] eq "off") and  [?Stefan] eq "present" or [?Christin] eq "present") (set Erdgeschoss_Licht off)
   FUUID      5c8d4c8d-f33f-faf7-95cc-51e1a3d2f338e1e6
   MODEL      FHEM
   NAME       Licht_ausstellen
   NOTIFYDEV  global
   NR         60
   NTFY_ORDER 50-Licht_ausstellen
   STATE      cmd_2
   TYPE       DOIF
   VERSION    20811 2019-12-22 17:45:08
   READINGS:
     2020-05-18 22:33:16   cmd             2
     2020-05-18 22:33:16   cmd_event       set_cmd_2
     2020-05-18 22:33:16   cmd_nr          2
     2020-05-18 22:31:58   mode            enabled
     2020-05-18 22:33:16   state           cmd_2
     2020-05-18 22:31:58   timer_01_c01    19.05.2020 22:15:00|MoDiMiDoSo
     2020-05-18 22:31:58   timer_02_c01    18.05.2020 23:30:00|FrSa
     2020-05-18 22:31:58   timer_03_c02    19.05.2020 22:30:00
     2020-05-18 22:31:58   timer_04_c02    18.05.2020 23:59:00
   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ((::DOIF_time_once($hash,0,$wday,"MoDiMiDoSo") or ::DOIF_time_once($hash,1,$wday,"FrSa")) and ::InternalDoIf($hash,'Eltern','STATE') eq "absent") and ::InternalDoIf($hash,'Babysitter','STATE') eq "weg"
     1          ((::DOIF_time($hash,2,3,$wday,$hms)) and ::ReadingValDoIf($hash,'avr','power') eq "off") and  ::InternalDoIf($hash,'Stefan','STATE') eq "present" or ::InternalDoIf($hash,'Christin','STATE') eq "present"
   days:
     0          MoDiMiDoSo
     1          FrSa
   do:
     0:
       0          set Erdgeschoss_Licht off
     1:
       0          set Erdgeschoss_Licht off
     2:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 4
     sleeptimer -1
     triggerDev
     DOIF_eventa:
       cmd_nr: 2
       cmd: 2
       cmd_event: set_cmd_2
       cmd_2
     DOIF_eventas:
       cmd_nr: 2
       cmd: 2
       cmd_event: set_cmd_2
       state: cmd_2
   internals:
     all         Eltern:STATE Babysitter:STATE Stefan:STATE Christin:STATE
   interval:
     2          -1
     3          2
   intervalfunc:
   localtime:
     0          1589919300
     1          1589837400
     2          1589920200
     3          1589839140
   realtime:
     0          22:15:00
     1          23:30:00
     2          22:30:00
     3          23:59:00
   time:
     0          22:15:00
     1          23:30:00
     2          22:30:00
     3          23:59:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1
     1           2  3
   triggertime:
     1589837400:
       localtime  1589837400
       hash:
     1589839140:
       localtime  1589839140
       hash:
     1589919300:
       localtime  1589919300
       hash:
     1589920200:
       localtime  1589920200
       hash:
   uiState:
   uiTable:
Attributes:
   do         always

rabehd

ZitatMeinte ich hätte es wieder richtig zurückgebaut. Es hat vorher immer funktioniert.

Dann hole es doch aus dem Backup zurück und fange neu an.
Wie wäre es mit einer Kopie anzufangen (Original auf disable)?
Auch funktionierende Lösungen kann man hinterfragen.

Otto123

Moin,

wenn da 22:10 etwas schaltet kommt es nicht von diesem DOIF!
Die rote Klammer ist unnötig:
Zitat((([22:15|Mo Di Mi Do So] or [23:30|Fr Sa]) and [?Eltern] eq "absent") and [?Babysitter] eq "weg")
Die könntest Du hier recyceln:
Zitat((([22:30-23:59]) and [?avr:power] eq "off") and  ([?Stefan] eq "present" or [?Christin] eq "present"))
Das würde es aus meiner Sicht logischer machen, aber vielleicht willst Du etwas anderes.
Wobei auch hier Klammern unnötig ist:
([22:30-23:59] and [?avr:power] eq "off" and  ([?Stefan] eq "present" or [?Christin] eq "present"))Ohne Klammern werden erst die and und dann die or aufgelöst:
https://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity

Durch die ? triggert aber nur die Zeit! Änderung der Status im Zeitraum 22:30-23:59 spielen keine Rolle. Insofern erscheint mir auch ein do always nicht logisch.

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

Wasserwerk33

Okay danke werde es damit mal ausprobieren.
War nur irgendwie nach dem Rückbau sau komisch das es auf einmal so komisch schaltet.

Wasserwerk33

Es wollte einfach nicht klappen. Habe es nun gelöscht und einfach neu geschrieben. Jetzt geht es. Danke für eure Hilfe