Komplexes DOIF funktioniert nach zusätzlichen Bedingung nicht mehr

Begonnen von Fixel2012, 17 März 2017, 23:26:05

Vorheriges Thema - Nächstes Thema

Fixel2012

Hallo,
ich habe mein DOIF für meinen Sonos etwas erweitert. Dadurch sind in dem DOIF nun zwei verschiedene Zeitspannen (Werktags und Wochenende) enthalten. Seit dem funktioniert mein Konstrukt aber leider nicht mehr.

Muss ich eine Reihenfolge der Bedienungen beachten?

Hier mal meine Definition im def bereich des DOIF's:

defmod Bad_Musik DOIF ([05:30-23:59|8] or [10:00-23:59|7] and [Sonos_Schlafzimmer:transportState] eq "PLAYING" and [BZ.Bewegungsmelder_Motion] eq "motion" and [MeinGtag] eq "present") (set Sonos_Schlafzimmer AddMember Sonos_Bad;;set Sonos_Bad Bass 10) DOELSEIF ([05:30-23:59|8] or [10:00-23:59|7] and [BZ.Bewegungsmelder_Motion] eq "motion" and [MeinGtag] eq "present") (set Sonos_Bad PlayURI http://mp3.ffh.de/radioffh/hqlivestream.mp3;;set Sonos_Bad Volume 20;;set Sonos_Bad Bass 0) DOELSEIF ([Sonos_Bad:transportState] eq "PLAYING" and [BZ.Bewegungsmelder_Motion] eq "noMotion") (set Sonos_Schlafzimmer RemoveMember Sonos_Bad;;sleep 4 quiet;;set Sonos_Bad stop)
attr Bad_Musik wait 0:0:120


Was ich mit dem DOIF erreichen will:

Das erste DOIF soll zwei Lautsprecher gruppieren, sobald im Schlafzimmer Musik an ist, mein GTag anwesend ist, eine Bewegung im Badezimmer wahrgenommen wird und wenn die gegebene Zeitspanne zutrifft.

Das zweite DOIF soll im Bad Radio abspielen, wenn mein GTag anwesend ist, eine Bewegung im Badezimmer wahrgenommen wird und wenn die gegebene Zeitspanne zutrifft.

Das dritte und letze DOIF soll sobald 120 sekunden keine Bewegung mehr erkannt wurde den Sonos im Bad wieder Stoppen.



Ich bin mir nicht sicher in wie fern es schlau ist alle diese DOIF's mit ELESEIF hintereinander zu hängen. Ist es schlauer mehrere eigene DOIF's zu bauen? Besonders für den Timer? :o


Wie gesagt funktionierte es Super, bevor ich die Uhrzeit und Meine Anwesenheit mit hinein genommen habe.

Selbst der Timer, der die Musik ausstellen soll springt nicht  mehr an, obwohl dort nichts der genannten Änderungen gemacht wurden. :o

Ich wäre dankbar, wenn mal jemand drüber schauen könnte!

Danke und Gruß Fixel

EDIT: Hier noch ein List vom DOIF:

Internals:
   CFGFN
   DEF        ([05:30-23:59|8] or [10:00-23:59|7] and [Sonos_Schlafzimmer:transportState] eq "PLAYING" and [BZ.Bewegungsmelder_Motion] eq "motion" and [MeinGtag] eq "present") (set Sonos_Schlafzimmer AddMember Sonos_Bad;set Sonos_Bad Bass 10) DOELSEIF ([05:30-23:59|8] or [10:00-23:59|7] and [BZ.Bewegungsmelder_Motion] eq "motion" and [MeinGtag] eq "present") (set Sonos_Bad PlayURI http://mp3.ffh.de/radioffh/hqlivestream.mp3;set Sonos_Bad Volume 20;set Sonos_Bad Bass 0) DOELSEIF ([Sonos_Bad:transportState] eq "PLAYING" and [BZ.Bewegungsmelder_Motion] eq "noMotion") (set Sonos_Schlafzimmer RemoveMember Sonos_Bad;sleep 4 quiet;set Sonos_Bad stop)
   NAME       Bad_Musik
   NR         190
   NTFY_ORDER 50-Bad_Musik
   STATE      initialized
   TYPE       DOIF
   Readings:
     2017-03-17 23:32:21   Device          MeinGtag
     2017-03-17 22:36:53   cmd             0
     2017-03-17 22:18:42   cmd_event       MeinGtag
     2017-03-17 22:18:42   cmd_nr          1
     2017-03-17 23:11:20   e_BZ.Bewegungsmelder_Motion_STATE noMotion
     2017-03-17 23:32:21   e_MeinGtag_STATE present
     2017-03-17 23:29:02   e_Sonos_Bad_transportState PLAYING
     2017-03-17 22:48:54   e_Sonos_Schlafzimmer_transportState STOPPED
     2017-03-17 20:03:42   mode            enable
     2017-03-17 22:36:53   state           initialized
     2017-03-17 22:36:53   timer_01_c01    18.03.2017 05:30:00|8
     2017-03-17 22:36:53   timer_02_c01    17.03.2017 23:59:00|8
     2017-03-17 22:36:53   timer_03_c01    18.03.2017 10:00:00|7
     2017-03-17 22:36:53   timer_04_c01    17.03.2017 23:59:00|7
     2017-03-17 22:36:53   timer_05_c02    18.03.2017 05:30:00|8
     2017-03-17 22:36:53   timer_06_c02    17.03.2017 23:59:00|8
     2017-03-17 22:36:53   timer_07_c02    18.03.2017 10:00:00|7
     2017-03-17 22:36:53   timer_08_c02    17.03.2017 23:59:00|7
     2017-03-17 23:29:21   wait_timer      no timer
   Condition:
     0          DOIF_time($hash,0,1,$wday,$hms,"8") or DOIF_time($hash,2,3,$wday,$hms,"7") and ReadingValDoIf($hash,'Sonos_Schlafzimmer','transportState') eq "PLAYING" and InternalDoIf($hash,'BZ.Bewegungsmelder_Motion','STATE') eq "motion" and InternalDoIf($hash,'MeinGtag','STATE') eq "present"
     1          DOIF_time($hash,4,5,$wday,$hms,"8") or DOIF_time($hash,6,7,$wday,$hms,"7") and InternalDoIf($hash,'BZ.Bewegungsmelder_Motion','STATE') eq "motion" and InternalDoIf($hash,'MeinGtag','STATE') eq "present"
     2          ReadingValDoIf($hash,'Sonos_Bad','transportState') eq "PLAYING" and InternalDoIf($hash,'BZ.Bewegungsmelder_Motion','STATE') eq "noMotion"
   Days:
     0          8
     1          8
     2          7
     3          7
     4          8
     5          8
     6          7
     7          7
   Devices:
     0           Sonos_Schlafzimmer BZ.Bewegungsmelder_Motion MeinGtag
     1           BZ.Bewegungsmelder_Motion MeinGtag
     2           Sonos_Bad BZ.Bewegungsmelder_Motion
     all         Sonos_Schlafzimmer BZ.Bewegungsmelder_Motion MeinGtag Sonos_Bad
   Do:
     0:
       0          set Sonos_Schlafzimmer AddMember Sonos_Bad;set Sonos_Bad Bass 10
     1:
       0          set Sonos_Bad PlayURI http://mp3.ffh.de/radioffh/hqlivestream.mp3;set Sonos_Bad Volume 20;set Sonos_Bad Bass 0
     2:
       0          set Sonos_Schlafzimmer RemoveMember Sonos_Bad;sleep 4 quiet;set Sonos_Bad stop
     3:
   Helper:
     event      present,presence: present,device_name: Gigaset G-tag
     globalinit 1
     last_timer 8
     sleepdevice Sonos_Bad
     sleepsubtimer 0
     sleeptimer -1
     timerdev   MeinGtag
     timerevent present,presence: present,device_name: Gigaset G-tag
     triggerDev MeinGtag
     timerevents:
       present
       presence: present
       device_name: Gigaset G-tag
     timereventsState:
       state: present
       presence: present
       device_name: Gigaset G-tag
     triggerEvents:
       present
       presence: present
       device_name: Gigaset G-tag
     triggerEventsState:
       state: present
       presence: present
       device_name: Gigaset G-tag
   Internals:
     0           BZ.Bewegungsmelder_Motion:STATE MeinGtag:STATE
     1           BZ.Bewegungsmelder_Motion:STATE MeinGtag:STATE
     2           BZ.Bewegungsmelder_Motion:STATE
     all         BZ.Bewegungsmelder_Motion:STATE MeinGtag:STATE
   Interval:
     0          -1
     1          0
     2          -1
     3          2
     4          -1
     5          4
     6          -1
     7          6
   Itimer:
   Localtime:
     0          1489811400
     1          1489791540
     2          1489827600
     3          1489791540
     4          1489811400
     5          1489791540
     6          1489827600
     7          1489791540
   Readings:
     0           Sonos_Schlafzimmer:transportState
     2           Sonos_Bad:transportState
     all         Sonos_Schlafzimmer:transportState Sonos_Bad:transportState
   Realtime:
     0          05:30:00
     1          23:59:00
     2          10:00:00
     3          23:59:00
     4          05:30:00
     5          23:59:00
     6          10:00:00
     7          23:59:00
   Regexp:
     0:
     1:
     2:
     All:
   State:
   Time:
     0          05:30:00
     1          23:59:00
     2          10:00:00
     3          23:59:00
     4          05:30:00
     5          23:59:00
     6          10:00:00
     7          23:59:00
   Timecond:
     0          0
     1          0
     2          0
     3          0
     4          1
     5          1
     6          1
     7          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
   Timers:
     0           0  1  2  3
     1           4  5  6  7
   Trigger:
   Triggertime:
     1489791540:
       localtime  1489791540
       Hash:
     1489811400:
       localtime  1489811400
       Hash:
     1489827600:
       localtime  1489827600
       Hash:
Attributes:
   wait       0:0:120
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Otto123

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

Fixel2012

#2
Zitat von: Otto123 am 17 März 2017, 23:33:38
Hi Fixel,

hilft Dir das als Denkanstoß?  ;)
https://wiki.selfhtml.org/wiki/Perl/Operatoren#Operatorenrangfolge

Gruß Otto

Danke, ich weiß nciht ob es mein Problem lösen wird, aber ich werde es morgen mal versuchen!

Zumindest muss ich laut der Seite meine Oder's hinter die Und's setzen  :o ::)

12. Rangstufe: && (logisches UND)
13. Rangstufe: || (logisches ODER)



EDIT: Konnte es doch nicht sein lassen, es noch schnell zu editieren!  ;D

Es geht nun! Sehr Interessant, dass eine andere Reihenfolge so viel verändert!

Danke dir Otto!
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Otto123

Hi,

einfach eine Klammer hätte genügt. Ohne Klammer werden erst die ganzen and aufgelöst und zum Schluß or [05:30-23:59|8] gemacht.

[05:30-23:59|8] or [10:00-23:59|7] and [Sonos_Schlafzimmer:transportState] ...

Da 1 or "irgendetwas" immer eins ist, spielen die ganzen "and" überhaupt keine Rolle

Mit Klammer
([05:30-23:59|8] or [10:00-23:59|7]) and [Sonos_Schlafzimmer:transportState] ...
Ist es so wie Du willst also: in der Woche ab 5:30 am Wochenende ab 10:00 und die "and" werden berücksichtigt.

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

Fixel2012

Zitat von: Otto123 am 17 März 2017, 23:53:43
Hi,

einfach eine Klammer hätte genügt. Ohne Klammer werden erst die ganzen and aufgelöst und zum Schluß or [05:30-23:59|8] gemacht.

[05:30-23:59|8] or [10:00-23:59|7] and [Sonos_Schlafzimmer:transportState] ...

Da 1 or "irgendetwas" immer eins ist, spielen die ganzen "and" überhaupt keine Rolle

Mit Klammer
([05:30-23:59|8] or [10:00-23:59|7]) and [Sonos_Schlafzimmer:transportState] ...
Ist es so wie Du willst also: in der Woche ab 5:30 am Wochenende ab 10:00 und die "and" werden berücksichtigt.

Gruß Otto

Danke dir!
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Fixel2012

Muss mich leider nochmal melden, es funktioniert nicht wie gewollt.

Das DOIF sieht nach Ottos Tipp nun so aus:

Zitatdefine Bad_Musik DOIF (([05:30-23:59|8] or [10:00-23:59|7]) and [Sonos_Schlafzimmer:transportState] eq "PLAYING" and [BZ.Bewegungsmelder_Motion] eq "motion" and [MeinGtag] eq "present") (set Sonos_Schlafzimmer AddMember Sonos_Bad;;set Sonos_Bad Bass 10) DOELSEIF (([05:30-23:59|8] or [10:00-23:59|7]) and [BZ.Bewegungsmelder_Motion] eq "motion" and [MeinGtag] eq "present") (set Sonos_Bad PlayURI http://mp3.ffh.de/radioffh/hqlivestream.mp3;;set Sonos_Bad Volume 20;;set Sonos_Bad Bass 0) DOELSEIF ([Sonos_Bad:transportState] eq "PLAYING" and [BZ.Bewegungsmelder_Motion] eq "noMotion") (set Sonos_Schlafzimmer RemoveMember Sonos_Bad;;sleep 4 quiet;;set Sonos_Bad stop)

Die Gesetzen Klammern sind rot markiert.

Mein Problem ist allerdings, dass alles was hinter dem "or" steht nicht berücksichtigt wird, sprich die Musik geht im Moment nur unter der Woche an. Wenn ich das umstelle, geht sie nur am Wochenende an.

Hat jemand eine Ahnung an was das liegen könnte?

Vielen Dank und Gruß Fixel
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

Otto123

Hi Fixel,

also ich habe ein ähnliches Konstrukt genauso laufen, um die FB Heizung zu steuern. Das tut es genau wie gewünscht:
defmod di_Hzg DOIF (([05:45-09:00|8] or [07:00-22:00|7] or [16:00-22:00|8]) and [AlleAnwesend] eq "present" and [SensorR2_Weather:temperature] < 24 and [SensorAussen:temperature] < 15) ((set HzgBad,HzgFlur,HzgKu on)) DOELSE ((set HzgBad,HzgFlur,HzgKu off))
Ich befürchte bei Dir ist die ganze Konstruktion mit den DOELSEIF nicht ganz klar. Ich weiß nicht  genau wie DOIF das behandelt.
Aber wenn der erste Zweig war ist, also es ist Montag 5:30 dann macht er set Sonos_Schlafzimmer AddMember Sonos_Bad;;set Sonos_Bad Bass 10 und in die anderen Zweige kommt er doch gar nicht? Der erste ist doch war gewesen und fertig. Oder???

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

igami

Zeilenumbrüche und Einrückungen können auch helfen Fehler zu erkennen ;)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED