Hallo,
ich habe mir ein DOIF gebaut, was morgen beim Erreichen einer bestimmten Helligkeit der Wetterstation meine Rolläden automatisch öffnet. Der Code sieht so aus:
define DOIF rolladen_morgens ([wetterstation_helligkeit] > 10 and [rollo_lounge]>0 ) (set rollo_lounge value 0 g1)
Das funktioniert wunderbar. Nur hat meine Frau dann tagsüber den Rolladen mal per Hand, bzw. über den Taster geschlossen. Sowie der Rolladen unten war, wurde er automatisch sofort wieder geöffnet. Klar, es war ja heller als 10 Lux draußen.
Jetzt hab ich in der Wiki geschaut, wie ich so ein Befehl nur einmalig ausführen kann. Erst dachte ich, ich schreibe noch en Zeitfenster dazu. Aber das ist wahrscheinlich viel zu kompliziert gedacht.
Leider bin ich mir nicht sicher, was der richtige Weg ist. Muss ich noch ein DOELSE am Ende anfügen oder doch mit attr do always arbeiten ? Das hab ich nicht ganz kapiert.
Würde mich freuen, wenn mir jemand einen Tipp geben kann ?
Grüße,
Visionsurfer
hi,
probier mal folgendes:
define rolladen_morgens DOIF ([{sunrise()}-({sunrise()}+7200)] and [wetterstation_helligkeit] > 10 and [rollo_lounge]>0 ) (set rollo_lounge value 0 g1)
ich hab mal ein Zeifenster von Sonnenaufgang bis 2 Stunden nach Sonnenaufgang genommen. Das Zeitfensterkannst du natürlich anpassen.
P.S.: erst Name, dann Modul;-)
Hi,
ok, werde ich probieren. Ich hatte gehofft das es vielleicht auch ohne Zeitfenster geht. In der Wiki steht ja auch einiges dazu. Nur bin ich mir unsicher, was das richtige ist.
Hab auch gesehen das es hier im Forum ein eigenen Bereich für DOIF gibt. Hätte ich vielleicht lieber dort schreiben sollen ?
Grüße,
Visionsurfer
Hallo,
In solchen Fällen ist ein Zeitfenster mit einer der besten Lösungen. Ein anderer wäre ein Dummy als Abfrage Device. Ich habe sowas für Mich. Der Dummy heißt Lichtautomatik und wenn ich in aus mache dann geht nur noch manuelles schalten.
da liest damian auf jeden fall mit...
könnte man dann so machen:
define d_rollanden_hochgefahren dummy
define rolladen_morgens DOIF ([d_rollanden_hochgefahren dummy] = 0 and [wetterstation_helligkeit] > 10 and [rollo_lounge]>0 ) (set rollo_lounge value 0 g1, set d_rollanden_hochgefahren 1)
doelseif ([02:00]) (set d_rollanden_hochgefahren 0)
der dummy merkt sich quasi dass die rollanden hochgefahren wurden und wird nachts um 2 wieder zurückgesetzt (kann natürlich auch bei der abendroutine geschehenen, sofern du eine hast) und am nächsten morgen gehts wieder von vorne los
Gruß Michael
Hi,
alles klar. O.K. dann doch mit Zeitfenster.
Ich hatte nur gehofft quasi eine grundsätzliche Lösung zu finden, damit ich im Sommer nicht vielleicht irgendwelche Zeitfenster anpassen muss. Weil sich ja dort Helligkeit usw. einfach anders verhält.
Dann muss ich mal überlegen. Dummy oder Zeitfenster.
Grüße,
Visionsurfer
oder im DOIF einen weiteren set-Befehl einbauen, der das DOIF deaktiviert, so mit wait-Attribut, nachdem die Rollläden oben sind.... ?
so in der Art...
(set rollo_lounge value 0 g1) (set rolladen_morgens disable)
attr rolladen_morgens wait 0,60
und mit einem at in der Nacht wieder aktivieren...
Ginge das oder bin ich da auf dem Holzweg ?
wenn dann so:
(set rollo_lounge value 0 g1, set rolladen_morgens disable)
mehrere Befehle sind Kommagetrennt.
die Idee mit dem at wäre möglich. Nur wenn man schon ein zweites device anlegt, dann würde ich immer den dummy bevorzugen, da der aktuelle Wert des dummies im Reading von dem DOIF vorkommt und man so direkt überprüfen kann. Bei dem AT müsste man sich dann erst das device aufrufen, um zu gucken, wann ausgelöst wird.
bzw man könnte den dummy auch weglassen und mit setreading einfach dem DOIF ein weiteres Reading hinzufügen, was dann durch DOELSEIF wieder zurückgesetzt wird...
Was spricht gegen
define <name> DOIF (<trigger>)(set <rollo>)DOELSEIF([00:00])
ohne do always bleibt der state bis Mitternacht auf cmd_1 stehen auch wenn der Rolladen manuell gefahren wird
top, ist natürlich noch eleganter ;-)
Moin,
also ich bin immer noch auf der Suche nach der besten Lösung und muss das Thema noch mal ausgraben.
Normalerweise wollte ich das wie hier beschrieben machen:
define <name> DOIF (<trigger>)(set <rollo>)DOELSEIF([00:00])
Jetzt hab ich aber zum Test auch eine Abendroutine angelegt. Wenn die Wetterstation weniger als 200 Lux meldet, schließen sich die Rollos. Heute morgen kam dann das böse erwachen, weil es quasi erst mal eine Endlosschleife gab.
Ab 10 Lux sollen sie öffnen, aber unter 200 schließen. Somit sind die Rollos die ganze Zeit hin und her gefahren. Das muss ich also noch optimieren.
Bzw. wahrscheinlich ist es in so einem Fall, wirklich am besten mit einem Zeitfenster zu arbeiten ? Einmal für Abends und einmal für morgens. Blöd ist nur, das sich über die Jahreszeiten hinweg, das Zeitfenster ändern. Bzw. ich müsste es realtiv groß gestalten. Aktuell öffnen die Fenster um kurz vor 7 Uhr, bei 10 Lux. Wenn ich das Zeitfenster jetzt von 6-8 Uhr mache, ist es aktuell ok. Im Sommer sieht das natürlich anders aus. Klar kann man das Zeitfenster dann größer machen. Wenn ich dann aber aus welchem Grund auch immer genau in diesem Zeitfenster gerade ein Rollo per Hand steuern will, hab ich wieder das Problem das es von alleine wieder öffnet.
Hmmm, da beißt sich die Katze in den Schwanz :)
Oder doch mit Sunset Werten arbeiten ?
Hmmm, was ist wohl der beste Weg um eine hohe Automation zu haben, aber trotzdem noch manuell eingreifen zu können ohne das die Automation durcheinander kommt ?
Grüße,
Visionsurfer
Versuch mal bitte zu beschreiben wann morgens gefahren werden soll und wann abends.
Hi,
alles klar.
Also eigentlich hab ich im Kopf das ich das alles mit meiner Wetterstation verbinde. Also so mach ich es ja schon aktuell.
Also morgens öffen, wenn Wetterstation Lux größer als 10
Abends schließen, wenn Lux kleiner als 200.
Grundsätzlich das ja nicht soooo schwer. Ich möchte aber in eventuellen Situationen dann tagsüber das Rollo vielleicht per Hand fahren. Morgen und Abends soll er immer in eine gewissen Position fahren die ich vorgeben.
So ist das Ziel.
Grüße,
Visionsurfer
Zitat von: visionsurfer am 01 November 2016, 15:57:21
Hi,
alles klar.
Also eigentlich hab ich im Kopf das ich das alles mit meiner Wetterstation verbinde. Also so mach ich es ja schon aktuell.
Also morgens öffen, wenn Wetterstation Lux größer als 10
Abends schließen, wenn Lux kleiner als 200.
Grundsätzlich das ja nicht soooo schwer. Ich möchte aber in eventuellen Situationen dann tagsüber das Rollo vielleicht per Hand fahren. Morgen und Abends soll er immer in eine gewissen Position fahren die ich vorgeben.
So ist das Ziel.
Grüße,
Visionsurfer
di DOIF ([von_morgens - bis_morgnes] and [wetter:lux]>10) (set ...) DOELSEIF ([von_abends - bis_abends] and [wetter:lux]<200) (set ...)
attr di wait 600:600
10-Minuten Zeitverzögerung ist gegen Helligkeitsschwankungen.
Manuelle Steuerung kann unabhängig davon weiter genutzt werden - es wird morgens einmal und abends einmal geschaltet.
Das Attribut do always darf nicht gesetzt sein.
Gruß
Damian
Hey Damian,
vielen Dank. Alles klar. Schau ich mir an.
Könnte man die Zeit auch weg lassen ? Weil eigentlich ist ja man Wert, wann etwas passieren soll, der Faktor Helligkeit.
Wobei quatsch, jetzt wo ich gerade selbst drüber nachdenke, muss ich ja wohl die Zeit mit einbauen, weil sonst kommt wieder Endlosschleife. Weil sich ja 10 Lux und 200 Lux beißt. Eventuell würde man es nur ohne Zeit hinbekommen (ich meine die Zeit morgens und Abends, nicht das attr), wenn ich die Werte noch etwas näher zusammen bringe. Oder gleich sage: morgens auf, wenn 200 Lux erreicht, Abends schließen, wenn 200 Lux unterschritten. Dann dürfte es keine Endlosschleife geben und ich könnte die Zeit rausnehmen, oder ?
Bin ich da auf dem Holzweg ?
Grüße,
Visionsurfer
Hi,
sorry ich hab leider noch eine 2. Frage. Weil du hast ja geschrieben, es kann weiterhin manuell geschaltet werden.
Wenn ich aber z.B. die Zeit morgens von 6-9 Uhr setze. Dann kann doch in der Zeit nicht manuell geschaltet werden. Wenn ich um 8.30h das Rollo dann manuell aus welchem Grund auch immer, per Hand schließe, würde es doch sofort wieder öffnen ? Weil Lux ist größer als 10 und es wäre noch in dem Zeitfenster.
Oder verstehe ich da nur was nicht ?
Grüße,
Visionsurfer
Zitat von: visionsurfer am 02 November 2016, 19:40:42
Hi,
sorry ich hab leider noch eine 2. Frage. Weil du hast ja geschrieben, es kann weiterhin manuell geschaltet werden.
Wenn ich aber z.B. die Zeit morgens von 6-9 Uhr setze. Dann kann doch in der Zeit nicht manuell geschaltet werden. Wenn ich um 8.30h das Rollo dann manuell aus welchem Grund auch immer, per Hand schließe, würde es doch sofort wieder öffnen ? Weil Lux ist größer als 10 und es wäre noch in dem Zeitfenster.
Oder verstehe ich da nur was nicht ?
Grüße,
Visionsurfer
Nein. In der Commandref zu DOIF steht z. B.
ZitatDas DOIF-Modul arbeitet mit Zuständen. Jeder Ausführungszweig DOIF/DOELSEIF..DOELSEIF/DOELSE stellt einen eigenen Zustand dar (cmd_1, cmd_2, usw.). Das Modul merkt sich den zuletzt ausgeführten Ausführungszweig und wiederholt diesen standardmäßig nicht. Ein Ausführungszweig wird erst dann wieder ausgeführt, wenn zwischenzeitlich ein anderer Ausführungszweig ausgeführt wurde, also ein Zustandswechsel stattgefunden hat.
Ohne das Attribut do always, verbleibt das Modul im gleichen Zustand. Den Zustand des Rollos hast du abgesehen davon gar nicht abgefragt, warum sollte das Modul etwas tun, es hat ja keine Ahnung, was mit dem Rollo sonst passiert.
Ich persönlich bevorzuge die Lösung über einen Dummy. Der DOIF-Runterbefehl abends setzt diesen auf "Nacht", wird aber nur ausgeführt, wenn der Dummy auf Tag steht. Der DOIF-Raufbefehl wird nur beim Dummy-State eq Nacht ausgeführt und setzt in auf Tag.
Somit ist manuelles Fahren sowohl Abends wie auch morgens / tags gesichert.