DOIF: Rollladensteuerung funktioniert nur teilweise...

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

Vorheriges Thema - Nächstes Thema

moonsorrox

#15
naja auf jeden Fall geht das nur so... ohne "state" geht gar nichts, vllt weil sie relativ neu sind und evtl. von Homematic was geändert wurde in der Firmware (meine haben Firmware 2.4)

Mal ne andere Frage, wenn ich ein Kommando für das Licht dazu setzen möchte
{fhem("set RollladenWZ on,set M3_LichtTerrasse 1")} das macht er nicht, wie muss ich das schreiben in den Klammern..?
Habe auch einige Versuche aber es geht auch nicht so
{fhem("set RollladenWZ on","set M3_LichtTerrasse 1")}

Diesen Fehler bekommen ich
di_rollladenWZ_TK_LichtTerrasse: {if (ReadingsVal("RollladenWZ", "state", "---") ne "on") {fhem("set RollladenWZ on,set M3_LichtTerrasse 1")}}: Unknown argument on,set,
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

Zitat von: moonsorrox am 24 Februar 2015, 20:03:42
naja auf jeden Fall geht das nur so... ohne "state" geht gar nichts, vllt weil sie relativ neu sind und evtl. von Homematic was geändert wurde in der Firmware (meine haben Firmware 2.4)

Meine sind auch mit 2.4 unterwegs  ;)

Zitat von: moonsorrox am 24 Februar 2015, 20:03:42
Mal ne andere Frage, wenn ich ein Kommando für das Licht dazu setzen möchte
{fhem("set RollladenWZ on,set M3_LichtTerrasse 1")} das macht er nicht, wie muss ich das schreiben in den Klammern..?
Habe auch einige Versuche aber es geht auch nicht so
{fhem("set RollladenWZ on","set M3_LichtTerrasse 1")}

Diesen Fehler bekommen ich
di_rollladenWZ_TK_LichtTerrasse: {if (ReadingsVal("RollladenWZ", "state", "---") ne "on") {fhem("set RollladenWZ on,set M3_LichtTerrasse 1")}}: Unknown argument on,set,
Auch so eine Sache für sich.

Erstellst Du so ein DOIF:

define di_Test DOIF ([du_Schalter:state] eq "on") ({fhem("set du_Eins ein");; fhem("set du_Zwei ein")})

Steht nachher im DEF des DOIFs  nur noch ein ; zwischen den beiden fhem(..).
Wird das DOIF getriggert, so kommen in der Tat Fehlermeldung:

Unknown command {fhem("set, try help.

Gehst Du in dem Device in die DEF und machst aus dem einen ; ein doppeltes ;; und speicherst das.
Erscheinen keine Fehlermeldungen mehr und die Befehle werden beide ausgeführt.

Eventuell findet sich hier ein stiller Mitleser, welcher das erklären kann?

moonsorrox

#17
ZitatErstellst Du so ein DOIF:

define di_Test DOIF ([du_Schalter:state] eq "on") ({fhem("set du_Eins ein");; fhem("set du_Zwei ein")})

Steht nachher im DEF des DOIFs  nur noch ein ; zwischen den beiden fhem(..).
Wird das DOIF getriggert, so kommen in der Tat Fehlermeldung:

Unknown command {fhem("set, try help.
genau so hatte ich es probiert und frage nicht wieviel Varianten noch, aber jetzt habe ich es mit den zwei ;; und es geht...

Ich sage mal jetzt ist das Kind geboren, nun kann es reifen... ;)

Also mein Stand ist jetzt - bis auf morgen früh, dass warte ich ab - es funktioniert
1. der Rollladen fährt zur 1. Zeit runter mit dem Helligkeitswert
2. sobald ich den Terrassengriff "öffene" fährt der Rollladen hoch und das Licht geht an
3. sobald ich den Terrassengriff "schließe" fährt der Rollladen wieder runter und das Terrassenlicht geht aus

mit das "reifen" meine ich...
da es ja jetzt nur solange geht bis zur zweiten Zeit... die man ja jederzeit auf 0 Uhr stellen könnte, aber dann müsste man ewig (besonders im Sommer) die erste Zeit nach stellen da es ja spät dunkel wird und niemand möchte ja das die Rollläden um 0 Uhr erst runter fahren..!

Jetzt müsste es noch die Variante geben (vllt. mit einem weiteren Dummy), da ja das ganze Prozedere nur bis zur zweiten eingestellten Zeit funktioniert, welches diese Zeit vorgibt so das man jeder Zeit Abends um 22 Uhr noch mal auf die Terrasse gehen kann und sich dann eben die Terrassenbeleuchtung einschaltet und der Rollladen hoch fährt.

Vielleicht hat hier jemand (ein Mitleser ;)) einen noch besseren Einfall wie man dieses bewerkstelligen könnte, oder gar noch besser machen kann...

Code Stand jetzt:
([RolloWZmodus] eq "FHEM"
and [WZ_TerrasseTuer:state] 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");; fhem("set M3_LichtTerrasse 0")}})
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");; fhem("set M3_LichtTerrasse 1")}})
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

Aber ist es jetzt nicht auch so, dass wenn du im hellen die Türe öffnest und dann wieder schließt, der Rollo runter fährt?

Zumindestens meine ich, dass die beiden DOELSEIF bei dir das doch machen müssten oder?

moonsorrox

#19
mmh, gute Frage, dass werde ich morgen am Tage mal testen...

Sollte es der Fall sein werde ich die Schaltung komplett auseinander nehmen und dieses mit weiteren DOIF und Dummys machen wo ich dann vorher unterscheide, mit einem Dummy - Manuell,Dämmerung,Aus usw. ob ich eine manuelle Handschaltung (Zeiten so wie jetzt einstellbar mache) oder eben über ein Dummy mit der Variante Dämmerung.
Da lasse ich das Teil bei Dummy - Dämmerung, dann über fest eingestellte Zeit morgens hoch fahren und Abends mit Sunset runter und eben sobald der Türgriff betätigt wird Rollladen hoch oder eben wieder runter usw.
Bei Dummy - Manuell, dann so wie es von dir erstellt wurde...

Muss doch irgendwie gehen... ;)
Hab oben jetzt mal den Code vom jetzigen Stand eingefügt... :D

Der Nachteil an der jetzigen Situation ist, machst du den Türgriff nach der zweiten eingestellten Zeit auf, fährt der Rollladen nach oben, aber nicht wieder runter beim schließen... das war ja die Tage mein Problem... ;) Probier das mal bei dir... sollte so sein.

Reading aus dem list, sieht momentan so aus... weil die Zeiten im Code immer etwas irritieren:
Readings:
     2015-02-24 20:48:19   cmd_event       WZ_TerrasseTuer
     2015-02-24 20:48:19   cmd_nr          1
     2015-02-24 21:14:32   e_Aussensensor_Terrasse_luminosity 0
     2015-02-24 20:48:19   e_WZ_TerrasseTuer_state closed
     2015-02-24 20:48:19   state           cmd_1
     2015-02-24 20:32:15   timer_1_c1      25.02.2015 18:15:00
     2015-02-24 20:32:15   timer_2_c1      24.02.2015 21:20:00
     2015-02-24 20:32:15   timer_3_c1      24.02.2015 21:20:00
     2015-02-24 20:32:15   timer_4_c2      25.02.2015 08:15:00|8
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

#20
Zitat von: moonsorrox am 24 Februar 2015, 21:26:09
mmh, gute Frage, dass werde ich morgen am Tage mal testen...

Sollte es der Fall sein werde ich die Schaltung komplett auseinander nehmen und dieses mit weiteren DOIF und Dummys machen wo ich dann vorher unterscheide, mit einem Dummy - Manuell,Dämmerung,Aus usw. ob ich eine manuelle Handschaltung (Zeiten so wie jetzt einstellbar mache) oder eben über ein Dummy mit der Variante Dämmerung.
Da lasse ich das Teil bei Dummy - Dämmerung, dann über fest eingestellte Zeit morgens hoch fahren und Abends mit Sunset runter und eben sobald der Türgriff betätigt wird Rollladen hoch oder eben wieder runter usw.
Bei Dummy - Manuell, dann so wie es von dir erstellt wurde...

Muss doch irgendwie gehen... ;)

Hab oben jetzt mal den Code vom jetzigen Stand eingefügt... :D
Nur mal paar Tipps, ohne mich in die Einzelheiten zu vertiefen:

1. Soll ein Fensterschalter in einer bestimmten Zeit funktionieren, ohne, dass die Zeiten selbst triggern und damit das Hoch- bzw. Runterfahren beeinflussen, kann man Fragezeichen angeben:

...[?20:00-22:00] and [Kontakt] eq "closed"...

zusätzlich kann man mit or Zeiten ohne Fragezeichen kombinieren, die tatsächlich triggern und damit den Rolladen bewegen. Siehe Beispiele in der Commandef zu DOIF.

2. Statt fester Zeiten, kann man Sonnenaufgang- bzw. Sonnenuntergangsfunktionen nutzen. Siehe Beispiele in der Commandref zu DOIF.

3. Im Ausführungsteil von DOIF werden standardmäßig FHEM-Befehle ausgeführt, also

statt umständlich:

({fhem("set du_Eins ein");; fhem("set du_Zwei ein")}) anzugeben, lässt sich so etwas mit

(set du_Eins ein, set du_Zwei ein)

lösen. So etwas steht direkt in den ersten Beispielen der deutschen Commandref zu DOIF.

Diese wird hier offenbar nicht intensiv genug gelesen, ansonsten hätte man sich viel Zeit beim rumprobieren gespart ;)

Gruß

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

maxritti

Naja, sagen wir es mal so.
Das angegebene Konstrukt ist auf meinem Mist gewachsen.
Und ja ich habe die CommandRef mehrfach gelesen. Augenscheinlich noch nicht wirklich richtig verinnerlicht.  :(

Allerdings ist es mMn auch nicht so wirklich einfach die Beispiele aus der CommandRef in die produktive Umgebung umzusetzen.
Zumindest bei mir ist der Akzeptanzfaktor der Rolladensteuerung während der umsetzung recht stark gesunken.

Es klappte soweit alles zufriedenstellend, bis ich zu dem Thema gekommen bin, dass es doppelte Schaltungen für die Rolladenaktoren gab.
Da habe ich diverse Versuche (und ja, es waren Ideen aus der CommandRef) versucht umzusetzen.
Folgende Ergebnisse konnte ich berichten:

- Anstatt weniger unnütze Schaltungen, gab es wesentlich mehr
- Ein anderes Mal ging ein Rollo abends runter, morgends aber nicht mehr hoch
- Von den insgesamt 9 Rollos gingen aus meiner Sicht fast eine zufällige Anzahl von Rollos nicht mehr runter, wo sie es hätten tun sollen
- Türkontakte, welche einen geschlossenen Rollo hoch gehen lassen sollten und bei "closed" wieder schliessen sollten, versagten auch ihren Dienst

Also eine vielzahl an Problemen. Wenn ich an einem Rollo rumprobierte und es für gut befunden habe, habe ich dies auf einen weiteren übertragen.
Leider aber immer wieder mit einem der o.a. Probleme.
Und das eben nur, wegen möglicher doppelter Schaltvorgänge.
Daher habe ich dann im Ausführungsteil dieses if-Konstrukt ins Leben gerufen, welches hier genannt wurde.

Finde ich auch nicht wirklich schön, aber funktioniert momentan halt wie gewünscht.
Hast du dazu eine Idee, wie ich das mit den doppelten Schalvorgängen in den Griff bekommen kann?

Hier mal ein Beispiel, wie ich es mit den if in dem Ausführungsteil gelöst habe:

([du_Rollo_Master] eq "an" and ([EG_dr_TS_Terrasse:luminosity] < [du_Rollo_Luminosity_ru] and
[du_Rollo_Art] ne "Weihnachten" and
[{ReadingsVal("du_Rollo_Zeit_ru_start", "state", "22:00:00")}-{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}])
or [{ReadingsVal("du_Rollo_Zeit_ru_ende", "state", "22:00:00")}])
  ({if (ReadingsVal("EG_ku_RO_StrasseLinks", "state", "---") ne "off") {fhem("set EG_ku_RO_StrasseLinks off")}})
DOELSEIF ([du_Rollo_Master] eq "an" and ([{ReadingsVal("du_Rollo_Zeit_ho", "state", "10:00:00")}|8] or
[{ReadingsVal("du_Rollo_Zeit_ho_WE", "state", "10:00:00")}|7]))
  ({if (ReadingsVal("EG_ku_RO_StrasseLinks", "state", "---") ne "on") {fhem("set EG_ku_RO_StrasseLinks on")}})

moonsorrox

also ich unterstütze auch die Meinung von maxritti...
Das DOIF ein tolles Modul ist, wissen wir ja schon länger, aber das heißt ja nicht das wir es alle verstehen..! ;)

Ich lese ständig in der commandref und lege mir die Beispiele die bei mir passen könnten auch immer gleich ins notepad++ dazu um auch alles möglichst so zu erstellen und richtig zu machen, diesmal habe ich damit meine Probleme, weil diese vielen Klammern verwirren auch.
Nichts desto trotz gefällt mir die Rollladensteuerung von maxritti aus dem Wiki in einigen Ansätzen sehr gut, aber ich muss es eben auf meine Bedürfnisse anpassen... Ok soviel dazu

@maxritti
Jetzt zu den Live Ergebnissen die heute morgen ernüchternd waren...
was vorher funktionierte, geht nicht mehr der Rollladen fuhr heute morgen nicht hoch  :-\, soviel also auch zu den Erfahrungen die man sammelt, geht also dir nicht alleine so...

Also heißt es erst mal wieder ran setzen und Fehler suchen...

Ich werde vorallem versuchen die Klammern, welche Damian gestern erwähnte mal etwas auflockern ;)
Mal schauen was ich da hinbekomme.

Das was ich da gestern schon schrieb, das eben Abends nach der zweiten Zeit die Rollläden zwar hoch fahren, aber eben nicht mehr runter...
Hast du das mal gestestet bei dir..?

Wie gesagt für den Fall, gerade jetzt im Sommer wenn man Abends nochmal raus will aber der Rollladen schon unten ist...  :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

moonsorrox

da ich doch erhebliche oben genannte Probleme habe, nun ein neuer Ansatz.

Als erstes habe ich ein neues DOIF erstellt welches also mit Dummys gesteuert werden soll.
1. Dummy (RolloWZmodus) stellt die Art ein bei mir "FHEM,Beschattung,Aus"
2. Dummy (du_RolloZeit_hoch) mit einstellbare Zeit für die Wochentage
3. Dummy (du_RolloZeit_hoch_WoE) mit einstellbarer Zeit für das Wochenende
4. Dummy (Tageslicht) stellt das Reading als state "hell" oder "dunkel"
5. 2 weitere Dummys die den Status hell oder dunkel setzen
6. ein Türkontakt mit open, close, tilted

Das DOIF sieht bisher so aus:
([RolloWZmodus] eq "FHEM"
and ([{ReadingsVal("du_RolloZeit_hoch", "state", "10:00:00")}|12345]
or [{ReadingsVal("du_RolloZeit_hoch_WoE", "state", "10:00:00")}|06])) (set RollladenWZ on)
DOELSEIF ([RolloWZmodus] =~ "FHEM|Beschattung"
and [WZ_TerrasseTuer:state] eq "closed"
and ([{sunset("CIVIL",-600,"16:35","22:10")}|0123456])) (set RollladenWZ off)


Sollte also so gehen..!?
dass morgens der Rollladen zur eingestellten Zeit hochgefahren wird und Abends, wenn die Tür geschlossen ist auch wieder runter fährt.

Jetzt die zusätzliche Aufgabe. Der Rollladen ist Abends runter gefahren.
Nun möchte ich raus gehen und signalisiere mit dem Türkontakt "open" dem Rollladen jetzt wieder hoch fahren (gleichzeitig Licht Terrasse an) Dummy "dunkel" wird berücksichtigt damit eben das Licht auch nur bei Dunkelheit angeht.
Beim schließen des Türgriffes dann Rollladen runter Licht aus.

Jetzt weiß ich nicht genau wo ich den Ansatz für das Öffnen, nachdem die Rollläden runter gefahren sind einsetzen soll, ob nun als "or" Bedingung oder als DOELSEIF, dass wenn ich jetzt mit dem Dummy bei "dunkel" den Rollladen wieder hoch fahre und beim schließen wieder runter fahre..?


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

Brockmann

Ich stelle mal folgenden, etwas anderen Denkansatz zur Diskussion. Ist bewusst in "Pseudocode" gehalten, weil nicht getestet und die Perl-Funktionen zum Ermitteln von Uhrzeiten verwende ich so nicht.


DOIF (([Abendsrunter-Morgenhoch|Werktags] or [Abendsrunter-Morgenhoch|Wochenende]) and [Terassentür] eq "zu")
(
fahre Rolladen runter,
IF(Terassenlicht eq "ein")(schalte Terassenlicht aus)
)
DOELSE
(
fahre Rolladen hoch,
IF(Tageslicht eq dunkel)(schalte Terassenlicht ein)
)


Ich will nicht behaupten, dass das jetzt die schlüsselfertige Lösung ist, aber vielleicht bringt sie euch ja voran.
Eine Bedingung zur Behandlung von Dämmerung könnte vermutlich man als zusätzliches DOELSEIF einfügen. Bei Modus "Aus" würde ich das DOIF disablen (ggf. über ein zusätzliches DOIF).

moonsorrox

#25
Zitat von: Brockmann am 25 Februar 2015, 18:43:22
Ich stelle mal folgenden, etwas anderen Denkansatz zur Diskussion. Ist bewusst in "Pseudocode" gehalten, weil nicht getestet und die Perl-Funktionen zum Ermitteln von Uhrzeiten verwende ich so nicht.


DOIF (([Abendsrunter-Morgenhoch|Werktags] or [Abendsrunter-Morgenhoch|Wochenende]) and [Terassentür] eq "zu")
(
fahre Rolladen runter,
IF(Terassenlicht eq "ein")(schalte Terassenlicht aus)
)
DOELSE
(
fahre Rolladen hoch,
IF(Tageslicht eq dunkel)(schalte Terassenlicht ein)
)

ja so in etwa, sieht sehr logisch aus  ;)

Zitat von: Brockmann am 25 Februar 2015, 18:43:22
Ich will nicht behaupten, dass das jetzt die schlüsselfertige Lösung ist, aber vielleicht bringt sie euch ja voran.
Eine Bedingung zur Behandlung von Dämmerung könnte vermutlich man als zusätzliches DOELSEIF einfügen. Bei Modus "Aus" würde ich das DOIF disablen (ggf. über ein zusätzliches DOIF).

also das mit dem Terrassenlicht, soll nur zusätzlich durch den Türkontakt beim öffnen/schließen statt finden.
Ich bin ja nicht draußen sage ich mal.. ;)
Sonst wird dieses Licht bei mir durch eine eigne Schaltung bearbeitet.

Das mit dem Aus, hätte ich ganz gerne mal näher erklärt (habe ich mir schön öfter mal den Kopf zerbrochen), denn bisher habe ich einfach nur den Dummy "Aus" mode nicht abgefragt, alle Bedingungen waren immer mit einem Status bei mir verknüpft, also FHEM, Dämmerung oder Zufall oder oder

So wie oben dragestellt arbeitet mein DOIF jetzt erst mal... kommt nur die Öffnen Geschichte jetzt mit rein und nur hier soll das Licht eingeschaltet werden aber das mit dem Licht ist eigentlich nicht das Problem das verbinde ich eben mit Rollladen Auf und Zu (set RollladenWZ on, set TerrassenLicht ein) und eben auch aus...
Aber der Denkansatz ist schon OK ich werde mich da mal mit befassen also doch eher DOELSEIF anstatt ein "or"

Achso noch... die Bedingung Dämmerung habe ich in einem extra DOIF, wäre evtl. auch eine Variante die mit rein zu bringen. Die sieht bei mir genauso aus wie die Bedingung FHEM nur das noch eine Temperatur aus der DOIF commandref eingefügt ist, wo die Rollläden morgens bei einer Temperatur ich sage mal >26 Grad nur kurz auf 15% fahren


so ich bin jetzt erst mal weg, bis morgen  :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

Brockmann

Zitat von: moonsorrox am 25 Februar 2015, 19:02:30
Das mit dem Aus, hätte ich ganz gerne mal näher erklärt (habe ich mir schön öfter mal den Kopf zerbrochen), denn bisher habe ich einfach nur den Dummy "Aus" mode nicht abgefragt, alle Bedingungen waren immer mit einem Status bei mir verknüpft, also FHEM, Dämmerung oder Zufall oder oder

Ich hatte Dich so verstanden, dass Du die Rolladensteuerung über einen Dummy auf "aus" jederzeit deaktvieren können möchtest. Meiner Meinung nach wäre die sauberste Lösung dafür ein zusätzliches DOIF, das bei Steuermodus eq "aus" das Rolladen-DOIF per Attribut disabled = 1 deaktiviert und bei Steuermodus ne "aus" das Rolladen-DOIF per Attribut disabled = 0 wieder aktiviert. Die Abfrage auf Steuermodus ne "aus" mit ins Rolladen-DOIF reinzunehmen macht es unübersichtlicher und komplexer und man handelt sich damit potenziell einige Seiteneffekte ein.

Generell halte ich es bei Deinem Szenario auch für sinnvoller, die Funktionalität auf verschiedene DOIFs zu verteilen, also etwa die Steuerung des Terassenlichts durch ein eigenes DOIF zu erledigen, das in einem DOELSEIF auf Terassentür eq "open" und Licht eq "dunkel" reagieren kann. Auch die Beschattungssteuerung ist eventuell in ihrem eigenen DOIF besser aufgehoben.

moonsorrox

#27
Zitat von: Brockmann am 26 Februar 2015, 10:40:41
Ich hatte Dich so verstanden, dass Du die Rolladensteuerung über einen Dummy auf "aus" jederzeit deaktvieren können möchtest. Meiner Meinung nach wäre die sauberste Lösung dafür ein zusätzliches DOIF, das bei Steuermodus eq "aus" das Rolladen-DOIF per Attribut disabled = 1 deaktiviert und bei Steuermodus ne "aus" das Rolladen-DOIF per Attribut disabled = 0 wieder aktiviert.
ja genau das wäre eine gute Sache, nur so hatte ich es bisher nicht
Werde ich mir mal bauen, denn das mit dem attr <device> disable 1 und 0 hatte ich nicht auf dem Schirm.. ;) gut das ich immer mal erinnert werde  :D

So habe ich das jetzt mal gemacht:
([RolloWZmodus] eq "Aus") (attr di_rollladenWZ_TK_LichtTerrasse disable 1)
DOELSEIF
([RolloWZmodus] ne "Aus") (attr di_rollladenWZ_TK_LichtTerrasse disable 0)


Zitat von: Brockmann am 26 Februar 2015, 10:40:41
Die Abfrage auf Steuermodus ne "aus" mit ins Rolladen-DOIF reinzunehmen macht es unübersichtlicher und komplexer und man handelt sich damit potenziell einige Seiteneffekte ein.
sehe ich auch so...! lieber ein kurze Abfrage einbauen wie immer alles voll zu stopfen  :) ist für mich auch übersichtlicher

Zitat von: Brockmann am 26 Februar 2015, 10:40:41
Generell halte ich es bei Deinem Szenario auch für sinnvoller, die Funktionalität auf verschiedene DOIFs zu verteilen, also etwa die Steuerung des Terassenlichts durch ein eigenes DOIF zu erledigen, das in einem DOELSEIF auf Terassentür eq "open" und Licht eq "dunkel" reagieren kann. Auch die Beschattungssteuerung ist eventuell in ihrem eigenen DOIF besser aufgehoben.
ja das hatte ich ja auch schon so, die Beschattung und auch das Licht habe schon in einem extra DOIF.
Die Beschattung ist ja eigentlich wie die normale Situation, aber eben jetzt wenn es Sommer wird stelle ich es um und sollte die Temperatur dann eben über dem einstellbaren Wert sein, fahren die Rollläden nur in eine Art Lüftungszustand (15%). Da nutze ich das relativ einfache Beispiel aus der commandref von Damian.
Hier kann man gut die Zeit und auch die Temperatur vorgeben und ich finde das genial einfach und vollkommen ausreichend...

define di_shutters DOIF ([sensor:temperature] > 26 and [11:00-{sunset_abs()}] (set shutters down) DOELSE (set shutters up)
attr di_shutters 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

moonsorrox

#28
Zitat von: Brockmann am 26 Februar 2015, 10:40:41
Meiner Meinung nach wäre die sauberste Lösung dafür ein zusätzliches DOIF, das bei Steuermodus eq "aus" das Rolladen-DOIF per Attribut disabled = 1 deaktiviert und bei Steuermodus ne "aus" das Rolladen-DOIF per Attribut disabled = 0 wieder aktiviert.
für mich noch einmal eine Verständnis Frage... welchen Vorteil hat es ein DOIF zu deaktivieren..?
anstatt es eben so wie ich es bisher gemacht in Konditionen nicht abzufragen, unten stehendes DOIF ist gemeint..

([RolloWZmodus] eq "Aus") (attr di_rollladenWZ_TK_LichtTerrasse disable 1)
DOELSEIF
([RolloWZmodus] ne "Aus") (attr di_rollladenWZ_TK_LichtTerrasse disable 0)

..und ist das so richtig gemacht, weil es ist ja einfach nur ein DOIF zum aktivieren oder deaktivieren.
 
Zitat von: Brockmann am 26 Februar 2015, 10:40:41
Auch die Beschattungssteuerung ist eventuell in ihrem eigenen DOIF besser aufgehoben.
das hatte ich bevor hier geschrieben wurde auch gedacht und nun gesehen es war ja noch gar nicht fertig..! :-\ Nun habe ich es nochmal bearbeitet und wollte mal fragen ob ihr mal drüber schauen könnt.
Ergibt das ein logisches DOIF, bin mir da grad nicht so sicher..!?

([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 ([Aussensensor_Terrasse:temperature] > 25
and [08:20-{sunset_abs("CIVIL",-600,"16:35","22:10")}])) (set RollladenWZ 15)
DOELSEIF ([WZ_TerrasseTuer:state] eq "closed") (set RollladenWZ off)


hier nochmal der Code in welchen ich den Türkontakt einbauen möchte, was mir grad gar nicht gelingt:
Die Vorgabe sollte sein, wenn ich irgendwann Abends noch einmal auf die Terrasse möchte und die Rollläden sind schon unten, sollen diese sich öffnen und wenn ich später wieder rein gehe schließen, dazu möchte ich ein Dummy nutzen welches den state "hell" und "dunkel" hat, dass dachte ich mir so, weil mir keine bessere Lösung einfiel..!

Diese sollte in meinen Code der durch ein Dummy den state "FHEM" oder "Beschattung" hat..
Der Code funktioniert auch soweit, aber mir fehlt der Ansatz dieses mit dem Türkontakt zu machen..!! :-\ Es funktionierte das hoch fahren der Rollläden, aber nicht mehr das runter fahren...

Nochmals verändert, sollte jetzt gehen..!?

([RolloWZmodus] eq "FHEM" 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] =~ "FHEM|Beschattung" and ([WZ_TerrasseTuer:state]) eq "closed" and ([{sunset("CIVIL",-600,"16:35","22:10")}|0123456]))
(set RollladenWZ off)
DOELSEIF ([RolloWZmodus] =~ "FHEM|Beschattung" and ([WZ_TerrasseTuer:state]) eq "open" and ([Tageslicht:state] eq "dunkel"))
(set RollladenWZ on,set M3_LichtTerrasse 1)
DOELSEIF ([RolloWZmodus] =~ "FHEM|Beschattung" and ([WZ_TerrasseTuer:state]) eq "closed" and ([Tageslicht:state] eq "dunkel"))
(set RollladenWZ off,set M3_LichtTerrasse 0)
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

dieda

Hallo in der Runde,

ich brauche auch nochmal eure Hilfe. Sicherlich ist es einfach nur ein nicht gesetztes Attribut...

Ich habe eine DOIF mit diesen Bedingungen erstellt:

Fahre runter wenn
- die Raumtemperatur über 23 Grad ist
- in der Zeit von 10 bis 22 Uhr
- wenn der Türkontakt geschlossen ist
- der Beschattungssensor hell meldet

ZitatInternals:
   CFGFN
   DEF        ([T_Wohnzimmer:temperature]>23 and [wz_Fensterkontakt_Tuer_links:state] eq "closed" and [wz_bs:state] eq "off 2.5" and [?10:00-22:00]) (set wz_gr_Rolladen Ab80) DOELSE (set wz_gr_Rolladen on)
   NAME       Beschattung_WZ
   NR         89781
   NTFY_ORDER 50-Beschattung_WZ
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2015-04-24 16:34:02   cmd_event       T_Wohnzimmer
     2015-04-24 16:34:02   cmd_nr          1
     2015-04-24 16:34:02   e_T_Wohnzimmer_temperature 23.6
     2015-04-24 16:33:17   e_wz_bs_state   off 2.5
     2015-04-24 16:34:02   state           cmd_1
     2015-04-24 16:20:31   timer_1_c1      25.04.2015 10:00:00
     2015-04-24 16:20:31   timer_2_c1      24.04.2015 22:00:00
   Condition:
     0          ReadingValDoIf('T_Wohnzimmer','temperature','')>23 and ReadingValDoIf('wz_Fensterkontakt_Tuer_links','state','') eq "closed" and ReadingValDoIf('wz_bs','state','') eq "off 2.5" and DOIF_time($hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
     0           T_Wohnzimmer wz_Fensterkontakt_Tuer_links wz_bs
     all         T_Wohnzimmer wz_Fensterkontakt_Tuer_links wz_bs
   Do:
     0          set wz_gr_Rolladen Ab80
     1          set wz_gr_Rolladen on
   Helper:
     last_timer 2
     sleeptimer -1
   Internals:
   Itimer:
   Readings:
     0           T_Wohnzimmer:temperature wz_Fensterkontakt_Tuer_links:state wz_bs:state
     all         T_Wohnzimmer:temperature wz_Fensterkontakt_Tuer_links:state wz_bs:state
   Realtime:
     0          10:00:00
     1          22:00:00
   State:
   Time:
     0          10:00:00
     1          22:00:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Trigger:
Attributes:
   do         always

Dies ist die jetzige Definition. Allerdings triggert das DOIF immer jetzt wenn der Laden oben ist und will rauffahren und wenn er zu 80 % unten ist auch fleißig runter.

Komponenten:
Sensoren und Aktoren: FS20, Max!, Zigbee, Zwave
IODev:  Cul1101, MaxLan, ZWAVE, Deconz
Router: KD-Fritte (6360)
Sonstiges: Raspberries,  1x LMS,1 FHEM, 1 x zum Testen,  Logitech-Clients,  Onkyo, SamsungTV, Squeezebox, TabletUIs