FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: bommel-bs am 17 März 2018, 11:48:46

Titel: [gelöst] DOIF Verständnisfrage
Beitrag von: bommel-bs am 17 März 2018, 11:48:46
Hallo,

ich möchte meinen Rollladen per DOIF Steuern.

Normalerweise soll der Rolladen zwischen 16 und 22 Uhr bei Sonnenuntergang + Offset zu gehen und morgen bei Sonnenaufgang zwischen 6:30 und 9 Uhr aufgehen. Am Samstag und Sonntag soll der Rolladen  Morgens später aufgehen. Hier meine Definitionen.

##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf
   ([{sunset(int(rand(600)), "16:00", "22:00")}]-[{sunrise(int(rand(600)), "06:30", "9:00")} | AT ])  (set AnkleideZimmer_Rolladen off)
DOELSEIF
   ([{sunset(int(rand(600)), "16:00", "22:00")}]-[{sunrise(int(rand(600)), "07:30", "9:00")} | 6 ])   (set AnkleideZimmer_Rolladen off)
DOELSEIF
   ([{sunset(int(rand(600)), "16:00", "22:00")}]-[{sunrise(int(rand(600)), "08:30", "9:00")} | 0 ])   (set AnkleideZimmer_Rolladen off)
DOELSE
   (set AnkleideZimmer_Rolladen on)


Leider passierte heute Morgen nichts. Wo ist mein Fehler?

Danke
Stefan
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Frank_Huber am 17 März 2018, 11:53:33
Zitat von: bommel-bs am 17 März 2018, 11:48:46
Wo ist mein Fehler?

Hi Stefan,

also hier ist erstmal der Fehler dass du nicht die komplette Definition inkl Attribute gepostet hast.
ein List vom DOIF wäre besser. :-)

generell vermute ich dass die Variante mit |AT, |6 und |0 nur bei direkten Zeiten geht und nicht bei einem Zeitbereich. Da bin ich mir aber nicht 100%ig sicher.
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 17 März 2018, 12:06:54
Hallo,

hier alle Zeilen aus der fhem.cfg:

define di_AnkleideZimmer_Rolladen DOIF ##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf\
   ([{sunset(int(rand(600)), "16:00", "22:00")}]-[{sunrise(int(rand(600)), "06:30", "9:00")} | AT ])  (set AnkleideZimmer_Rolladen off)\
DOELSEIF\
   ([{sunset(int(rand(600)), "16:00", "22:00")}]-[{sunrise(int(rand(600)), "07:30", "9:00")} | 6 ])   (set AnkleideZimmer_Rolladen off)\
DOELSEIF\
   ([{sunset(int(rand(600)), "16:00", "22:00")}]-[{sunrise(int(rand(600)), "08:30", "9:00")} | 0 ])   (set AnkleideZimmer_Rolladen off)\
DOELSE \
   (set AnkleideZimmer_Rolladen on)
attr di_AnkleideZimmer_Rolladen room 99_System

Titel: Antw:DOIF Verständnisfrage
Beitrag von: Otto123 am 17 März 2018, 14:00:24
frank meinte das Ergebnis von list  di_AnkleideZimmer_Rolladen


Gruß Otto
Titel: Antw:DOIF Verständnisfrage
Beitrag von: KernSani am 17 März 2018, 14:01:12
Ich würde an der Stelle ohnehin nicht mit Zeiträumen, sondern mit Zeitpunkten arbeiten.


Kurz, weil mobil...
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Otto123 am 17 März 2018, 14:05:27
Das stimmt was KernSani sagt, hab ich bei mir auch so gemacht (und ich glaube das hatte einen Grund  :D ):
DOIF ([Es ist früh])(Rollo hoch) DOELSEIF ([Es ist Abend])(Rollo runter)
Oder konkret aus der Raw Def
defmod di_RolloJedenTag DOIF ([06:20|8] or [08:00|7]) (set Rollo.*:FILTER=NAME!=RolloKUR:FILTER=STATE!=auf auf) DOELSEIF ([{sunrise("REAL",0,"6:30","09:15")}]) (set Rollo.*:FILTER=STATE!=auf auf) DOELSEIF ([18:00:00] and [AlleAnwesend] eq "absent") (set Rollo.* zu) DOELSEIF ([23:00]) (set Rollo.*:FILTER=STATE=auf zu) DOELSEIF ([{sunrise(0,"05:30","06:20")}] and [AlleAnwesend] eq "present") (set RolloB.* auf)

Gruß Otto
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 18 März 2018, 22:28:46
Zitat von: Otto123 am 17 März 2018, 14:00:24
frank meinte das Ergebnis von list  di_AnkleideZimmer_Rolladen


Gruß Otto

Den Befehl list kannte ich noch gar nicht.

Wie vorgeschlagen habe ich jetzt mit Zeitpunkten gearbeitet.

Eine Frage habe ich noch mit sunset und rand

Der Rolladen soll nicht vor 6:30 Uhr + bis 600 Sekunden aufgehen.

Hier mein Versuch.

([{sunrise(int(rand(600)), "[06:30]+int(rand(600))", "9:00")} | AT ])  (set AnkleideZimmer_Rolladen on)


Doch statt zwieschen 6:30 und 6:40 Uhr kam jetzt 6:05:50 Uhr als Schaltzeit heraus.

Wie muß ich hier rechnen?
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Otto123 am 18 März 2018, 23:00:57
Hi,

Das Konstrukt geht dort so nicht, ersten sind die [] Klammern an der Stelle meines Wissens nicht einsetzbar und Du würdest eine Zeit mit einer Zahl addieren. Ich bin nicht sicher was dabei passiert.
Du müsstest die Zeit in eine Zahl wandeln und dann addieren und dann zurück in eine Zeit wandeln.

Das geht beim DOIF einfacher mit attr <> wait int(rand(600)) und der Bedingung ([{sunrise("REAL",0,"06:30", "9:00")} | AT ])

Gruß Otto
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 19 März 2018, 06:59:56
Hallo Otto,

danke für deine Antwort. Ich werde mal mit wait testen.
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 03 April 2018, 12:17:55
Hier meine aktuelle Lösung:


##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf
   ([({sunrise(0,"07:30", "9:00")} + int(rand(600))) ] and StefanUrlaub:state eq "1"  ) (set AnkleideZimmer_Rolladen on)
DOELSEIF 
   ([({sunrise(0,"06:30", "9:00")} + int(rand(600))) | AT]) (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunrise(0,"07:30", "9:00")} + int(rand(600))) | 6])  (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunrise(0,"08:30", "9:00")} + int(rand(600))) | 7])  (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunset(-600, "16:00", "22:00")} + int(rand(600))) ])    (set AnkleideZimmer_Rolladen off)



Was leider nicht funktioniert ist der erste Teil.
Der Dummy StefanUrlaub steht auf 1 aber der Rolladen ging um 6:30 rauf.



nternals:
   DEF        ##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf
   ([({sunrise(0,"07:30", "9:00")} + int(rand(600))) ] and StefanUrlaub:state eq "1"  ) (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunrise(0,"06:30", "9:00")} + int(rand(600))) | AT]) (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunrise(0,"07:30", "9:00")} + int(rand(600))) | 6])  (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunrise(0,"08:30", "9:00")} + int(rand(600))) | 7])  (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunset(-600, "16:00", "22:00")} + int(rand(600))) ])    (set AnkleideZimmer_Rolladen off)

   NAME       di_AnkleideZimmer_Rolladen
   NR         555
   NTFY_ORDER 50-di_AnkleideZimmer_Rolladen
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2018-04-03 06:30:31   cmd             2
     2018-04-03 06:30:31   cmd_event       timer_2
     2018-04-03 06:30:31   cmd_nr          2
     2018-04-03 07:36:40   error           condition c01: syntax error, line 1, near "StefanUrlaub:"

     2018-04-03 06:30:31   state           cmd_2
     2018-04-03 07:36:40   timer_01_c01    04.04.2018 07:36:27
     2018-04-03 06:30:31   timer_02_c02    04.04.2018 06:35:37|AT
     2018-04-03 07:34:48   timer_03_c03    04.04.2018 07:33:17|6
     2018-04-03 08:37:59   timer_04_c04    04.04.2018 08:30:51|7
     2018-04-02 20:31:02   timer_05_c05    03.04.2018 20:31:17
   condition:
     0          DOIF_time_once($hash,0,$wday) and StefanUrlaub:state eq "1"
     1          DOIF_time_once($hash,1,$wday,"AT")
     2          DOIF_time_once($hash,2,$wday,"6")
     3          DOIF_time_once($hash,3,$wday,"7")
     4          DOIF_time_once($hash,4,$wday)
   days:
     1          AT
     2          6
     3          7
   devices:
   do:
     0:
       0          set AnkleideZimmer_Rolladen on
     1:
       0          set AnkleideZimmer_Rolladen on
     2:
       0          set AnkleideZimmer_Rolladen on
     3:
       0          set AnkleideZimmer_Rolladen on
     4:
       0          set AnkleideZimmer_Rolladen off
     5:
   helper:
     event      timer_1
     globalinit 1
     last_timer 5
     sleeptimer -1
     timerdev
     timerevent timer_2
     timereventsState
     triggerDev
     timerevents:
       timer_2
     triggerEvents:
       timer_1
   internals:
   interval:
   itimer:
   localtime:
     0          1522820187
     1          1522816537
     2          1522819997
     3          1522823451
     4          1522780277
   readings:
   realtime:
     0          07:36:27
     1          06:35:37
     2          07:33:17
     3          08:30:51
     4          20:31:17
   regexp:
     all:
   state:
     STATE:
   time:
     0          ({sunrise(0,"07:30","9:00")}+int(rand(600)))
     1          ({sunrise(0,"06:30","9:00")}+int(rand(600)))
     2          ({sunrise(0,"07:30","9:00")}+int(rand(600)))
     3          ({sunrise(0,"08:30","9:00")}+int(rand(600)))
     4          ({sunset(-600,"16:00","22:00")}+int(rand(600)))
   timeCond:
     0          0
     1          1
     2          2
     3          3
     4          4
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   timers:
     0           0
     1           1
     2           2
     3           3
     4           4
   triggertime:
     1522780277:
       localtime  1522780277
       hash:
     1522816537:
       localtime  1522816537
       hash:
     1522819997:
       localtime  1522819997
       hash:
     1522820187:
       localtime  1522820187
       hash:
     1522823451:
       localtime  1522823451
       hash:
Attributes:
   room       99_System


Hat einer eine Idee, wie ich die Varuale richtig einbaue?

Danke
Stefan
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Frank_Huber am 03 April 2018, 12:20:32
mach mal [StefanUrlaub:state]
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 03 April 2018, 12:27:59
Zitat von: Frank_Huber am 03 April 2018, 12:20:32
mach mal [StefanUrlaub:state]


Unknown command [StefanUrlaub:state], try help.
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Frank_Huber am 03 April 2018, 12:29:53
*facepalm* :-)

ALT:
##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf
   ([({sunrise(0,"07:30", "9:00")} + int(rand(600))) ] and StefanUrlaub:state eq "1"  ) (set AnkleideZimmer_Rolladen on)


NEU:
##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf
   ([({sunrise(0,"07:30", "9:00")} + int(rand(600))) ] and [StefanUrlaub:state] eq "1"  ) (set AnkleideZimmer_Rolladen on)
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 03 April 2018, 12:41:02
Hallo Frank,

danke. Mal sehen wann der Rolladen morgen aufgeht.

Stefan
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Frank_Huber am 03 April 2018, 12:46:36
Ob es greift siehst im DOIF.
in den Readings sollte jetzt ein e_StefanUrlaub_state reading zu finden sein.
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 03 April 2018, 13:50:30
Ein e_StefanUrlaub_state gibt es in den Readings leider nicht.

Hier gibt s nur
state und 5 timer
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Otto123 am 03 April 2018, 13:58:42
Ich denke dazu muss StefanUrlaub oder ein anderer Beteiligter mal irgendwie einen Event erzeugen.
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Frank_Huber am 03 April 2018, 14:05:24
Otto, das kann sein.

Die readings werden aber auch nach dem editieren vom DEF nicht gleich sichtbar aktualisiert.
Einmal Browser refresh mach ich da immer um den aktuellen Stand zu haben.

spätestens morgen früh weis bommel-bs ja ob es geht. :-)
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 03 April 2018, 14:26:11
Unter Probably associated with finde ich jetzt StefanUrlaub 1
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 04 April 2018, 08:41:42
Leider ging der Rolladen wieder um 6:30 Uhr auf :-(
Ich hatte gestern die Reihenfolge noch einmal geändert. Hier die aktuellen internals:


Internals:
   DEF        ##Rolladen sind zwischen Sonnenuntergang und Sonnenaufgang geschlossen, sonst auf
   ([({sunrise(0,"08:30", "9:00")} + int(rand(600))) | 7])  (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunrise(0,"07:30", "9:00")} + int(rand(600))) ] and [StefanUrlaub:STATE] eq "1"  ) (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunrise(0,"07:30", "9:00")} + int(rand(600))) | 6]) (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunrise(0,"06:30", "9:00")} + int(rand(600))) | AT])  (set AnkleideZimmer_Rolladen on)
DOELSEIF
   ([({sunset(-600, "16:00", "22:00")} + int(rand(600))) ])    (set AnkleideZimmer_Rolladen off)

   NAME       di_AnkleideZimmer_Rolladen
   NR         555
   NTFY_ORDER 50-di_AnkleideZimmer_Rolladen
   STATE      cmd_4
   TYPE       DOIF
   READINGS:
     2018-04-03 22:44:27   Device          StefanUrlaub
     2018-04-04 06:37:01   cmd             4
     2018-04-04 06:37:01   cmd_event       timer_4
     2018-04-04 06:37:01   cmd_nr          4
     2018-04-04 06:37:01   state           cmd_4
     2018-04-04 08:35:06   timer_01_c01    05.04.2018 08:39:43|7
     2018-04-04 07:32:31   timer_02_c02    05.04.2018 07:31:07
     2018-04-04 07:33:46   timer_03_c03    05.04.2018 07:36:15|6
     2018-04-04 06:37:01   timer_04_c04    05.04.2018 06:35:43|AT
     2018-04-03 21:54:56   timer_05_c05    04.04.2018 20:28:14
   condition:
     0          DOIF_time_once($hash,0,$wday,"7")
     1          DOIF_time_once($hash,1,$wday) and ReadingValDoIf($hash,'StefanUrlaub','STATE') eq "1"
     2          DOIF_time_once($hash,2,$wday,"6")
     3          DOIF_time_once($hash,3,$wday,"AT")
     4          DOIF_time_once($hash,4,$wday)
   days:
     0          7
     2          6
     3          AT
   devices:
     1           StefanUrlaub
     all         StefanUrlaub
   do:
     0:
       0          set AnkleideZimmer_Rolladen on
     1:
       0          set AnkleideZimmer_Rolladen on
     2:
       0          set AnkleideZimmer_Rolladen on
     3:
       0          set AnkleideZimmer_Rolladen on
     4:
       0          set AnkleideZimmer_Rolladen off
     5:
   helper:
     event      timer_2
     globalinit 1
     last_timer 5
     sleeptimer -1
     timerdev
     timerevent timer_4
     triggerDev
     timerevents:
       timer_4
     timereventsState:
       state: 1
     triggerEvents:
       timer_2
     triggerEventsState:
       state: 1
   internals:
   interval:
   itimer:
   localtime:
     0          1522910383
     1          1522906267
     2          1522906575
     3          1522902943
     4          1522866494
   readings:
     1           StefanUrlaub:STATE
     all         StefanUrlaub:STATE
   realtime:
     0          08:39:43
     1          07:31:07
     2          07:36:15
     3          06:35:43
     4          20:28:14
   regexp:
     0:
     1:
     2:
     3:
     4:
     all:
   state:
     STATE:
   time:
     0          ({sunrise(0,"08:30","9:00")}+int(rand(600)))
     1          ({sunrise(0,"07:30","9:00")}+int(rand(600)))
     2          ({sunrise(0,"07:30","9:00")}+int(rand(600)))
     3          ({sunrise(0,"06:30","9:00")}+int(rand(600)))
     4          ({sunset(-600,"16:00","22:00")}+int(rand(600)))
   timeCond:
     0          0
     1          1
     2          2
     3          3
     4          4
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   timers:
     0           0
     1           1
     2           2
     3           3
     4           4
   trigger:
   triggertime:
     1522866494:
       localtime  1522866494
       hash:
     1522902943:
       localtime  1522902943
       hash:
     1522906267:
       localtime  1522906267
       hash:
     1522906575:
       localtime  1522906575
       hash:
     1522910383:
       localtime  1522910383
       hash:
Attributes:
   room       99_System
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Frank_Huber am 04 April 2018, 08:46:04
cmd4 wurde korrekt ausgeführt:
DOELSEIF
   ([({sunrise(0,"06:30", "9:00")} + int(rand(600))) | AT])  (set AnkleideZimmer_Rolladen on)
DOELSEIF


2018-04-04 06:37:01   cmd             4
2018-04-04 06:37:01   cmd_event       timer_4
2018-04-04 06:37:01   cmd_nr          4
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 04 April 2018, 09:09:52
Es sollte heute aber Timer 2 ausgeführt werden. 
StefanUrlaub ist 1
Titel: Antw:DOIF Verständnisfrage
Beitrag von: pc1246 am 04 April 2018, 09:13:01
Haha
Das habe ich genau gewusst! Aber woher soll das DOIF das wissen. Du musst dann bei den anderen schon sagen, dass diese nur gueltig sind, wenn kein Urlaub!
Gruss Christoph
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 04 April 2018, 09:24:32
Dann liegt hier wohl ein Mißverständnis vor. Ich war davon ausgegangen, das das erste zutreffende ausgeführt wird und dann Schluß ist. In diesen Fall wurde das letzte passende ausgeführt.
Titel: Antw:DOIF Verständnisfrage
Beitrag von: pc1246 am 04 April 2018, 09:29:58
Moin
Nein! Um 6:30 Uhr war die Sonne aufgegangen, und damit hat das gegriffen! Um 7:30 ist es noch einmal passiert, da Du ja Urlaub hast und die Sonne aufgegangen ist!
Gruss Christoph
Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 04 April 2018, 10:06:35
Hallo Christoph,

Du hast recht.
Nur wurde die zweite Aktion um 7:30 Ubr nicht ausgeführt. Hier muss wohl noch ein Fehler sein.

Gruß
Stefan
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Otto123 am 04 April 2018, 10:18:21
Zitat von: Frank_Huber am 03 April 2018, 12:20:32
mach mal [StefanUrlaub:state]
Moin,

ich weiß nicht genau, aber meiner Meinung nach ist dies jetzt [StefanUrlaub:STATE] eq "1" etwas anderes. Aber eventuell ist DOIF Fehlertolerant oder hat wie so oft seine eigene Logik.

Merke
STATE ist ein Internal und muss in DOIF eigentlich so geschrieben werden &STATE
state ist ein Reading

Falls für STATE nichts extra definiert oder im Modul vorgesehen ist, wird der state Wert nach STATE übernommen und beide Werte sind gleich.

Gruß Otto
Titel: Antw:DOIF Verständnisfrage
Beitrag von: Damian am 04 April 2018, 10:39:16
([({sunrise(0,"06:30", "9:00")} + int(rand(600))) | AT])  (set AnkleideZimmer_Rolladen on)

solche Definitionen sind kritisch zu sehen, denn durch die zufällige Verschiebung, kann es passieren, dass Mehrfach hintereinander geschaltet wird:

z. B.

1. rand(600)-> 0
2. rand(600)-> 100 -> Zeitschaltpunkt später als Tag zuvor -> Wiederholung der Ausführung am gleichen Tag
3. rand (600) -> 300 -> s. o.

Es wird also ggf. am gleichen Tage der Befehl solange wiederholt, bis die nächst zu berechnende Zeit in der Vergangenheit liegt -> nächster Tag

Es funktioniert nur sinnvoll ohne do always in Wechselwirkung mit anderen Zweigen, die sich abwechseln.

Eleganter löst man es mit wait in kombination mit waitWithTimer

attr wait rand(600)
attr waitWithTimer 1


Titel: Antw:DOIF Verständnisfrage
Beitrag von: bommel-bs am 05 April 2018, 21:55:12
Hallo,

nach studieren der Commandref und ausprobieren habe ich die Lösung gefunden:

([({sunrise(0,"07:30", "9:00")} + int(rand(600))) | AT] and [StefanUrlaub::$STATE] eq "1"  ) (set AnkleideZimmer_Rolladen on)


Danke für eure Hilfe.
Stefan
Titel: Antw:DOIF Verständnisfrage
Beitrag von: KernSani am 05 April 2018, 22:07:20
Hi Stefan,

Schön, dass es klappt und danke, dass du die Lösung gepostet hast. Schreibst du dann bitte noch [Gelöst] vor das Subject des ersten Posts? Danke :)
Titel: Antw:[gelöst] DOIF Verständnisfrage
Beitrag von: Otto123 am 06 April 2018, 09:01:46
Moin Stefan,

schön das es eine Lösung gibt, aber kannst Du mir den erklären? Was bewirkt jetzt :$ ? Hab ich noch nie gesehen.
[StefanUrlaub::$STATE]

Gruß Otto
Titel: Antw:[gelöst] DOIF Verständnisfrage
Beitrag von: Frank_Huber am 06 April 2018, 09:06:53
Zitat von: Otto123 am 06 April 2018, 09:01:46
schön das es eine Lösung gibt, aber kannst Du mir den erklären? Was bewirkt jetzt :$ ? Hab ich noch nie gesehen.
[StefanUrlaub::$STATE]

schließe mich Otto's Frage an.

Nach meinem Kenntnisstand müsste [StefanUrlaub] das selbe bewirken.
Titel: Antw:[gelöst] DOIF Verständnisfrage
Beitrag von: Otto123 am 06 April 2018, 09:19:46
Zitat von: Frank_Huber am 06 April 2018, 09:06:53
Nach meinem Kenntnisstand müsste [StefanUrlaub] das selbe bewirken.
Meiner Meinung nach: sogar das Richtige  :D
Ich bezweifle irgendwie, dass das jetzige Konstrukt ohne Fehler läuft.

Gruß Otto
Titel: Antw:[gelöst] DOIF Verständnisfrage
Beitrag von: Damian am 06 April 2018, 10:06:35
neue DOIF-Version siehe hier: https://forum.fhem.de/index.php/topic,86579.msg791116.html#msg791116
Titel: Antw:[gelöst] DOIF Verständnisfrage
Beitrag von: bommel-bs am 06 April 2018, 20:52:14
Was ::$ genau bewirkt weiß ich auch nicht.In der commandref habe ich mal nach STATE gesucht und folgendes gefunden

Liste der Devices in der Gruppe "windows", die mit "rooms" enden, deren Status (nicht state-Reading) "on" ist:

[@"rooms$"::$STATE eq "on" and $group eq "windows"]

Darauf habe ich StefanUrlaub::$STATE ausprobiert und es lief.

Gruß
Stefan
Titel: Antw:[gelöst] DOIF Verständnisfrage
Beitrag von: Damian am 06 April 2018, 22:43:30
Zitat von: bommel-bs am 06 April 2018, 20:52:14
Was ::$ genau bewirkt weiß ich auch nicht.In der commandref habe ich mal nach STATE gesucht und folgendes gefunden

Liste der Devices in der Gruppe "windows", die mit "rooms" enden, deren Status (nicht state-Reading) "on" ist:

[@"rooms$"::$STATE eq "on" and $group eq "windows"]

Darauf habe ich StefanUrlaub::$STATE ausprobiert und es lief.

Gruß
Stefan

Das ist der Teil der Commandref zu DOIF-Aggregationsfunktionen, die Intern aus mehreren Schleifendurchläufen bestehen um Werte zu aggregiert - das willst du aber nicht.

Wenn du einfach nur den Status abfragen willst, dann brauchst du nur angeben:

[StefanUrlaub] eq "1"

Das ist das Gleiche wie

[StefanUrlaub:&STATE] eq "1"

und das ist meistens das Gleiche, wie das Reading state:

[StefanUrlaub:state] eq "1"

Such dir eins aus, aber nicht

[StefanUrlaub::$STATE] eq "1"

denn, wenn es irgendwie funktioniert, dann nur zufällig ;)