Rollladen-DOIF schaltet nur teilweise - warum?

Begonnen von der_da, 21 Dezember 2016, 11:34:49

Vorheriges Thema - Nächstes Thema

der_da

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?

der_da

#1
*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.  :'(

automatisierer

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.



kumue

Am Besten immer gleich ein list von dem DOIF posten.
Da könenn sich die DOIF-Auskenner einen besseren Überblick verschaften.
Thx.

Puschel74

Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.