DOIF schaltet nicht, wenn Jalousientaster manuell betätigt wurde

Begonnen von bmwfan, 13 Juli 2016, 22:10:18

Vorheriges Thema - Nächstes Thema

bmwfan

Hallo,
habe folgendes Problem mit meiner Jalousiensteuerung:
Die Jalousie fährt abends beim Dunkel werden herunter und morgens unter bestimmten Bedingungen (Frau arbeitet oder ist Zuhause) wieder hoch. Geht auch alles wunderbar, bis meine Frau morgens die Jalousien manuell öffnet und die Automatik tagsüber keine Schaltaktion auslöst (Beschattung wegen Sonne etc.). An diesem Abend fahren die Jalousien nicht mehr automatisch herunter. Nach Lesen der Commandref meine ich auch den Grund gefunden zu haben:
Ein cmd wird nicht wiederholt, solange nicht ein anderes cmd ausgeführt wurde (in meinen Worten wiederholt).
Das bedeutet bei mir: Wenn die Automatik morgens öffent, schließt sie abends auch. Öffnet meine Frau manuell, schließt die Automatik abends nicht mehr, da dasselbe cmd ausgeführt werden müßte. Da macht es auch nichts aus, dass dies einen Tag später erfolgt. Ich habe aber keinen Ansatz, wie ich das vermeiden kann. Ein "do always"?

Der code aus der DEF:
([du_Rollo_Master] eq "an" and [du_Tageslicht] eq "dunkel" and [Jal_WZ_Fest_West_03:level] != 0) (set Jal_WZ_Fest_West_03 level 0) ##1 Abends schliessen
DOELSEIF ([du_Rollo_Master] eq "an" and ([du_Beschattung_Haus] eq "ja" and [Jal_WZ_Fest_West_03:level] == 3)) (set Jal_WZ_Fest_West winkel 10) ##2 Oeffnungswinkel einstellen wenn Beschattung
DOELSEIF ([du_Rollo_Master] eq "an" and [du_Beschattung_Haus] eq "nein" and [Jal_WZ_Fest_West_03:level] < 1 and ([du_Tageslicht] eq "hell" and (([07:00-09:00|134] and !$we) or [09:00-09:30|257]))) (set Jal_WZ_Fest_West_03 level 100) ##3 Oeffnen morgens wenn Jalousie nicht manuell eingestellt wurde
DOELSEIF ([du_Rollo_Master] eq "an" and [du_Beschattung_Haus] eq "ja" and [Jal_WZ_Fest_West_03:level] > 1 and ([du_Tageslicht] eq "hell" and (([11:00-17:00|134] and !$we) or [11:00-17:00|257]))) (set Jal_WZ_Fest_West_03 level 3) ##4 Jalousie auf Beschattungslevel setzen


Frage 2: Ich verwende die Aktoren HMW_LC_Bl1_DR. Kann ich erkennen (reading, internal), ob der Aktor durch die Tasten betätigt wurde und eine Schaltaktion nicht durch FHEM ausgeführt hat?
Wenn das geht, dann kann ich meine Logik um einiges vereinfachen, da ich bisher versuche die manuelle Betätigung über bestimmte Level (<1 bzw. >1) festzustellen.

Danke für die Tips.

Jürgen

P.S.: Wie kann ich ind er DEF manuelle Zeilenumbrüche einfügen, ohne das der Code durcheinanderkommt? In der DEF sieht der Code lesbar aus, jedoch hier im Codefenster ist die Zeile sehr lang.
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Per

Zitat von: bmwfan am 13 Juli 2016, 22:10:18Ich habe aber keinen Ansatz, wie ich das vermeiden kann. Ein "do always"?
Jein. Das do always sorgt zwar dafür, dass das DOIF im Spiel bleibt, allerdings kann es dir auch passieren, dass kurz nach der manuellen Öffnung die Jalousien automatisch schließen.
Eine Möglichkeit könnte (!) ein fester Zeitpunkt sein
DOELSEIF ([12:00])
(ohne doing), mit dem das DOIF wieder mobilisiert wird.

Zitat von: bmwfan am 13 Juli 2016, 22:10:18Wie kann ich ind er DEF manuelle Zeilenumbrüche einfügen, ohne das der Code durcheinanderkommt? In der DEF sieht der Code lesbar aus, jedoch hier im Codefenster ist die Zeile sehr lang.
Im DEF kannst du direkt ein Enter eintippen, alternativ kannst du auch eins reinkopieren. Und hier im Codefenster kannst du problemlos auch <Enter> tippen.
Wichtig im DEF sind nur die abschließenden Leerzeichen, die an mancher Stelle erforderlich sind.

bmwfan

Den Verdacht, dass do always auch andere Bedingungen triggert, hatte ich auch. Wird sicher nicht gehen. Deinen Ansatz eines Triggers, nur um eine andere Bedingung zu aktivieren, versuche ich einmal.

Abschließende Leerzeichen in der DEF: Sind die zwingend notwendig am Ende jeder Bedingung? Mir ist aufgefallen, dass dort immer ein Leerzeichen ist, obwohl ich keines eingegeben habe.

Weis jemand, ob und wenn ja wie ich aus dem genannten Rolladenaktor eine manuelle Bedienung auslesen kann?

Gruß Jürgen
Synology DS720+ mit Docker-Container und Haupt-FHEM, HM-LAN, Jalousienaktoren HmWired, Shelly-Devices; Raspi 3B+ mit piVCCU ohne FHEM-Instanz, CUL, JeeLink; Raspi 3B+ mit FHEM und HMUARTUSB,  Raspi 3B+ mit HMUARTGPIO, 1-wire, ebusd

Per

Zitat von: bmwfan am 14 Juli 2016, 17:24:53Sind die zwingend notwendig am Ende jeder Bedingung?
Ich weiss nicht, wann genau die wichtig sind, ich mach es, auch aus optischen Gründen, einfach immer vor dem Backslash.

Damian

Zitat von: Per am 14 Juli 2016, 23:30:33
Ich weiss nicht, wann genau die wichtig sind, ich mach es, auch aus optischen Gründen, einfach immer vor dem Backslash.

In früheren Versionen von DOIF wurde Zeilenumbruch einfach entfernt, das führte in den Bedingungen schon mal dazu, dass Operatoren  "zusammenklebten", was zum Fehler führte. In der aktuellen Version wird ein Zeilenumbruch durch ein Leerzeichen ersetzt, damit gibt es weniger Probleme.


Gruß

Damian

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