Ich komme mit dem DOIF nicht weiter

Begonnen von Intruder1956, 09 Juli 2018, 16:04:26

Vorheriges Thema - Nächstes Thema

Intruder1956

Hallo, kann mir noch geholfen werden  ;)
Das folgende DOIF funktioniert soweit, bis auf, dass das Rollo WZ_Rollo_Tuer bei anwesend morgens nicht hoch geht, ansonsten alles ok.
define doRolladen DOIF ([{sunrise(2000,"07:30")}-{sunset(-3200)}|8] or [08:30-{sunset(-3200)}|7]) \
   ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),\
   IF ([WernerS4] eq "present") \
      (set  WZ_Rollo_Tuer up))\
DOELSE ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),\
   IF ([WernerS4] eq "absent") \
      (set  WZ_Rollo_Tuer down))
attr doRolladen eventMap cmd_1:Rolladen_Oben cmd_2:Rolladen_Unten cmd_3:Rolladen_Oben cmd_4:Rolladen_Unten
attr doRolladen room Rolladen


Beim ausführen von DoifTools kommt folgende Meldung
doRolladen der erste Befehl nach DOELSE scheint eine  Bedingung zu sein, weil eq enthalten ist, bitte prüfen.

Da weiß ich nicht und verstehe es auch nicht, was zu ändern ist.
Wenn ich versuche ein neues DOIF zu erstellen mit den gleichen Parametern nur anderen Namen

define doRolladenNEU DOIF ([{sunrise(2000,"07:30")}-{sunset(-3200)}|8] or [08:30-{sunset(-3200)}|7]) \
   ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),\
   IF ([WernerS4] eq "present") \
      (set  WZ_Rollo_Tuer up))\
DOELSE ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),\
   IF ([WernerS4] eq "absent") \
      (set  WZ_Rollo_Tuer down))


Dann kommt folgende Meldung

doRolladenNeu DOIF: expected DOELSEIF or DOELSE: \ ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),\ IF ([WernerS4] eq "present") \ (set WZ_Rollo_Tuer up))\ DOELSE ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),\ IF ([WernerS4] eq "absent") \ (set WZ_Rollo_Tuer down))

Habe leider nicht den Durchblick und weiß nicht was ich da noch machen kann.
Für Hilfe einer Lösung wäre ich sehr dankbar.

Vielen Dank
Werner

PS. der Grund warum ich ein zweites DOIF erstellen möchte ist der, dass ab und zu, die eine oder andere Rollade nicht geschlossen wird.
      Ich möchte das zweite DOIF einfach 2 Minuten später nochmal ausführen lassen.
      So wie ganz oben angegeben läuft das DOIF seit ca. 1,5 Jahre
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

sash.sc

Irgendwie stört mich das IF darin. Mach doch ein DOELSE oder DOELSEIF daraus.

Würde es mal versuchen

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Intruder1956

leider ohne Erfolg, habe das "IF" geändert in "DOELSEIF" und nur "DOELSE"
auch folgende Meldung
doRolladenNeu DOIF: expected DOELSEIF or DOELSE: \ ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),\ DOELSE ([WernerS4] eq "present") \ (set WZ_Rollo_Tuer up))\ DOELSE ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),\ DOELSE ([WernerS4] eq "absent") \ (set WZ_Rollo_Tuer down))

Gruß Werner
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

sash.sc

Setze den Code nach der Änderung mal hier rein.

Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Intruder1956

Hier mit DOELSE
define doRolladenNeu DOIF ([{sunrise(2000,"07:30")}-{sunset(-3200)}|8] or [08:30-{sunset(-3200)}|7]) \    ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),\    DOELSE ([WernerS4] eq "present") \       (set  WZ_Rollo_Tuer up))\ DOELSE ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),\    DOELSE ([WernerS4] eq "absent") \       (set  WZ_Rollo_Tuer down))

Hier mit DOELSEIF
define doRolladenNeu DOIF ([{sunrise(2000,"07:30")}-{sunset(-3200)}|8] or [08:30-{sunset(-3200)}|7]) \    ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),\    DOELSEIF ([WernerS4] eq "present") \       (set  WZ_Rollo_Tuer up))\ DOELSE ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),\    DOELSEIF ([WernerS4] eq "absent") \       (set  WZ_Rollo_Tuer down))

und hier ein List vom ursprünglichem DOIF
Internals:
   .eventMapCmd Rolladen_Oben:noArg Rolladen_Unten:noArg Rolladen_Oben:noArg Rolladen_Unten:noArg
   CFGFN      /opt/fhem/FHEM/Rolladen.cfg
   DEF        ([{sunrise(2000,"07:30")}-{sunset(-3200)}|8] or [08:30-{sunset(-3200)}|7])
   ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),
   IF ([WernerS4] eq "present")
      (set  WZ_Rollo_Tuer up))
DOELSE ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),
   IF ([WernerS4] eq "absent")
      (set  WZ_Rollo_Tuer down))
   MODEL      FHEM
   NAME       doRolladen
   NR         261
   NTFY_ORDER 50-doRolladen
   STATE      Rolladen_Oben
   TYPE       DOIF
   .attraggr:
   .attrminint:
   READINGS:
     2018-07-09 07:30:00   cmd             1
     2018-07-09 07:30:00   cmd_event       timer_1
     2018-07-09 07:30:00   cmd_nr          1
     2018-06-15 11:06:55   mode            enabled
     2018-07-09 07:30:00   state           cmd_1
     2018-07-08 21:32:47   timer_01_c01    09.07.2018 07:30:00|8
     2018-07-08 21:32:47   timer_02_c01    09.07.2018 21:31:58|8
     2018-07-08 21:32:47   timer_03_c01    09.07.2018 08:30:00|7
     2018-07-08 21:32:47   timer_04_c01    09.07.2018 21:31:58|7
   Regex:
   attrtimer:
     waitdel:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms,"8") or DOIF_time($hash,2,3,$wday,$hms,"7")
   days:
     0          8
     1          8
     2          7
     3          7
   devices:
   do:
     0:
       0          (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),    IF ([WernerS4] eq "present")        (set  WZ_Rollo_Tuer up)
     1:
       0          (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),    IF ([WernerS4] eq "absent")        (set  WZ_Rollo_Tuer down)
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      timer_1
     globalinit 1
     last_timer 4
     sleeptimer -1
     timerdev   
     timerevent timer_1
     timereventsState
     triggerDev
     timerevents:
       timer_1
     triggerEvents:
       timer_1
   internals:
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   intervaltimer:
   itimer:
   localtime:
     0          1531114200
     1          1531164718
     2          1531117800
     3          1531164718
   perlblock:
   readings:
   realtime:
     0          07:30:00
     1          21:31:58
     2          08:30:00
     3          21:31:58
   time:
     0          {sunrise(2000,"07:30")}
     1          {sunset(-3200)}
     2          08:30:00
     3          {sunset(-3200)}
   timeCond:
     0          0
     1          0
     2          0
     3          0
   timer:
     0          0
     1          0
     2          0
     3          0
   timers:
     0           0  1  2  3
   triggertime:
     1531164718:
       localtime  1531164718
       hash:
   uiState:
   uiTable:
Attributes:
   eventMap   cmd_1:Rolladen_Oben cmd_2:Rolladen_Unten cmd_3:Rolladen_Oben cmd_4:Rolladen_Unten
   room       Rolladen


Gruß Werner
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

sash.sc

#5
Du hast das 1. DOELSEIF mit in die klammer vom doif gesetzt. Das muss nicht sein. Schaue da nochmal ob der comandref nach. Da gibt es ja hunderte Beispiele......

Hier dein DOIF


define doRolladenNeu DOIF ([{sunrise(2000,"07:30")}-{sunset(-3200)}|8] or [08:30-{sunset(-3200)}|7]) \    ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),\    DOELSE ([WernerS4] eq "present") \       (set  WZ_Rollo_Tuer up))\ DOELSE ((set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),\    DOELSE ([WernerS4] eq "absent") \       (set  WZ_Rollo_Tuer down))


So würde ich es machen.


define doRolladenNeu DOIF ([{sunrise(2000,"07:30")}-{sunset(-3200)}|8] or [08:30-{sunset(-3200)}|7])  (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon up),\
DOELSEIF ([WernerS4] eq "present")   (set  WZ_Rollo_Tuer up)\
DOELSE (set Bad_Rollo,WZ_RollGross,Schlaf_Rollo,Kueche_Rollo_Strasse,Kueche_Rollo_Balkon down),\
DOELSEIF ([WernerS4] eq "absent")  (set  WZ_Rollo_Tuer down)


Wenn Du eine Bedingung setzt, dann mit DOIF oder DOELSEIF. Eine Ausführung mit DOELSE.

Hab es jetzt nur mal untereinander geschrieben, damit du den Unterschied siehst ! Nicht einfach 1 zu 1 kopieren. ;-)

Ein kleiner Tip. Ich habe bei mir die Rollos in eine Gruppe gepackt, über das Attribut group.
dann kannst du auch folgendes schreiben wenn du deine rollos in die group "Rollos" gepackt hast. So werden dann alle Rollos angesteuert die in der Gruppe "Rollos" sind. Dann brauchst du nicht jeden Befehl einzeln abzusetzen !



set group=Rollos on



Gruß Sascha

Gesendet von meinem E6653 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Per

Das eq passt schon so, da werden die DoifTools das nachfolgende IF nicht erkennen. Darfst du ignorieren. Bzw. dem Entwickler (Ellert) mitteilen.
Gehen denn die anderen Rollos morgens hoch, wenn "WZ_Rollo_Tuer" nicht will?

Ellert

Ich habe die Formulierung des Hinweises präzisiert, damit klar wird, das Vergleichsoperatoren in Befehlen o.k. sind, ab Morgen im Update.

Intruder1956

Danke euch allen für die Bemühung mir zu einem funktionsfähigen DOIF zu kommen,
werde es ausprobieren.

@Per, ja alle anderen gehen hoch, bzw. was mir jetzt im Moment einfällt.

Die Tür sollte auch mit den anderen Rollos hochgehen wenn ich nicht da bin, es bleibt aber unten.
Wenn ich zu Hause bin, soll es oben bleiben, wegen rauchen abends auf dem Balkon.
Wenn ich abwesend bin sollte es mit den anderen Rollos gleichziehen, also rauf und runter

Gruß Werner
Zotac CI547 32GB RAM 500GB SSD,ESXI 6.5, VM-Fhem5.8, VM-ioBroker, Cul 868Mhz;Cul 433Mhz = Busware, LGW, HM-MOD-RPI-PCB, Uniroll, IT YCR-100 TMT2100,ITR-1500, LD382 mit Wifilight, ESA 2000 + SENSOR WZ SET,FS20 TFK, HM-Sec-SC, HM-CC-RT-DN,PCA301,

Per

Erstell doch mal ein Dummy und setze diesen im DOIF mit den Status von "WernerS4". Vllt. hast du ja Abweichungen vom erwarteten Zustand. Und wenn du "set  WZ_Rollo_Tuer up" in der CommandLine ausführst, geht es?
Plan B: statt IF mal if versuchen.
Plan C: DOIF auf vier Fälle aufblasen:
DOIF (Zeit + WernerS4 = da) (set  WZ_Rollo_Tuer up,set $SELF cmd2)
DOELSEIF (Zeit) (set Rest up)
DOELSEIF (Werner = weg)  (set  WZ_Rollo_Tuer down,set $SELF cmd4)
DOELSE (set Rest down)