FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: visionsurfer am 07 November 2016, 18:40:41

Titel: Bitte um Prüfung: Rollo soll tagsüber nicht schließen
Beitrag von: visionsurfer am 07 November 2016, 18:40:41
Hallo,

durch ein anderes DOIF lasse ich am Abend meine Rollo´s automatisch schließen wenn ein bestimmter LUX Wert erreicht ist. Klappt auch super. Nun kommt es hin und wieder vor, das ich trotzdem noch mal lüften will. Also hab ich ein weiteres DOIF pro Raum gemacht, was das entsprechende Rollo kurz ein bisschen öffnet, wenn ich das Fenster öffne. Wenn ich das Fenster wieder schließe, fährt das Rollo wieder komplett zu.

Das ganze sieht so aus:

define lueften DOIF ([rollo_lounge:getG4] eq "100 %" and [fensterstatus_lounge] eq "open") (set rollo_lounge value 50 g1) DOELSEIF ([fensterstatus_lounge] eq "closed") (set rollo_lounge value 100 g1)

Funktioniert am Abend perfekt.

Nun hat meine Frau mal tagsüber das Fenster geöffnet. Als der Rolladen komplett geöffnet war. Als sie das Fenster wieder geschlossen hat, ist auch das Rollo komplett runter gefahren. Klar, mein DOIF ist ja auch entsprechend so aufgebaut. Also für abends super. Für Tagsüber hab ich ein Fehler gemacht, bzw. muss es noch absichern. Nun hab ich mir folgendes ausgedacht. So würde meine Absicherung aussehen, damit das Rollo Tagesüber nicht schließt, nur wenn man kurz lüftet.

Ich habe den Code wie folgt geändert:

define lueften DOIF ([rollo_lounge:getG4] eq "100 %" and [fensterstatus_lounge] eq "open") (set rollo_lounge value 50 g1) DOELSEIF ([rollo_lounge:getG4:d] > 0 and [fensterstatus_lounge] eq "closed") (set rollo_lounge value 100 g1)

Tagesüber stehen die Rollos ja immer auf 0%. Daher hab ich das größer als NULL eingebaut. Ist das so ok. Oder sollte man das anders machen. So müsste es doch verhindern, das beim schließen der Fenster das Rollo komplett schließt. Oder denke ich da falsch ?

Grüße,
Visionsurfer
Titel: Antw:Bitte um Prüfung: Rollo soll tagsüber nicht schließen
Beitrag von: Damian am 07 November 2016, 18:53:42
Mit Operatoren eq und > kannst du schon mal umgehen :)

Syntaktisch sieht es gut aus, ob du alle für Dich wichtigen Fälle damit abgedeckt hast, weiß ich nicht. Probieren geht über studieren. Viel kaputt machen kannst du nicht. Ggf. noch Fragezeichen voranstellen, damit die Abfrage nicht triggert:

[?rollo_lounge:getG4:d]
Titel: Antw:Bitte um Prüfung: Rollo soll tagsüber nicht schließen
Beitrag von: visionsurfer am 07 November 2016, 20:08:49
Hi,

ok. Danke. O.K. dann ist mein > 0 also richtig. Wenn es exakt 0 ist, dann schließt er nicht, oder ? Ab 1 würde er schließen.

Alles klar. Das mit dem ? und was genau triggern bedeutet muss ich mir noch mal anschauen. Tausend mal gelesen, aber noch nicht verinnerlicht :)
Danke für deinen Support.

Grüße,
Visionsurfer
Titel: Antw:Bitte um Prüfung: Rollo soll tagsüber nicht schließen
Beitrag von: Per am 08 November 2016, 12:56:30
Statt umständlich eine eigene Logik (abfrageseitig) in dein DOIF zu verbauen, übernimm doch bei "Fenster zu" den Rollo-Status des übergreifenden DOIF (commandseitig).

define lueften DOIF ([fensterstatus_lounge] eq "open") (set rollo_lounge value {[rollo_lounge:getG4:d]/2} g1)
DOELSEIF ([fensterstatus_lounge] eq "closed") (set rollo_lounge value [rollo_lounge:getG4:d] g1)

Ich hoffe, ich habe deinen Code richtig interpretiert. Und mach bitte Zeilenumbrüche rein, dass liest sich besser (besonders am Handy!).

Bei passender Namensgebung könntest du das DOIF sogar "globalisieren" (dann aber mit do always).
Titel: Antw:Bitte um Prüfung: Rollo soll tagsüber nicht schließen
Beitrag von: pc1246 am 08 November 2016, 14:01:00
Hallo Visionsurfer
Grundsaetzlich kann ich Dir nur empfehlen, ein Objekt an einer Stelle zu steuern. In der SPS-Programmierung ist dieses Vorgehen essentiell. Zum Glueck kann Dein Rollo nicht gleichzeitig hoch- und runterfahren, da das vom Aktor verriegelt ist. Ansonsten wuesstest Du ziemlich schnell, warum man das so machen sollte. Fuer Dich wird so auch die Fehlersuche einfacher, da Du nur an einer Stelle suchen musst!
Gut gemeinte Gruesse
Christoph
Titel: Antw:Bitte um Prüfung: Rollo soll tagsüber nicht schließen
Beitrag von: visionsurfer am 08 November 2016, 21:33:30
Hi,

ja danke. Ich bin für den Rat offen. Ich bin ziemlich am Anfang mit meinem Latein und eigentlich schon recht zufrieden. Wenn ich bedenke das ich für 6-8 Wochen noch nicht mal wusste das es FHEM gibt :)

@Per
Ich weiß nicht ob ich dein Code 100% richtig verstehe. Aber ich glaube er würde nicht mein Problem lösen. Mein Problem ist ja, das Abends (also wenn die Rollos durch ein anderes DOIF schon alle geschlossen sind), alles perfekt läuft. Ich mache ein Fenster auf, die Rollos gehen ein bisschen auf, bzw. die Raffstores kippen etwas. Mach ich das Fenster wieder zu, schließt wieder alles.

Perfekt.

Am Tag ist das Rollo aber komplett offen. Wenn ich dann mal das Fenster öffne und schließe soll nichts passieren. Bei meinem ersten DOIF, welches ich oben gepostet habe, sind die Rollos komplett zu gegangen, als ich das Fenster wieder geschlossen habe. Das soll natürlich tagsüber nicht passieren.

Also hatte ich mein DOIF wie oben beschrieben erweitert. Wenn die auf NULL stehen, dann passiert auch nichts.

@pc1246
Das verstehe ich leider noch nicht ganz. Liegt bestimmt dran, das mir der "Programmierer background" fehlt. Was bedeutet "Objekte an einer Stelle steuern" ?

Grüße,
Visionsurfer
Titel: Antw:Bitte um Prüfung: Rollo soll tagsüber nicht schließen
Beitrag von: pc1246 am 09 November 2016, 06:55:05
Hallo Visionsurfer
Du hast, soweit ich es verstehe, zwei Doifs, um einen Rolladen zu steuern. Das heisst aber auch, dass jedes fuer sich rauf und runter sagen kann. Passiert das gleichzeitig, so kann das zumindest der Aktor nicht, und nimmt dann irgendeinen/den letzten Befehl an. Waere das anders aufgebaut, wuerde Dein Rolladenmotor kaputt gehen, da gleichzeitig rauf und runter nicht gut fuer ihn ist. Packst du das Ganze jetzt in ein Doif, mit X Doelseif, dann kannst Du immer sicher sein, dass es nur eine Richtung gibt. Zudem musst du nur an einer Stelle suchen/kontrollieren/anpassen. Und Du musst dir nicht einen riesen Kopf darum machen, wie Du denn den Zustand des einen Doif in das andere Doif einbindest, was Du am Ende auch noch vice versa machen muesstest.
Evtl. kann ich es dir noch etwas klarer mit einer Lampe machen. Wenn Du zwei einzelne Schalter (Deine Doifs) hast, die eine Lampe  (der Rolladen) ansteuern, wie kriehst Du die Lampe mit Schalter B aus, wenn der Schalter A sagt an!?
Gruss Christoph
Titel: Antw:Bitte um Prüfung: Rollo soll tagsüber nicht schließen
Beitrag von: Per am 09 November 2016, 13:26:30
Zitat von: visionsurfer am 08 November 2016, 21:33:30Ich weiß nicht ob ich dein Code 100% richtig verstehe. Aber ich glaube er würde nicht mein Problem lösen. Mein Problem ist ja, das Abends (also wenn die Rollos durch ein anderes DOIF schon alle geschlossen sind), alles perfekt läuft. Ich mache ein Fenster auf, die Rollos gehen ein bisschen auf, bzw. die Raffstores kippen etwas. Mach ich das Fenster wieder zu, schließt wieder alles.
Mein Code soll beim Öffnen des Fensters das Rollo auf den halben Stand des Standards gehen (tags 0/2 = 0, nachts 100/2 = 50), beim Schließen auf den vollen Wert (tags 0 = 0, nachts 100 = 100).
Kann natürlich sein, dass ich deinen Code und damit die Geräte-Namen falsch interpretiert habe, aber dann sollte das Prinzip aus o.a. Text hervorgehen.