FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: der_da am 21 Dezember 2016, 11:34:49

Titel: Rollladen-DOIF schaltet nur teilweise - warum?
Beitrag von: der_da am 21 Dezember 2016, 11:34:49
Hallo liebe Forumsmitglieder/Innen ;-)

ich habe zur Steuerung meiner Rollläden ein relativ komplexes DOIF im Einsatz, das seit Monaten seinen Dienst sehr zuverlässig getan hat. FHEM setzt dabei kurze Schaltimpulse ab, die die externe Rollladensteuerung dann zu Aktionen veranlasst. Dabei ist der Normalfall der, dass der erste Impuls den Rollladen in eine Richtung fährt, der zweite die Fahrt stoppt und der dritte die Fahrt in die Gegenrichtung veranlasst. Bei Fahrtbeginn wird zusätzlich ein Timer gestartet, der nach einer definierten Zeit (die ausreicht, damit der Rollladen seine Endposition erreichen kann) den Fahrbefehl automatisch stoppt. Damit wird erreicht, dass nach Drücken eines Tasters und genügend Wartezeit ein weiteres Drücken des Tasters sofort die Fahrt in die Gegenrichtung startet und nicht wie bei ungenügender Wartezeit erst mal den Rollladenmotor stoppt. Es gibt aber auch spezielle Eingänge, die immer eine Fahrt in eine bestimmte Richtung veranlassen (z.B. Fahre alle Rollläden runter, egal ob dieser schon unten ist oder nicht.).

Zur Adventszeit sind ein paar der Fenster mit weihnachtlicher Beleuchtung bestückt, die durch FHEM ein- und ausgeschaltet werden. Damit FHEM weiß, dass jetzt Adventszeit ist und anders zu verfahren ist, habe ich einen Dummy du_Rollo_Art, der entweder "Normal" oder "Weihnachten" beinhaltet. "Normal" funktioniert alles gut. Aber es gibt einen Zweig im DOIF, der folgendermaßen definiert ist:
...
DOELSEIF
([du_Rollo_Master] eq "an" and [du_Rollo_Art] eq "Weihnachten" and [{sunset(-1560,"16:00","22:00")}] ) (set gpio4 off, {fhem ("define at_verzoegert_10 at +00:00:05 set gpio27 off;;;; set gpio22 off;;;; set gpio19 off;;;; set gpio23 off")})
DOELSEIF
...

- gpio4 ist der Befehl, alle Rollläden herunter zu fahren (egal, ob sie bereits unten sind oder nicht)
- die 5 Sekunden verzögerten gpios sollen dann die Fahrt der Rollläden in den beleuchteten Fenstern stoppen
Mein Problem ist, dass der erste Befehl "set gpio4 off" nicht ausgeführt wird, das nachfolgende verzögerte AT aber erfolgreich angelegt und anschließend ausgeführt wird. Das hat allerdings zur Folge, dass die Rollläden alle oben bleiben und nach 5 Sekunden genau diese ihre Abwärtsfahrt beginnen, die eigentlich oben bleiben sollten.

Folgender Zweig sorgte bisher zuverlässig dafür, dass zum Sonnenuntergang alle Rollläden geschlossen wurden. Abgesehen von der Auswertung der Anwesenheit (die in bestimmten Fällen andere Aktionen auslöst) ist der einzige Unterschied, das hier nur die Aktion "Fahre alle Rollläden herunter" ausgelöst wird.
...
DOELSEIF
([du_Rollo_Master] eq "an" and [du_Rollo_Art] eq "Normal" and [Anwesenheit] eq "off" and [{sunset(-1560,"16:00","22:00")}] ) (set gpio4 off)
DOELSEIF
...

Woran kann es also liegen, dass der erste Befehl nicht ausgeführt wird?
Titel: Antw:Rollladen-DOIF schaltet nur teilweise - warum?
Beitrag von: der_da am 22 Dezember 2016, 17:47:01
*Push  ::)
Hat keiner eine Idee?  :-\

Komischerweise wird auch im Log nichts über den ersten Befehl (set gpio4 off) geloggt, die Auslösung der im verzögerten AT definierten gpios tauchen aber brav im Log auf.  :'(
Titel: Antw:Rollladen-DOIF schaltet nur teilweise - warum?
Beitrag von: automatisierer am 22 Dezember 2016, 18:09:50
So ganz verstehe ich dein Anliegen noch nicht...

Zitat von: der_da am 21 Dezember 2016, 11:34:49

Folgender Zweig sorgte bisher zuverlässig dafür....
...
DOELSEIF
([du_Rollo_Master] eq "an" and [du_Rollo_Art] eq "Normal" and [Anwesenheit] eq "off" and [{sunset(-1560,"16:00","22:00")}] ) (set gpio4 off)
DOELSEIF
...

Woran kann es also liegen, dass der erste Befehl nicht ausgeführt wird?
Funktioniert dieser Zweig, oder funktionierte er nur in der Vergangenheit??

Zitat von: der_da am 21 Dezember 2016, 11:34:49

...
DOELSEIF
([du_Rollo_Master] eq "an" and [du_Rollo_Art] eq "Weihnachten" and [{sunset(-1560,"16:00","22:00")}] ) (set gpio4 off, {fhem ("define at_verzoegert_10 at +00:00:05 set gpio27 off;;;; set gpio22 off;;;; set gpio19 off;;;; set gpio23 off")})
DOELSEIF
...


verstehe nicht, warum du im Ausführungsteil erst auf Perl Ebene gehst um dann wieder auf FHEM Ebene zurück zu schwenken...

Timer kann DOIF auch. ICh würde das so versuchen:

...
DOELSEIF
([du_Rollo_Master] eq "an" and [du_Rollo_Art] eq "Weihnachten" and [{sunset(-1560,"16:00","22:00")}] ) (set gpio4 off) (set gpio27 off , set gpio22 off , set gpio19 off , set gpio23 off")
DOELSEIF
...
attr <DOIF> wait ...:0,5:...


Das wait mit 0,5 - also 0 Sekunden für den 1. Ausführungsteil und 5 Sekunden für den 2. Ausführungsteil, musst du dann an die entsprechende Stelle passend zu der Stelle an der oben genannter DOELSEIF Zweig steht setzen.


Titel: Antw:Rollladen-DOIF schaltet nur teilweise - warum?
Beitrag von: kumue am 22 Dezember 2016, 18:14:42
Am Besten immer gleich ein list von dem DOIF posten.
Da könenn sich die DOIF-Auskenner einen besseren Überblick verschaften.
Thx.
Titel: Antw:Rollladen-DOIF schaltet nur teilweise - warum?
Beitrag von: Puschel74 am 22 Dezember 2016, 22:53:30
Und hir mal ein Wink zum Wiki  ;)
https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche (https://wiki.fhem.de/wiki/DOIF/Tools_und_Fehlersuche)