DOIF nur einmal am Tag ausführen

Begonnen von visionsurfer, 26 Oktober 2016, 22:16:01

Vorheriges Thema - Nächstes Thema

visionsurfer

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


l2r

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;-)
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

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

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

l2r

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
Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

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

kumue

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 ?

l2r

#7
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...
Wissen ist Macht.
Ich weiß nix.
Macht nix.

igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

l2r

Wissen ist Macht.
Ich weiß nix.
Macht nix.

visionsurfer

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

igami

Versuch mal bitte zu beschreiben wann morgens gefahren werden soll und wann abends.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

visionsurfer

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

visionsurfer

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