Hauptmenü

Rollladen runterfahren

Begonnen von michaelapp, 25 Juni 2016, 11:31:47

Vorheriges Thema - Nächstes Thema

michaelapp

Hallo zusammen,

ich lasse meine Rollläden zu gewissen Uhrzeiten runter und hochfahren. An der Terrassentüre habe ich einen Türkontakt angebracht der das Runterfahren verhindert wenn wir auf der Terrasse sitzen und die Türe auf ist.

Wenn wir rein gehen und die Türe geschlossen wird möchte ich gerne den Rollladen runterfahren lassen.

Ich habe es mit diesem Code probiert

define Rolle notify Tuer_Kontakt:closed {if ((Value("Tuer_Kontakt") eq "closed") && (Value("RL_FLUR_TUE") eq "on") && (>= "10:00" && < "12:00")) {fhem ("set RL_FLUR_TUE down");;}}

den ich bis auf

(>= "20:00" && < "24:00")

schon im Einsatz habe.

Ist das Auslesen der aktuellen Uhrzeit so korrekt?

Gruß
Michael



Ellert

#1
Nein, Du verwendest Vergleichsoperatoren (>=,<) dieser Operatoren vergleichen numerische Werte Du müsstest Operatoren für nicht numerische Werte verwenden https://wiki.selfhtml.org/wiki/Perl/Operatoren
Es fehlt der Vergleichsoperand, die aktuelle Zeit, siehe http://fhem.de/commandref_DE.html#perl

Mit DOIF geht es etwas einfacher und kann leicht erweitert werden:

define Rolle_di DOIF (["Tuer_Kontakt:^closed$"] and [?RL_FLUR_TUE] eq "on" and [?10:00-12:00]) (set RL_FLUR_TUE down)


Mehr dazu
http://fhem.de/commandref_DE.html#DOIF
https://forum.fhem.de/index.php/topic,45373.0.html

michaelapp

#2
Hallo,

so heute habe ich mal Zeit gefunden mich dem Thema noch mal anzunehmen.

Wenn ich den Türkontakt EG_BAD_FEN überwache, fährt der Rollladen zwischen 13:00 und 17:00 Uhr runter

(["EG_BAD_FEN:^closed$"] and [?13:00-17:00]) (set RL_BAD down)

Wenn ich jetzt noch den Status vom Rollladen mit aufnehmen möchte als RL_BAD = on (ganz oben), macht er gar nichts :-(

(["EG_BAD_FEN:^closed$"] and [?RL_BAD] eq "on" and [?13:00-17:00]) (set RL_BAD down)

Was mache ich falsch bzw. übersehe ich?

Gruß
Michael




Ellert

Poste mal ein Listing des DOIF. Ohne weitere Informationen würde ich sagen RL_Bad ist nicht "on".

Ich würde es über Filter lösen set RL_Bad:FILTER=on down.

michaelapp

Du hattest recht :-)

RL_Bad ist nicht "on" sondern "up"

michaelapp

Da mir die DOIF besser gefallen hab ich gedacht ich bau meine Notify zu DOIF um und alles funktioniert, leider bin ich da auf ein Problem gestossen.

Wenn mein Rollladen komplett unten ist -> down fährt er auf 50% wenn ich das Fenster öffne
define RL_BAD_HOCH_50 notify EG_BAD_FEN:open {if ((Value("EG_BAD_FEN") eq "open") && (Value("RL_BAD") eq "down")) {fhem ("set RL_BAD pct 50");;}}

Wenn ich die Türe später zumache, fährt der Rollladen komplett runter da er auf 50% steht
define RL_BAD_RUNTER_50 notify EG_BAD_FEN:closed {if ((Value("EG_BAD_FEN") eq "closed") && (Value("RL_BAD") eq "50")) {fhem ("set RL_BAD down");;}}

Mit meinem DOIF fährt der Rollladen runter wenn es zwischen 20:30 und 24:00 Uhr ist.
define RL_FLUR_RUNTER_2 doif (["EG_FLUR_TUE:^closed$"] and [?RL_FLUR_TUE] eq "up" and [?20:30-24:00]) (set RL_FLUR_TUE down)

Wenn ich das alles mit DOIF mache:
define EG_BAD_FEN_HOCH_50 doif (["EG_BAD_FEN:^open$"] and [?RL_BAD] eq "down") (set RL_BAD pct 50)
define EG_BAD_FEN_RUNTER_50 doif (["EG_BAD_FEN:^closed$"] and [?RL_BAD] eq "50") (set RL_BAD down)
define RL_FLUR_RUNTER_2 doif (["EG_FLUR_TUE:^closed$"] and [?RL_FLUR_TUE] eq "up" and [?20:30-24:00]) (set RL_FLUR_TUE down)

Wird der DOIF zum hochfahren auf 50% nur einmal ausgeführt, die States welche überwacht werden sind korrekt.
Der DOIF zum runterfahren bei 50% wird auch mehrere male ausgeführt. Hab es getestet in dem ich den Rollladen manuell auf 50% gefahren habe.

Sieht jemand einen Fehler?

Gruß
Michael


Ellert

Zugegeben, die Beschreibung des DOIF in der Befehlsreferenz ist lang, das Modul ist aber auch sehr mächtig, es lohnt sich alles mindestens einmal zu lesen.

Dir wäre dies bestimmt aufgefallen  ;)
ZitatDaher sollte nach Möglichkeit eine Problemlösung mit Hilfe eines und nicht mehrerer DOIF-Module realisiert werden, getreu dem Motto "wer die Lampe einschaltet, soll sie auch wieder ausschalten".

Jedes Ereignis, das eine Bedingung unwahr werden lässt, führt bei einem einzeiligen DOIF ohne steuernde Attribute zum Status cmd_2 und lässt es wieder schalten.

Schau in den Eventmonitor, welche Events das Problem erzeugen könnten.

Allgemein stellt sich die Frage bei welchen Eingangszuständen/Events welche Ausgangszustände eingenommen werden sollen? Das ist mir aus Deiner Beschreibung nicht klar geworden.

Wo vermutest Du einen Fehler?


michaelapp

#7
Meine beiden Befehle für hoch und runter 50% haben nach der Ausführung cmd_1 stehen, ich denke hier liegt mein Problem wie.

Ich habe schon in einigen Beiträgen gelesen das man den Befehl immer ausführen lassen kann oder so ähnlich ...

Wie kann ich meine zwei 50% Befehle in einem zusammen fassen?

ich habe jetzt bei jedem doif noch ein "attr XXX do always" hinzugefügt, ich glaub das passt jetzt so.

Ellert

Schau Dir mal die Syntax vom DOIF an und probier mal, falls Du nicht weiter kommst, dann poste Deinen Versuch als Listing mit einer Fehlerbeschreibung.