DOIF: Frage zu einer Beschattungssteuerung

Begonnen von moonsorrox, 28 Juli 2015, 13:39:07

Vorheriges Thema - Nächstes Thema

moonsorrox

ich habe seit einiger Zeit meine Rollladensteuerung auf Beschattung stehen, die eigentlich fast genau so arbeitet wie die normale Steuerung.
Da ich echt lange nichts an meinen DOIFs verstellt oder eingestellt habe finde ich momentan nicht das folgende Problem.

Ich habe mich eigentlich an das Beispiel aus der commandref gehalten und habe dieses DOIF:
Code aus dem DEF:
([RolloSZmodus] eq "Beschattung" and ([Aussensensor_Terrasse:temperature] > 25 and [07:00-{sunset_abs()}])) (set RollladenSZ pct 25)
DOELSE (set RollladenSZ pct 75)


wenn ich jetzt mal die Temperatur verändere funktioniert das richtig und der Rollladen fährt in die Beschattungsposition und auch wieder auf meine eingestellten 75%
Verfahre ich aber den Rollladen von Hand mit einer Homematic Fernbedienung, bleibt er die gesamte Zeit so stehen, selbst am Abend fährt er nicht in die 75% Position...
Was übersehe ich hier..?

Das List:
Internals:
   CFGFN      ./FHEM/Obergeschoss.cfg
   DEF        ([RolloSZmodus] eq "Beschattung" and ([Aussensensor_Terrasse:temperature] > 25 and [07:00-{sunset_abs()}])) (set RollladenSZ pct 25)
DOELSE (set RollladenSZ pct 75)
   NAME       di_RollladenSZ_B
   NR         1313
   NTFY_ORDER 50-di_RollladenSZ_B
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-07-28 13:34:31   state           initialized
     2015-07-28 13:34:31   timer_1_c1      29.07.2015 07:00:00
     2015-07-28 13:34:31   timer_2_c1      28.07.2015 22:04:38
   Condition:
     0          InternalDoIf('RolloSZmodus','STATE','') eq "Beschattung" and (ReadingValDoIf('Aussensensor_Terrasse','temperature','') > 25 and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,""))
   Days:
   Devices:
     0           RolloSZmodus Aussensensor_Terrasse
     all         RolloSZmodus Aussensensor_Terrasse
   Do:
     0          set RollladenSZ pct 25
     1          set RollladenSZ pct 75
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
     0           RolloSZmodus:STATE
     all         RolloSZmodus:STATE
   Itimer:
   Readings:
     0           Aussensensor_Terrasse:temperature
     all         Aussensensor_Terrasse:temperature
   Realtime:
     0          07:00:00
     1          22:04:38
   State:
   Time:
     0          07:00:00
     1          {sunset_abs()}
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   group      Rollläden
   wait       900:900

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 28 Juli 2015, 13:39:07
ich habe seit einiger Zeit meine Rollladensteuerung auf Beschattung stehen, die eigentlich fast genau so arbeitet wie die normale Steuerung.
Da ich echt lange nichts an meinen DOIFs verstellt oder eingestellt habe finde ich momentan nicht das folgende Problem.

Ich habe mich eigentlich an das Beispiel aus der commandref gehalten und habe dieses DOIF:
Code aus dem DEF:
([RolloSZmodus] eq "Beschattung" and ([Aussensensor_Terrasse:temperature] > 25 and [07:00-{sunset_abs()}])) (set RollladenSZ pct 25)
DOELSE (set RollladenSZ pct 75)


wenn ich jetzt mal die Temperatur verändere funktioniert das richtig und der Rollladen fährt in die Beschattungsposition und auch wieder auf meine eingestellten 75%
Verfahre ich aber den Rollladen von Hand mit einer Homematic Fernbedienung, bleibt er die gesamte Zeit so stehen, selbst am Abend fährt er nicht in die 75% Position...
Was übersehe ich hier..?



Das Modul geht nur in den DOELSE-Fall, wenn es auch selbst den DOIF-Fall ausgeführt hat (also nur nach Zustandswechsel ohne do always).

Du könntest deine FB im Modul mit abfragen, so dass nicht deine FB, sondern nur das Modul den Rollladen bedient.

Alternativ könntest du deine zyklische Temperatur-Abfrage in ein separates DOIF-Modul auslagern z. B. mit den Zuständen warm/kalt und dann in deinem Modul den Zustand mit warm/kalt abfragen und do always setzen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Zitat von: Damian am 28 Juli 2015, 15:33:58
Du könntest deine FB im Modul mit abfragen, so dass nicht deine FB, sondern nur das Modul den Rollladen bedient.
das muss ich mir mal genau anschauen, ich habe da nichts mehr mit gemacht und dachte er erkennt das selbst sobald der Aktor einen anderen Wert hat... aber klar der ist ja nirgends mit drin :-\

Zitat von: Damian am 28 Juli 2015, 15:33:58
Alternativ könntest du deine zyklische Temperatur-Abfrage in ein separates DOIF-Modul auslagern z. B. mit den Zuständen warm/kalt und dann in deinem Modul den Zustand mit warm/kalt abfragen und do always setzen.
das erscheint mir erst einmal sehr kompliziert, denn welcher Wert ist denn dann warm und kalt, oder ist das einfacher als ich grad denke..? warm wäre dann alles über 25° und kalt alles unter 25°

ich muss mal schauen ob ich was dazu in der commandref finde... muss erst mal wieder ein wenig in die Materie DOIF rein kommen  ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 28 Juli 2015, 15:42:17
das muss ich mir mal genau anschauen, ich habe da nichts mehr mit gemacht und dachte er erkennt das selbst sobald der Aktor einen anderen Wert hat... aber klar der ist ja nirgends mit drin :-\
das erscheint mir erst einmal sehr kompliziert, denn welcher Wert ist denn dann warm und kalt, oder ist das einfacher als ich grad denke..? warm wäre dann alles über 25° und kalt alles unter 25°

ich muss mal schauen ob ich was dazu in der commandref finde... muss erst mal wieder ein wenig in die Materie DOIF rein kommen  ;)

define di_warm DOIF ([Aussensensor_Terrasse:temperature] > 25)
attr di_warm cmdState warm|kalt

define di_beschattung DOIF ([RolloSZmodus] eq "Beschattung" and ([di_warm] eq "warm" and [07:00-{sunset_abs()}])) (set RollladenSZ pct 25)
DOELSE (set RollladenSZ pct 75)
attr di_beschattung do always


kompliziert ist relativ.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

vielen Dank... ich versuche es zu verstehen warum das jetzt geht ;)
die wait Zeiten muss ich aber beibehalten oder wird dies durch das Attribut do always erledigt..?
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 29 Juli 2015, 01:07:04
vielen Dank... ich versuche es zu verstehen warum das jetzt geht ;)
die wait Zeiten muss ich aber beibehalten oder wird dies durch das Attribut do always erledigt..?

ja, die waits musst du natürlich noch angeben. do always bedeutet nur, dass jedes mal geschaltet wird, auch wenn zuvor ein bestimmter Zustand schon mal geschaltet wurde, siehe Commandref zu DOIF.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

Danke dir Damian...  ;) nochmals von mir ein Super Modul, tolle Arbeit
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

#7
ich habe jetzt da ja die Tage grad sehr warm sind die Beschattung geändert und gestern sind die Rollläden im WZ dann Abends doch nicht ganz runter gefahren.

Das funktioniert:
Die Rolläden öffnen richtig morgens und fahren dann auch am Tage bei überschreiten der festgelegten Temperatur in meinem DOIF di_Temperatur auch in die Beschattungsposition...

Was ich noch erreichen möchte, dass die Rollläden dann zu einer Zeit Nachmittags ich sage mal 17Uhr oder die Temperatur ist unter 27° zurück gegangen wieder hoch fahren und Abends, dann zu Sunset_abs wieder schließen. Das bekomme ich grad nicht gebacken, bisher sieht der Code so aus....

hier der Code aus dem DEF:
([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:00-{sunset_abs("CIVIL",-4800,"16:35","22:10")}]))
(set RollladenWZ 40)
DOELSE ([RolloWZmodus] eq "Beschattung")
(set RollladenWZ off)


Das ist das Temperatur DOIF:
define di_Temperatur DOIF ([Aussensensor_Terrasse:temperature] > 27)
attr di_Temperatur alias Temperatur Beschattung 27°
attr di_Temperatur cmdState warm|kalt


Hier noch das list:
Internals:
   CFGFN      ./FHEM/Wohnzimmer.cfg
   DEF        ([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:00-{sunset_abs("CIVIL",-4800,"16:35","22:10")}]))
(set RollladenWZ 40)
DOELSE ([RolloWZmodus] eq "Beschattung")
(set RollladenWZ off)


   NAME       di_RollladenWZ_B
   NR         365
   NTFY_ORDER 50-di_RollladenWZ_B
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-08-04 12:50:28   state           initialized
     2015-08-04 12:50:28   timer_1_c1      05.08.2015 07:15:00|12345
     2015-08-04 12:50:28   timer_2_c1      05.08.2015 07:30:00|06
     2015-08-04 12:50:28   timer_3_c2      05.08.2015 07:00:00
     2015-08-04 12:50:28   timer_4_c2      04.08.2015 20:31:08
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "warm" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,""))
   Days:
     0          12345
     1          06
   Devices:
     0           RolloWZmodus
     1           RolloWZmodus di_Temperatur
     all         RolloWZmodus di_Temperatur
   Do:
     0          set RollladenWZ on
     1          set RollladenWZ 40
     2          [RolloWZmodus] eq "Beschattung"
   Helper:
     last_timer 4
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE
     1           RolloWZmodus:STATE di_Temperatur:STATE
     all         RolloWZmodus:STATE di_Temperatur:STATE
   Itimer:
   Realtime:
     0          07:15:00
     1          07:30:00
     2          07:00:00
     3          20:31:08
   State:
   Time:
     0          {ReadingsVal("du_RolloZeit_hoch","state","08:15:00")}
     1          {ReadingsVal("du_RolloZeit_hoch_WoE","state","08:45:00")}
     2          07:00:00
     3          {sunset_abs("CIVIL",-4800,"16:35","22:10")}
   Timecond:
     0          0
     1          0
     2          1
     3          1
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
Attributes:
   do         always
   group      Rollläden
   wait       900:900
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 04 August 2015, 12:58:13
ich habe jetzt da ja die Tage grad sehr warm sind die Beschattung geändert und gestern sind die Rollläden im WZ dann Abends doch nicht ganz runter gefahren.

Das funktioniert:
Die Rolläden öffnen richtig morgens und fahren dann auch am Tage bei überschreiten der festgelegten Temperatur in meinem DOIF di_Temperatur auch in die Beschattungsposition...

Was ich noch erreichen möchte, dass die Rollläden dann zu einer Zeit Nachmittags ich sage mal 17Uhr oder die Temperatur ist unter 27° zurück gegangen wieder hoch fahren und Abends, dann zu Sunset_abs wieder schließen. Das bekomme ich grad nicht gebacken, bisher sieht der Code so aus....

hier der Code aus dem DEF:
([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:00-{sunset_abs("CIVIL",-4800,"16:35","22:10")}]))
(set RollladenWZ 40)
DOELSE ([RolloWZmodus] eq "Beschattung")
(set RollladenWZ off)


Das ist das Temperatur DOIF:
define di_Temperatur DOIF ([Aussensensor_Terrasse:temperature] > 27)
attr di_Temperatur alias Temperatur Beschattung 27°
attr di_Temperatur cmdState warm|kalt


Hier noch das list:
Internals:
   CFGFN      ./FHEM/Wohnzimmer.cfg
   DEF        ([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:00-{sunset_abs("CIVIL",-4800,"16:35","22:10")}]))
(set RollladenWZ 40)
DOELSE ([RolloWZmodus] eq "Beschattung")
(set RollladenWZ off)


   NAME       di_RollladenWZ_B
   NR         365
   NTFY_ORDER 50-di_RollladenWZ_B
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-08-04 12:50:28   state           initialized
     2015-08-04 12:50:28   timer_1_c1      05.08.2015 07:15:00|12345
     2015-08-04 12:50:28   timer_2_c1      05.08.2015 07:30:00|06
     2015-08-04 12:50:28   timer_3_c2      05.08.2015 07:00:00
     2015-08-04 12:50:28   timer_4_c2      04.08.2015 20:31:08
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "warm" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,""))
   Days:
     0          12345
     1          06
   Devices:
     0           RolloWZmodus
     1           RolloWZmodus di_Temperatur
     all         RolloWZmodus di_Temperatur
   Do:
     0          set RollladenWZ on
     1          set RollladenWZ 40
     2          [RolloWZmodus] eq "Beschattung"
   Helper:
     last_timer 4
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE
     1           RolloWZmodus:STATE di_Temperatur:STATE
     all         RolloWZmodus:STATE di_Temperatur:STATE
   Itimer:
   Realtime:
     0          07:15:00
     1          07:30:00
     2          07:00:00
     3          20:31:08
   State:
   Time:
     0          {ReadingsVal("du_RolloZeit_hoch","state","08:15:00")}
     1          {ReadingsVal("du_RolloZeit_hoch_WoE","state","08:45:00")}
     2          07:00:00
     3          {sunset_abs("CIVIL",-4800,"16:35","22:10")}
   Timecond:
     0          0
     1          0
     2          1
     3          1
   Timer:
     0          0
     1          0
     2          0
     3          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
Attributes:
   do         always
   group      Rollläden
   wait       900:900


Ein DOELSE-Fall hat keine Bedingung. Du hast aber welche. Entweder einen DOELSEIF-Fall  mit entsprechender Bedingung zum Runterfahren definieren oder DOELSE ohne Bedingung angeben (was bei mehreren Fällen immer kritisch zu sehen ist).

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

#9
ich hatte das versucht zwischenzeitlich so zu probieren...! nur ich denke das klappt nicht, da ja am im letzten DOELSEIF Fall keine Zeit vorhanden ist

aus dem DEF:
([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:00-{sunset_abs("CIVIL",-4800,"16:35","22:10")}]))
(set RollladenWZ 40)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [07:00-{sunset_abs("CIVIL",-4800,"16:00","22:10")}]))
(set RollladenWZ on) 
DOELSEIF ([RolloWZmodus] eq "Beschattung")
(set RollladenWZ off)


das was mir Probleme bereitet, dass er zwischenzeitlich wenn es wieder unter 27° geht den Rollladen hoch fährt und dann eben zum Abend ganz normal runter fährt zu Sunset
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 04 August 2015, 19:39:11
ich hatte das versucht zwischenzeitlich so zu probieren...! nur ich denke das klappt nicht, da ja am im letzten DOELSEIF Fall keine Zeit vorhanden ist

aus dem DEF:
([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:00-{sunset_abs("CIVIL",-4800,"16:35","22:10")}]))
(set RollladenWZ 40)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [07:00-{sunset_abs("CIVIL",-4800,"16:00","22:10")}]))
(set RollladenWZ on) 
DOELSEIF ([RolloWZmodus] eq "Beschattung")
(set RollladenWZ off)


das was mir Probleme bereitet, dass er zwischenzeitlich wenn es wieder unter 27° geht den Rollladen hoch fährt und dann eben zum Abend ganz normal runter fährt zu Sunset

ja, deswegen würde ich mit "and" die Zeit zum Runterfahren im letzten DOELSEIF-Fall angeben.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

#11
so nun bin ich mal gespannt auf morgen, ob es noch ein Fehlerhaftes Fahren gibt - mit der Temperatur kann ich ja zur Not "spielen"

Heute Abend jedenfalls ist der Rollladen zur sonstigen (normalen) Sunset Zeit herunter gefahren...

mein list sieht jetzt so aus:
Internals:
   CFGFN      ./FHEM/Wohnzimmer.cfg
   DEF        ([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:00-{sunset_abs("CIVIL",-4800,"16:35","22:10")}]))
(set RollladenWZ 40)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [07:00-{sunset_abs("CIVIL",-1200,"16:35","22:10")}]))
(set RollladenWZ on)
DOELSE (set RollladenWZ off)


   NAME       di_RollladenWZ_B
   NR         365
   NTFY_ORDER 50-di_RollladenWZ_B
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-08-04 22:54:27   state           initialized
     2015-08-04 22:54:27   timer_1_c1      05.08.2015 07:15:00|12345
     2015-08-04 22:54:27   timer_2_c1      05.08.2015 07:30:00|06
     2015-08-04 22:54:27   timer_3_c2      05.08.2015 07:00:00
     2015-08-04 22:54:27   timer_4_c2      05.08.2015 20:29:06
     2015-08-04 22:54:27   timer_5_c3      05.08.2015 07:00:00
     2015-08-04 22:54:27   timer_6_c3      05.08.2015 21:29:06
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "warm" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,""))
     2          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "kalt" and DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,""))
   Days:
     0          12345
     1          06
   Devices:
     0           RolloWZmodus
     1           RolloWZmodus di_Temperatur
     2           RolloWZmodus di_Temperatur
     all         RolloWZmodus di_Temperatur
   Do:
     0          set RollladenWZ on
     1          set RollladenWZ 40
     2          set RollladenWZ on
     3          set RollladenWZ off
   Helper:
     last_timer 6
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE
     1           RolloWZmodus:STATE di_Temperatur:STATE
     2           RolloWZmodus:STATE di_Temperatur:STATE
     all         RolloWZmodus:STATE di_Temperatur:STATE
   Itimer:
   Realtime:
     0          07:15:00
     1          07:30:00
     2          07:00:00
     3          20:29:06
     4          07:00:00
     5          21:29:06
   State:
   Time:
     0          {ReadingsVal("du_RolloZeit_hoch","state","08:15:00")}
     1          {ReadingsVal("du_RolloZeit_hoch_WoE","state","08:45:00")}
     2          07:00:00
     3          {sunset_abs("CIVIL",-4800,"16:35","22:10")}
     4          07:00:00
     5          {sunset_abs("CIVIL",-1200,"16:35","22:10")}
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
Attributes:
   do         always
   group      Rollläden
   wait       900:900
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 04 August 2015, 23:06:04
so nun bin ich mal gespannt auf morgen, ob es noch ein Fehlerhaftes Fahren gibt - mit der Temperatur kann ich ja zur Not "spielen"

Heute Abend jedenfalls ist der Rollladen zur sonstigen (normalen) Sunset Zeit herunter gefahren...

mein list sieht jetzt so aus:
Internals:
   CFGFN      ./FHEM/Wohnzimmer.cfg
   DEF        ([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:00-{sunset_abs("CIVIL",-4800,"16:35","22:10")}]))
(set RollladenWZ 40)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [07:00-{sunset_abs("CIVIL",-1200,"16:35","22:10")}]))
(set RollladenWZ on)
DOELSE (set RollladenWZ off)


   NAME       di_RollladenWZ_B
   NR         365
   NTFY_ORDER 50-di_RollladenWZ_B
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-08-04 22:54:27   state           initialized
     2015-08-04 22:54:27   timer_1_c1      05.08.2015 07:15:00|12345
     2015-08-04 22:54:27   timer_2_c1      05.08.2015 07:30:00|06
     2015-08-04 22:54:27   timer_3_c2      05.08.2015 07:00:00
     2015-08-04 22:54:27   timer_4_c2      05.08.2015 20:29:06
     2015-08-04 22:54:27   timer_5_c3      05.08.2015 07:00:00
     2015-08-04 22:54:27   timer_6_c3      05.08.2015 21:29:06
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "warm" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,""))
     2          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "kalt" and DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,""))
   Days:
     0          12345
     1          06
   Devices:
     0           RolloWZmodus
     1           RolloWZmodus di_Temperatur
     2           RolloWZmodus di_Temperatur
     all         RolloWZmodus di_Temperatur
   Do:
     0          set RollladenWZ on
     1          set RollladenWZ 40
     2          set RollladenWZ on
     3          set RollladenWZ off
   Helper:
     last_timer 6
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE
     1           RolloWZmodus:STATE di_Temperatur:STATE
     2           RolloWZmodus:STATE di_Temperatur:STATE
     all         RolloWZmodus:STATE di_Temperatur:STATE
   Itimer:
   Realtime:
     0          07:15:00
     1          07:30:00
     2          07:00:00
     3          20:29:06
     4          07:00:00
     5          21:29:06
   State:
   Time:
     0          {ReadingsVal("du_RolloZeit_hoch","state","08:15:00")}
     1          {ReadingsVal("du_RolloZeit_hoch_WoE","state","08:45:00")}
     2          07:00:00
     3          {sunset_abs("CIVIL",-4800,"16:35","22:10")}
     4          07:00:00
     5          {sunset_abs("CIVIL",-1200,"16:35","22:10")}
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
Attributes:
   do         always
   group      Rollläden
   wait       900:900


Dir ist bewusst, dass wenn du deinen Modus RolloWZmodus umstellst (ungleich Beschattung), deine Rollläden gleichzeitig aufgrund des DOELSE-Falls herunterfahren.

Wie gesagt DOELSE-Fall bei mehreren DOELSEIF-Fällen ist kritisch zu sehen, denn du musst alle möglichen Trigger bedenken, die zu diesem Fall führen können, daher besser DOELESIF mit Zeitangabe.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

moonsorrox

#13
Zitat von: Damian am 05 August 2015, 09:02:17
Dir ist bewusst, dass wenn du deinen Modus RolloWZmodus umstellst (ungleich Beschattung), deine Rollläden gleichzeitig aufgrund des DOELSE-Falls herunterfahren.

Wie gesagt DOELSE-Fall bei mehreren DOELSEIF-Fällen ist kritisch zu sehen, denn du musst alle möglichen Trigger bedenken, die zu diesem Fall führen können, daher besser DOELESIF mit Zeitangabe.

Gruß

Damian
Wie Recht du hast.... das hat nicht geklappt heute Morgen hoch gefahren und wohl gleich wieder runter...
Habe noch nicht im log geschaut, beantworte grad nur mit dem iPad.... Da muss ich nochmal ran und umbauen..!

@Damian
So ich hoffe ich habe keine Denkfehler drin, vllt. schaust du mal über das List

- ich möchte ja von morgens 7.15 Uhr an die Abfrage haben ob es warm ist, dann sollen die Rollläden in Beschattung 40% fahren
- das ganze soll bis 15:45 (evtl. passe ich das an) passieren, da die Sonne dann rum ist
- ab 15:45 soll er schauen wenn die Temperatur dann kalt ist soll er die Rollläden hoch fahren

Abends dann ganz normal wieder runter nach Sunset

Hier mal das list:
Internals:
   CFGFN      ./FHEM/Wohnzimmer.cfg
   DEF        ([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:15-15:45]))
(set RollladenWZ 40)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [15:45-{sunset_abs("CIVIL",-1240,"16:35","22:20")}]))
(set RollladenWZ on)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and [{sunset_abs("CIVIL",-1200,"16:35","22:20")}])
(set RollladenWZ off)


   NAME       di_RollladenWZ_B
   NR         365
   NTFY_ORDER 50-di_RollladenWZ_B
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-08-05 15:58:21   state           initialized
     2015-08-05 15:58:21   timer_1_c1      06.08.2015 07:15:00|12345
     2015-08-05 15:58:21   timer_2_c1      06.08.2015 07:30:00|06
     2015-08-05 15:58:22   timer_3_c2      06.08.2015 07:15:00
     2015-08-05 15:58:22   timer_4_c2      06.08.2015 15:45:00
     2015-08-05 15:58:22   timer_5_c3      06.08.2015 15:45:00
     2015-08-05 15:58:22   timer_6_c3      05.08.2015 21:28:26
     2015-08-05 15:58:22   timer_7_c4      05.08.2015 21:29:06
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (DOIF_time_once($hash->{timer}{0},$wday,"12345") or DOIF_time_once($hash->{timer}{1},$wday,"06"))
     1          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "warm" and DOIF_time($hash->{realtime}{2},$hash->{realtime}{3},$wday,$hms,""))
     2          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and (InternalDoIf('di_Temperatur','STATE','') eq "kalt" and DOIF_time($hash->{realtime}{4},$hash->{realtime}{5},$wday,$hms,""))
     3          InternalDoIf('RolloWZmodus','STATE','') eq "Beschattung" and DOIF_time_once($hash->{timer}{6},$wday,"")
   Days:
     0          12345
     1          06
   Devices:
     0           RolloWZmodus
     1           RolloWZmodus di_Temperatur
     2           RolloWZmodus di_Temperatur
     3           RolloWZmodus
     all         RolloWZmodus di_Temperatur
   Do:
     0          set RollladenWZ on
     1          set RollladenWZ 40
     2          set RollladenWZ on
     3          set RollladenWZ off
   Helper:
     last_timer 7
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE
     1           RolloWZmodus:STATE di_Temperatur:STATE
     2           RolloWZmodus:STATE di_Temperatur:STATE
     3           RolloWZmodus:STATE
     all         RolloWZmodus:STATE di_Temperatur:STATE
   Itimer:
   Realtime:
     0          07:15:00
     1          07:30:00
     2          07:15:00
     3          15:45:00
     4          15:45:00
     5          21:28:26
     6          21:29:06
   State:
   Time:
     0          {ReadingsVal("du_RolloZeit_hoch","state","08:15:00")}
     1          {ReadingsVal("du_RolloZeit_hoch_WoE","state","08:45:00")}
     2          07:15:00
     3          15:45:00
     4          15:45:00
     5          {sunset_abs("CIVIL",-1240,"16:35","22:20")}
     6          {sunset_abs("CIVIL",-1200,"16:35","22:20")}
   Timecond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
     6          3
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
   Timerfunc:
   Timers:
     0           0  1
     1           2  3
     2           4  5
     3           6
Attributes:
   do         always
   group      Rollläden
   wait       900:900

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Damian

Zitat von: moonsorrox am 05 August 2015, 11:38:28
Wie Recht du hast.... das hat nicht geklappt heute Morgen hoch gefahren und wohl gleich wieder runter...
Habe noch nicht im log geschaut, beantworte grad nur mit dem iPad.... Da muss ich nochmal ran und umbauen..!

@Damian
So ich hoffe ich habe keine Denkfehler drin, vllt. schaust du mal über das List

- ich möchte ja von morgens 7.15 Uhr an die Abfrage haben ob es warm ist, dann sollen die Rollläden in Beschattung 40% fahren
- das ganze soll bis 15:45 (evtl. passe ich das an) passieren, da die Sonne dann rum ist
- ab 15:45 soll er schauen wenn die Temperatur dann kalt ist soll er die Rollläden hoch fahren

Abends dann ganz normal wieder runter nach Sunset

Hier mal das list:
Internals:
   CFGFN      ./FHEM/Wohnzimmer.cfg
   DEF        ([RolloWZmodus] eq "Beschattung"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "08:45:00")}|06]))
(set RollladenWZ on)
DOELSEIF([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "warm" and [07:15-15:45]))
(set RollladenWZ 40)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and ([di_Temperatur] eq "kalt" and [15:45-{sunset_abs("CIVIL",-1240,"16:35","22:20")}]))
(set RollladenWZ on)
DOELSEIF ([RolloWZmodus] eq "Beschattung" and [{sunset_abs("CIVIL",-1200,"16:35","22:20")}])
(set RollladenWZ off)


Du kannst statt [{ReadingsVal("du_RolloZeit_hoch", "state", "08:15:00")}|12345] auch direkt [[du_RolloZeit_hoch]|12345] oder noch einfacher [[du_RolloZeit_hoch]|8] angeben, das hat den Vorteil, dass bei Änderung des Dummys die Zeit im Modul sofort gesetzt wird und nicht erst am nächsten Tag, wenn die alte Zeit getriggert hat. Ist aber bei dir nicht so wichtig, weil Intervalle z. B. [07:15-15:45] bei dir nicht zu triggern brauchen, sie dienen bei dir nur der Abfrage, das kannst du mit Fragezeichen beeinflussen, also [?07:15-15:45]. Genaueres kannst du ja in der Commandref nachlesen.

Gruß

Damian


[/code]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF