DOIF: Rollladensteuerung funktioniert nur teilweise...

Begonnen von moonsorrox, 23 Februar 2015, 19:44:21

Vorheriges Thema - Nächstes Thema

moonsorrox

Ich habe mir eine Rollladensteuerung angelehnt an einen Wiki Artikel erstellt.

Die Steuerung mit einem DOIF funktioniert, aber nur teilweise und ich finde den Fehler nicht.
Genutzt werden dazu noch einige Dummys die bezeichnet werden mit
"du_RolloZeit_runter_start" eingestellt auf 18:15 Uhr für die erste Zeit wenn es dunkel ist und der Rolladen runter fahren soll.
"du_RolloZeit_runter_ende" eingestellt auf 18:30 Uhr (nur zum Testen) für die zweite wenn die erste Zeit nicht erfüllt war weil evtl. die Helligkeit noch zu hoch war.

Funktion die OK sind

1. der Rollladen fährt morgens zur eingestellten Zeit (08:15 Uhr) hoch
2. der Rollladen fährt Abends zur zweiten eingestellten Zeit (18:30 Uhr) herunter
3. der Rollladen fährt hoch wenn die Terrassentür über Kontakt geöffnet wird


Funktionen die nicht OK sind

1. der Rollladen ist nicht zur ersten Zeit (mit Dummy "du_RolloZeit_runter_start" 18:15 Uhr) runter gefahren, obwohl die Helligkeit unter dem Wert 0.90 war..!
2. nach dem Öffnen, die Terrassentür wieder geschlossen, die Rollläden sind nicht mehr runter gefahren..!

Also was nicht OK ist, dass runter fahren denn es hat beides mal nicht funktioniert zur Uhrzeit nicht und als ich die Terrassentür geschlossen habe.


Code DOIF:
([RolloWZmodus] eq "FHEM" and [WZ_TerrasseTuer] eq "closed" and ([Aussensensor_Terrasse:luminosity] < [du_Rollo_Luminosity_runter:state]
and [{ReadingsVal("du_RolloZeit_runter_start", "state", "22:00:00")}-{ReadingsVal("du_RolloZeit_runter_ende", "state", "22:00:00")}])
or [{ReadingsVal("du_RolloZeit_runter_ende", "state", "22:00:00")}])
  ({if (ReadingsVal("RollladenWZ", "state", "---") ne "off") {fhem("set RollladenWZ off")}})
DOELSEIF ([RolloWZmodus] eq "FHEM" and ([{ReadingsVal("du_RolloZeit_hoch", "state", "10:00:00")}|8] or
[{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "10:00:00")}|7]) or ([WZ_TerrasseTuer:state] eq "open"))
  ({if (ReadingsVal("RollladenWZ", "state", "---") ne "on") {fhem("set RollladenWZ on")}})


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

Bartimaus

LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

moonsorrox

OK hätte ich auch selbst dran denken können... ;)

Internals:
   CFGFN      ./FHEM/Automation.cfg
   DEF        ([RolloWZmodus] eq "FHEM" and [WZ_TerrasseTuer] eq "closed" and ([Aussensensor_Terrasse:luminosity] < [du_Rollo_Luminosity_runter:state]
and [{ReadingsVal("du_RolloZeit_runter_start", "state", "22:00:00")}-{ReadingsVal("du_RolloZeit_runter_ende", "state", "22:00:00")}])
or [{ReadingsVal("du_RolloZeit_runter_ende", "state", "22:00:00")}])
  ({if (ReadingsVal("RollladenWZ", "state", "---") ne "off") {fhem("set RollladenWZ off")}})
DOELSEIF ([RolloWZmodus] eq "FHEM" and ([{ReadingsVal("du_RolloZeit_hoch", "state", "10:00:00")}|8] or
[{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "10:00:00")}|7]) or ([WZ_TerrasseTuer:state] eq "open"))
  ({if (ReadingsVal("RollladenWZ", "state", "---") ne "on") {fhem("set RollladenWZ on")}})
   NAME       di_rollladenWZ_TK_LichtTerrasse
   NR         134
   NTFY_ORDER 50-di_rollladenWZ_TK_LichtTerrasse
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-02-23 20:20:17   e_Aussensensor_Terrasse_luminosity 0
     2015-02-23 19:51:57   state           initialized
     2015-02-23 19:51:57   timer_1_c1      24.02.2015 18:20:00
     2015-02-23 19:51:57   timer_2_c1      24.02.2015 18:30:00
     2015-02-23 19:51:57   timer_3_c1      24.02.2015 18:30:00
     2015-02-23 19:51:57   timer_4_c2      24.02.2015 08:15:00|8
     2015-02-23 19:51:57   timer_5_c2      24.02.2015 08:40:00|7
   Condition:
     0          InternalDoIf('RolloWZmodus','STATE','') eq "FHEM" and InternalDoIf('WZ_TerrasseTuer','STATE','') eq "closed" and (ReadingValDoIf('Aussensensor_Terrasse','luminosity','') < ReadingValDoIf('du_Rollo_Luminosity_runter','state','') and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")) or DOIF_time_once($hash->{timer}{2},$wday,"")
     1          InternalDoIf('RolloWZmodus','STATE','') eq "FHEM" and (DOIF_time_once($hash->{timer}{3},$wday,"8") or DOIF_time_once($hash->{timer}{4},$wday,"7")) or (ReadingValDoIf('WZ_TerrasseTuer','state','') eq "open")
   Days:
     3          8
     4          7
   Devices:
     0           RolloWZmodus WZ_TerrasseTuer Aussensensor_Terrasse du_Rollo_Luminosity_runter
     1           RolloWZmodus WZ_TerrasseTuer
     all         RolloWZmodus WZ_TerrasseTuer Aussensensor_Terrasse du_Rollo_Luminosity_runter
   Do:
     0          {if (ReadingsVal("RollladenWZ", "state", "---") ne "off") {fhem("set RollladenWZ off")}}
     1          {if (ReadingsVal("RollladenWZ", "state", "---") ne "on") {fhem("set RollladenWZ on")}}
   Helper:
     last_timer 5
     sleeptimer -1
   Internals:
     0           RolloWZmodus:STATE WZ_TerrasseTuer:STATE
     1           RolloWZmodus:STATE
     all         RolloWZmodus:STATE WZ_TerrasseTuer:STATE
   Readings:
     0           Aussensensor_Terrasse:luminosity du_Rollo_Luminosity_runter:state
     1           WZ_TerrasseTuer:state
     all         Aussensensor_Terrasse:luminosity du_Rollo_Luminosity_runter:state WZ_TerrasseTuer:state
   Realtime:
     0          18:20:00
     1          18:30:00
     2          18:30:00
     3          08:15:00
     4          08:40:00
   State:
   Time:
     0          {ReadingsVal("du_RolloZeit_runter_start", "state", "22:00:00")}
     1          {ReadingsVal("du_RolloZeit_runter_ende", "state", "22:00:00")}
     2          {ReadingsVal("du_RolloZeit_runter_ende", "state", "22:00:00")}
     3          {ReadingsVal("du_RolloZeit_hoch", "state", "10:00:00")}
     4          {ReadingsVal("du_RolloZeit_hoch_WoE", "state", "10:00:00")}
   Timecond:
     0          0
     1          0
     2          0
     3          1
     4          1
   Timer:
     0          0
     1          0
     2          0
     3          0
     4          0
   Timerfunc:
   Timers:
     0           0  1  2
     1           3  4
   Trigger:
Attributes:
   room       Automation
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

Bartimaus

Worauf ich immer noch reinfalle ist die Klammersetzung, sowie and/or.
Hast Du das schon geprüft ?
Ich schreibe bei mir jede Bedingung in eine eigene Zeile, das hilft mir die Übersicht zu bewahren, und geht bei "DOIF" ja simpelst mit einem Zeilenumbruch im DEF. ( Sofern Du das noch nicht wusstest)
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

moonsorrox

#4
Doch ich weiß es... ;)
Hatte das auch schon in Verdacht, aber zwei Versuche scheiterten..!  :-\

Ich habe nun 4 Versuche mit Klammern erstellt, davon funktionierten Drei genau wie die hier vorgestellte, der Rollladen fuhr nur hoch, nicht mehr runter.
Bei einem fuhr er gar nicht. :-\
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

maxritti

Hi Rene,

was ich an Deiner Stelle jetzt mal machen würde, wäre anstelle der ReadingsVal("...."), welche in den Bedingungen des DOIFs stehen, die Werte statisch, also beispielsweise [22:10:00] einzutragen.
Damit kann man schon mal Unstimmigkeiten mit den "Wertedummys" ausschliessen.


moonsorrox

was mich jetzt nur wundert das dies bei dir funktioniert... ich habe ja nur die Geräte auf meine angepaßt und mein Master Dummy heißt anders, alles andere ist identisch.

Die Readingsval stehen ja nach wie vor auf 22:00:00 oder welche meinst du?
Hier mal noch der aktuelle Code aus dem DEF:
([RolloWZmodus] eq "FHEM"
and [WZ_TerrasseTuer] eq "closed"
and ([Aussensensor_Terrasse:luminosity] < [du_Rollo_Luminosity_runter:state]
and [{ReadingsVal("du_RolloZeit_runter_start", "state", "22:00:00")}-{ReadingsVal("du_RolloZeit_runter_ende", "state", "22:00:00")}])
or [{ReadingsVal("du_RolloZeit_runter_ende", "state", "22:00:00")}]) ({if (ReadingsVal("RollladenWZ", "state", "---") ne "off") {fhem("set RollladenWZ off")}})
DOELSEIF ([RolloWZmodus] eq "FHEM"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "10:00:00")}|8]
or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "10:00:00")}|7])
or ([WZ_TerrasseTuer:state] eq "open")) ({if (ReadingsVal("RollladenWZ", "state", "---") ne "on") {fhem("set RollladenWZ on")}})


das mit der Klammerei halte ich immer noch für denkbar, da ich verschiedene Varianten hatte und bis auf eine liefen die anderen 3 genauso wie die jetzige...

Ich probiere das mit den Klammern immer mit notepad++ da kann man wunderbar sehen welche Klammerpaare zusammen gehören.
Auch schaue ich laufend in die commandref zum DOIF an um die ganzen Beispiele anzuschauen, aber es ist leider kein so verschachteltes dabei... somit ist es für mich erst einmal sehr schwierig die ganzen Bedingungen und Befehle zu klammern ich habe auch schon versucht jede einzelne Bedingung und jeden Befehl zu klammern aber das geht gar nicht...!
Evtl. schaut Damian mal drauf und sieht sofort was falsch ist... Ich sehe zur Zeit nur Klammern  ;) :D :-\

Zitatdefine <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)
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

maxritti

#7
Sorry, mit den ReadingsVal(..) scheint ja alles korrekt zu sein. Denn die timer, des DOIFs sind ja korrekt auf den Werten der Eingabedummys eingestellt.
Sieht man ja am list des DOIFs.

Wobei wenn ich mir das List von Deinem DOIF anschaue scheint mir folgendes unklar zu sein bzw erklärt es, dass die Rolländen nach schliessen der Tür nicht runter fahren.

Du hast Deinen Zeitbereich von 18:20:00 bis 18:30:00 definiert (timer_1_c1 ... timer_3_c1).
Deine Readings wurden aber um 19:51:57 aktualisiert.
Damit ist dies ja ausserhalb des Bereichs von 18:20:00 - 18:30:00. Somit wird cmd_1 vom DOIF nicht ausgeführt.
Passt also, wenn Du um 19:15:27 die Tür geschlossen hast und die Rolladen nicht runter gefahren sind.

Da musst du entweder an dem Zeitraum schrauben oder eine andere Logik überlegen  ;)

moonsorrox

#8
Zitat von: maxritti am 24 Februar 2015, 13:38:05
Wobei wenn ich mir das List von Deinem DOIF anschaue scheint mir folgendes unklar zu sein bzw erklärt es, dass die Rolländen nach schliessen der Tür nicht runter fahren.

Du hast Deinen Zeitbereich von 18:20:00 bis 18:30:00 definiert (timer_1_c1 ... timer_3_c1).
Deine Readings wurden aber um 19:51:57 aktualisiert.
Damit ist dies ja ausserhalb des Bereichs von 18:20:00 - 18:30:00. Somit wird cmd_1 vom DOIF nicht ausgeführt.
Passt also, wenn Du um 19:15:27 die Tür geschlossen hast und die Rolladen nicht runter gefahren sind.

ja das hatte ich nur gemacht damit ich sehe ob die Zeit funktioniert wann er spätestens runter fährt und diese Zeit, also die zweite hat ja auch funktioniert, obwohl er auch schon zur 1.Zeit hätte runter fahren müssen, denn Luminosity war schon unter dem eingestellten Wert von 0.90

Also zum ich sage mal Produktivstatus stelle ich diese auch wieder auf irgendwas um die 22:00 Uhr.
Dazu mal die Frage, wenn ich diese jetzt auf 22 Uhr stelle, dann funktioniert das ganze System also auch nicht mehr nach 22 Uhr, oder wie muss ich das verstehen..?

Nee das wäre ja auch Quatsch, denn vorher ist er ja noch gar nicht unten...

EDITH://
also meine Logik wäre, der Rollladen ist runter gefahren egal welche Zeit auch immer und ich möchte nochmals raus gehen auf die Terrasse weil es eben noch schön ist draußen gerade jetzt wenn der Frühling/Sommer kommt.
Ich mache also auf und der Rollladen fährt hoch (später auch noch das Terrassenlicht auf EIN)
Viel später ich gehe wieder rein mache zu und der Rollladen geht runter und das Licht wieder aus...  ;)
Schön wär's  :D

Und ja die Zeit 19:51:57 ist zustande gekommen weil ich ewig herum probiert habe...
Mal schauen wie das heute aussieht, die Readings sind ja bis jetzt von 14:13 Uhr da werde ich mal alles in Ruhe lassen..
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

maxritti

Das mit den 22:00 ist korrekt.
Nach dem Zeitraum reagiert das DOIF natürlich nicht mehr.
Jetzt könnte man ja sagen, dann nim doch den Zeitraum einfach raus.
Aber dann gab es das Problem, dass morgens die Rolläden am Schalter hoch gefahren wurden, das nächste mal der Lichsensort gemeldet hat, dass es dunkel ist und schon gingen die Rolläden wieder runter. Das war für mich der Grund dieses Zeitintervall einzuführen.
Auch mit dem Punkt, dass es nach 22 Uhr nicht mehr klappt.
Bislang gab es da bei uns noch keinen Einspruch der Regierung :)

Allerdings so richtig schön ist es in der Tat nicht. Denn damit kommt genau das von Dir geschilderte Problem. Dass die nach dem Ende des Zeitbereichs nicht mehr runterfahren.

Irgendwie drehe ich mich da immer im Kreis.
Vielleicht finden wir da ja irgendwann mal eine gemeinsame Lösung  ;)

moonsorrox

OK, jetzt haben wir auch einen Nenner...!  ;) dann habe ich das absolut verkehrt verstanden und somit auch total umsonst herum probiert...

Mir geht es ja darum das der Rollladen Abends (am liebsten nach Sunset) oder eben nach der von Hand eingestellten Zeit so wie bei deinem DOIF runter fährt...!

Ausgangslage der Rollladen ist unten:
Ich kann Abends egal wann die Terrassentür öffnen - der Rollladen geht wieder hoch und bei mir das Terrassenlicht geht an.
Erst wenn ich wieder rein gehe und die Terrassentür wieder schließe geht der Rollladen runter und das Licht wieder aus...

Das wäre die ideale Konstellation welche ich mir vorgestellt habe.
Erklärung dazu, auch im Sommer fährt der Rollladen zwar spät aber auch irgendwann gegen 22 Uhr runter, jetzt bin ich nicht da und komme erst nach Hause nachdem der Rollladen runter gefahren ist, oder wie auch immer und möchte mich noch gern auf die Terrasse setzen... Jetzt kommt mein DOIF ins Spiel und macht alles wie ich es in meiner Vorstellung beschrieben habe  ;)
Das wäre super


Dann werde ich zumindest mal für heute Abend, das DOIF testen ob es vor der eingestellten Zeit den Rollladen hoch und runter fährt..
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

#11
So die erste Erkenntnis ist da... da es 18.15 Uhr war und dieses meine 1. Zeit zum runter fahren ist.
Trotz das der "e_Aussensensor_Terrasse_luminosity 0.07" anzeigt fährt der Rollladen nicht runter, aktualisiert wurde er ja heute Mittag gegen 14 Uhr.
Jetzt habe ich mal die 2. Zeit verändert und zu dieser fährt er auch runter...

Weiter geht es mit dem Test, ich nehme die zweite Zeit wieder hoch und probieren den Fall mit dem Türkontakt.

EDITH://
funktioniert auch nicht also der Rollladen fährt nicht mehr runter...  :-\
Ich habe jetzt mal das DOIF abgeändert damit der Rollladen überhaupt mal runter fährt und werde mal schauen, was er morgen früh macht.

Bearbeiten muss ich jetzt erst mal das Problem das der Rollladen nicht bei der ersten Zeit runter fährt wenn der Helligkeitswert erfüllt ist
Fehler gefunden, weiter unten beschrieben
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

maxritti

Interessant wäre dann ein list des DOIFs nach 18:15 gewesen, aber bevor du andere Werte geändert hast.
Müsstest du dann vielleicht morgen noch mal machen.

moonsorrox

so ich werd doof aber ein kleiner feiner Fehler meinerseits  ;)
jetzt geht das auch das er zur 1. Zeit runter fährt

Schau mal auf mein DOIF ganz am Anfang..!!!
Zitat([RolloWZmodus] eq "FHEM"
and [WZ_TerrasseTuer] eq "closed"

und so muss es sein

Zitat([RolloWZmodus] eq "FHEM"
and [WZ_TerrasseTuer:state] eq "closed"

Das war erst mal das eine... :D
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

maxritti

Schon komisch.
Meine Türkontakte werden ja korrekt mit [EG_ku_TK_Strasse] eq "closed" ausgewertet.  :o