DOIF bekommt ständig Status Meldung Hilfe!!!

Begonnen von Wasserwerk33, 25 Mai 2020, 22:05:37

Vorheriges Thema - Nächstes Thema

Wasserwerk33

Hallo Leute,

Wie und wo ist mein Fehler mit den ständigen Status Meldungen in meinem DOIF

Internals:
   DEF        (([?20:00-03:30]
and
[avr:power] eq "off" and [Stefan] eq "present") or [Christin] eq "present")
(set Erdgeschoss_Licht off )
DOELSEIF
(([([22:00]+int(rand(1800))) |Mo Di Mi Do So]) or ([([22:20]+int(rand(7200))) |Fr Sa])
and
[Stefan] eq "absent" and [Christin] eq "absent"
and
[avr:power] eq "off")
(set Erdgeschoss_Licht off )
   FUUID      5ec6df24-f33f-faf7-3710-eae47bcededb8c02
   MODEL      FHEM
   NAME       Licht_steuerung
   NOTIFYDEV  Christin,global,avr,Stefan
   NR         163
   NTFY_ORDER 50-Licht_steuerung
   STATE      cmd_1
   TYPE       DOIF
   VERSION    20811 2019-12-22 17:45:08
   READINGS:
     2020-05-26 00:10:23   Device          Stefan
     2020-05-26 00:10:23   cmd             1
     2020-05-26 00:10:23   cmd_event       Stefan
     2020-05-26 00:10:23   cmd_nr          1
     2020-05-26 00:10:21   e_Christin_STATE present
     2020-05-26 00:10:23   e_Stefan_STATE  present
     2020-05-25 23:58:51   e_avr_power     on
     2020-05-25 06:33:23   mode            enabled
     2020-05-26 00:10:23   state           cmd_1
     2020-05-25 21:47:17   timer_01_c01    26.05.2020 20:00:00
     2020-05-25 21:47:17   timer_02_c01    26.05.2020 03:30:00
     2020-05-25 22:18:48   timer_03_c02    26.05.2020 22:09:55|MoDiMiDoSo
     2020-05-25 21:47:17   timer_04_c02    26.05.2020 00:16:56|FrSa
   Regex:
     accu:
     cond:
       Christin:
         0:
           &STATE     ^Christin$
         1:
           &STATE     ^Christin$
       Stefan:
         0:
           &STATE     ^Stefan$
         1:
           &STATE     ^Stefan$
       avr:
         0:
           power      ^avr$:^power:
         1:
           power      ^avr$:^power:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          (::DOIF_time($hash,0,1,$wday,$hms)  and  ::ReadingValDoIf($hash,'avr','power') eq "off" and ::InternalDoIf($hash,'Stefan','STATE') eq "present") or ::InternalDoIf($hash,'Christin','STATE') eq "present"
     1          (::DOIF_time_once($hash,2,$wday,"MoDiMiDoSo")) or (::DOIF_time_once($hash,3,$wday,"FrSa"))  and  ::InternalDoIf($hash,'Stefan','STATE') eq "absent" and ::InternalDoIf($hash,'Christin','STATE') eq "absent"  and  ::ReadingValDoIf($hash,'avr','power') eq "off"
   days:
     2          MoDiMiDoSo
     3          FrSa
   do:
     0:
       0          set Erdgeschoss_Licht off
     1:
       0          set Erdgeschoss_Licht off
     2:
   helper:
     DEVFILTER  ^global$|^Christin$|^Stefan$|^avr$
     NOTIFYDEV  global|Christin|Stefan|avr
     event      present,presence: present
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   Stefan
     timerevent present,presence: present
     triggerDev Stefan
     timerevents:
       present
       presence: present
     timereventsState:
       state: present
       presence: present
     triggerEvents:
       present
       presence: present
     triggerEventsState:
       state: present
       presence: present
   internals:
     all         Stefan:STATE Christin:STATE
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1590516000
     1          1590456600
     2          1590523795
     3          1590445016
   perlblock:
   readings:
     all         avr:power
   realtime:
     0          20:00:00
     1          03:30:00
     2          22:09:55
     3          00:16:56
   time:
     0          20:00:00
     1          03:30:00
     2          ([22:00]+int(rand(1800)))
     3          ([22:20]+int(rand(7200)))
   timeCond:
     0          0
     1          0
     2          1
     3          1
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     1           2  3
   trigger:
   triggertime:
     1590445016:
       localtime  1590445016
       hash:
     1590456600:
       localtime  1590456600
       hash:
     1590516000:
       localtime  1590516000
       hash:
     1590523795:
       localtime  1590523795
       hash:
   uiState:
   uiTable:
Attributes:
   do         always
   room       Licht

amenomade

#1
Dein "list" ist unlesbar, so mit allem auf einer Zeile

Du hast immer noch das and/or Problem wie hier geantwortet: https://forum.fhem.de/index.php/topic,35638.msg1057332.html#msg1057332
Das ist genau wie der Unterschied zwischen

2 * 2 * 2 + 2 = (2 * 2 * 2) + 2 = 10 => was du geschrieben hast
und
2 * 2 * (2 + 2) = 16 => was du vermutlich willst

Die PRESENCE Devices melden sich regelmässig. Das heisst, dass Bedingung 1 regelmässig getriggert wird, und daher mit do always, cmd1 regelmässig ausgeführt wird. Schau mal die Events im Eventmonitor
Oder zeig die Definition deiner PRESENCE Dinge. Vielleicht reicht ein event-on-change-reading drauf

EDIT: Du hast wahrscheinlich das gleiche and/or Problem in der 2. Bedingung: die Zeit Bedingung für Mo Di Mi Do So schaltet unabhängig von den PRESENCE Melder und unabhängig von avr:power.

DEF (([?20:00-03:30] and [avr:power] eq "off" and [Stefan] eq "present")
  or [Christin] eq "present")
      (set Erdgeschoss_Licht off )
DOELSEIF (([([22:00]+int(rand(1800))) |Mo Di Mi Do So])
  or ([([22:20]+int(rand(7200))) |Fr Sa]) and [Stefan] eq "absent" and [Christin] eq "absent" and [avr:power] eq "off")
      (set Erdgeschoss_Licht off )
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wasserwerk33

#2
Ja genau so wie du es schreibst hätte ich es gerne. Werde mir die Events anschauen.

05-26 00:02:15 structure Erdgeschoss_Licht off
2020-05-26 00:02:15 IT Brennstuhl_C off
2020-05-26 00:02:15 CUL nanoCUL raw: is000FFFF0FF00
2020-05-26 00:02:15 IT Steckdose_1 off
2020-05-26 00:02:16 CUL nanoCUL raw: is1FFF1FF0FF00
2020-05-26 00:02:16 DOIF Licht_steuerung cmd_nr: 1
2020-05-26 00:02:16 DOIF Licht_steuerung cmd: 1
2020-05-26 00:02:16 DOIF Licht_steuerung cmd_event: Christin
2020-05-26 00:02:16 DOIF Licht_steuerung cmd_1
2020-05-26 00:02:16 PRESENCE Christin present
2020-05-26 00:02:16 PRESENCE Christin presence: present
2020-05-26 00:02:16 structure Eltern present
2020-05-26 00:02:16 DOIF Subwoofer_auto error: condition c01: Can't find string terminator '"' anywhere before EOF, line 1.
2020-05-26 00:02:16 structure Erdgeschoss_Licht off
2020-05-26 00:02:16 IT Brennstuhl_C off
2020-05-26 00:02:17 CUL nanoCUL raw: is000FFFF0FF00
2020-05-26 00:02:17 IT Steckdose_1 off
2020-05-26 00:02:17 CUL nanoCUL raw: is1FFF1FF0FF00
2020-05-26 00:02:17 DOIF Licht_steuerung cmd_nr: 1
2020-05-26 00:02:17 DOIF Licht_steuerung cmd: 1
2020-05-26 00:02:17 DOIF Licht_steuerung cmd_event: Stefan
2020-05-26 00:02:17 DOIF Licht_steuerung cmd_1
2020-05-26 00:02:17 PRESENCE Stefan present
2020-05-26 00:02:17 PRESENCE Stefan presence: present
2020-05-


So sieht es in meinem Event aus es wird ständig getriggert.

Wasserwerk33

Ich denke ich hab es. Hat zumindestens gerade passend geschaltet.

([?20:00-03:30]
and
[avr:power] eq "off" and ([Stefan] eq "present" or [Christin] eq "present"))
(set Erdgeschoss_Licht off )
DOELSEIF
(([([22:00]+int(rand(1800))) |Mo Di Mi Do So]) or ([([22:20]+int(rand(7200))) |Fr Sa])
and
[Stefan] eq "absent" and [Christin] eq "absent"
and
[avr:power] eq "off")
(set Erdgeschoss_Licht off )

amenomade

#4
Die erste Bedingung sieht besser aus, die 2. (DOELSEIF) ist meiner Meinung nach  immer noch falsch

Sollte es nicht eher
(zeit or zeit) and presence and presence and power
sein? Ich weiss nicht, was Du genau machen willst, aber so wie es im Moment ist, wird es Mo Di Mi Do So immer schalten, egal die presences und power.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wasserwerk33

#5
Ich hätte gerne am wochenende Unterschiedliche Zeiten zu in der Woche. Also in der Woche soll es so simuliert werden wenn wir nicht da sind als wären wir da und das abendliche TV prgramm ist zu ende. Und am Wochenende bleibt ja meistens etwas länger auf. Dort soll es dann länger an bleiben und anders schalten. Und es soll schalten wenn keiner von uns da ist.

Ja ich bekomme das mit den klammern nicht richtig hin. Weiß nie genau wann ich wo ein hinmachen muss. Versuche es über beiträge hier im Forum mir zusammen zu bauen.

Habe das Presence und Precense gegen einmal presence ausgetauscht.

amenomade

Zitat von: Wasserwerk33 am 27 Mai 2020, 13:02:40
Ich hätte gerne am wochenende Unterschiedliche Zeiten zu in der Woche. Also in der Woche soll es so simuliert werden wenn wir nicht da sind als wären wir da und das abendliche TV prgramm ist zu ende. Und am Wochenende bleibt ja meistens etwas länger auf. Dort soll es dann länger an bleiben und anders schalten. Und es soll schalten wenn keiner von uns da ist.

Ja ich bekomme das mit den klammern nicht richtig hin. Weiß nie genau wann ich wo ein hinmachen muss. Versuche es über beiträge hier im Forum mir zusammen zu bauen.

Habe das Presence und Precense gegen einmal presence ausgetauscht.

Hab dir den Tipp oben gegeben: "and" ist wie "*", or ist wie "+", was Assoziativität, Vorrang und Distributivität angeht.

Wenn Du 2 * 2 + 2
schreibst, ist est wie
(2*2) +2
2* (2 + 2) ist etwas anderes

Also
Bedingung1 and Bedingung2 or Bedingung3 = (Bedingung1 and Bedingung2) or Bedingung3 = "beide erste gleichzeitig wahr, oder 3. wahr"
Bedingung1 and (Bedingung2 or Bedingung3) = "erste whar, und dazu eine oder beide der beiden anderen"

In dem Sinn ist deine DOELSEIF Bedingung vielleicht doch wirklich was Du willst, ich kann es nicht schätzen:
- in der Woche immer ca. um 22:00 Uhr, egal ob programm zu Ende oder nicht, und egal ob ihr da oder nicht da seid
- am Wochenend gegen 22:20 Uhr, aber nur wenn programm zu Ende und ihr seid nicht da
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wasserwerk33

#7
Kann ich den eine Uhrzeit ans Ende setzten? Denn wenn ich das so lese müsste ich meine Letzte Bedingung ja umdrehen? oder spielt das keine rolle wo ich die Uhrzeit hinmachen? habe mal gelesen die muss an den Anfang. den es soll ja eigentlich schalten Bedingung und Bedingung und Zeit oder die Zeit.

([Eltern] eq "absent"
and
[avr:power] eq "off" and
([([22:00]+int(rand(1800))) |Mo Di Mi Do So]) or ([([22:20]+int(rand(7200))) |Fr Sa]))
(set Erdgeschoss_Licht off )


Dann wäre es doch so richtig oder nicht??
somit habe ich Doch bedigung 1 und bedingung 2 and (bedingung3 or bedingung4) somit sind die ersten beiden wahr, und oder einer der beiden anderen.

Damian

Bei and-Verknüpfung kannst du die Angaben drehen und wenden wie du willst - es ändert nichts an der Funktion bzw. Aussage.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

#9
Jetzt hast Du folgendes geschrieben:

- wenn Ende des Programs und Eltern absent um ca. 22:00 Uhr in der Woche => ausschalten
- um 22:20 Uhr am Wochenende, egal der Status des Programs und egal die Eltern => ausschalten

Eltern and Power and ZeitWoche
or
ZeitWE


Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wasserwerk33

#10
erstmal danke das ich euch die Zeit für mich nehmt und mir Helft.

okay dann muss zwischen Bedingung und "or" Bedingung die ")" weg und einer vor der Zeit auch noch. So das das system dann "eins" ergibt.

([Eltern] eq "absent"
and
[avr:power] eq "off" and
[([22:15]+int(rand(900))) |Mo Di Mi Do So] or ([([22:30]+int(rand(5400))) |Fr Sa]))
(set Erdgeschoss_Licht off )




Hätte da noch eine Frage hat mit diesem nichts zu tun. aber mit einem anderen Projekt.

Ich wurde gerne die jalousien schalten lassen. Kann ich alles nur mit getretten DOELSEIF schalten?? Oder gibt es noch eine trickt wie es nicht schaltet wenn CMD 1 schon ausgelöst wurde.
Also wenn ich 4 CMD drin habe schalten die immer weiter. Also wenn CMD 2 passt würden sie ja auch runter fahren und dann sind sie ja nicht auf sonnenscutz sondern zu.
gibt es da einen anderen Trick oder einfach nur passen schreiben? bei den anderen jalousien hatte ich reingeschrieben das erst der andere ausgelöst werden muss, bevor er wieder schalten darf.


Ihr müsst die "or" als richtig "oder" lesen

([?8:30-12:30] and [Twilight.Zuhause:azimuth] > 69 and [Twilight.Zuhause:azimuth] < 155 and [IbbenbuerenProplanta:fc0_weather9] =~ "heiter|klar|sonnig" and [LaCrosse_0C:temperature] > 14
or
[IbbenbuerenProplanta:fc0_weather9] =~"bedeckt|heiter" and  [LaCrosse_0C:temperature] > 19
or
[?12:30-18:00] and [Twilight.Zuhause:azimuth] > 155 and [Twilight.Zuhause:azimuth] < 264 and [IbbenbuerenProplanta:fc0_weather15] =~ "heiter|klar|sonnig" and  [LaCrosse_0C:temperature] > 15)
(set Sonnenschutz_OG_runter Trigger)
DOELSEIF
([?8:35-11:50] and [Twilight.Zuhause:azimuth] > 155 and [IbbenbuerenProplanta:fc_weather10] =~ "regen|wolkig|stark.bewoelkt"
or
[LaCrosse_0C:temperature] < 15
or
[?15:00-17:55] and [Twilight.Zuhause:azimuth] > 265 and [IbbenbuerenProplanta:fc_weather16] =~ "regen|wolkig|stark.bewoelkt"
or
[LaCrosse_0C:temperature] < 15)
(set Sonnenschutz_OG_hoch Trigger)



kann man das so schreiben wenn ich es richtig schreibe oder gibt es noch einen anderen weg?



amenomade

#11
([?8:35-11:50] and [Twilight.Zuhause:azimuth] > 155 and [IbbenbuerenProplanta:fc_weather10] =~ "regen|wolkig|stark.bewoelkt"
or
[LaCrosse_0C:temperature] < 15
or
[?15:00-17:55] and [Twilight.Zuhause:azimuth] > 265 and [IbbenbuerenProplanta:fc_weather16] =~ "regen|wolkig|stark.bewoelkt"
or
[LaCrosse_0C:temperature] < 15)


"etwas1 or etwas2 or etwas3 or etwas2 or etwas1 or etwas4 or etwas3 or etwas2 or etwas1 or etwas1 or etwas4"

hat genau das gleiche Verhalten wie

"etwas1 or etwas2 or etwas3 or etwas4"

Also das letzte [LaCrosse_0C:temperature] < 15 ist völlig überflüssig und ändert nichts an der Sache

Um nicht zu schalten, wenn CMD1 schon ausgelöst wurde kann man
.... and [$SELF] ne "cmd_1"

ZitatAlso wenn ich 4 CMD drin habe schalten die immer weiter
verstehe ich nicht. Du hast nur 2 cmds, und zwar hoch und runter.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Wasserwerk33

Ich hatte die einzelnen Uhrzeiten als erste mit jeweils einem DOELSEIF getrennt. Und dann schaltet er zum Beispiel nachmittags nochmals obwohl die Jalousien morgens schon runtergefahren sind.
Ich habe es zur Zeit mit den Uhrzeit drin da unser Sohn mittags seinen Schlaf braucht und wenn die dann fahren wären doof.

amenomade

Ah ok. Dann ja ist es besser mit "or" als als DOELSEIF Zweige
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus