[Gelöst] Wie wait_timer nicht beenden?

Begonnen von FFHEM, 01 März 2021, 19:12:58

Vorheriges Thema - Nächstes Thema

FFHEM

Hallo zusammen,

in meinem umfangreichen DOIF für meine Rolladensteuerung suche ich nach einem Fehler in meinem Code, den ich jetzt nach langem Suchen lokalisiert habe:

Ich versuche es in Kurzform:
In cmd1 wird um 18:20 ein wait_timer mit Zielzeit 18:45 erzeugt. (Rolladen sollen 25 min. verzögert herunterfahren)
Da aber cmd2 um 18:41 (twilight) aktiv wird und RolladenGaesteWC runterfährt, wird der wait_timer für cmd1 gelöscht.
Folge: RolladenKuechelinks und RolladenKuecheRechts fahren nicht herunter.
Wie kann man verhindern, dass der wait_timer gelöscht wird?
Ich weiß, dass das das Standardverhalten ist, aber in meinem Fall ist es nicht passend.
Was ist "best practice"?

Vielen Dank für jede Idee!!

defmod di_Rolladensteuerung_vorne DOIF ### cmd 1  Abends: Rollade Küche rechts verzögert, dann verzögert links, s. Attribut "wait", muss mit Zeitdifferenz "-[00:25]" übereinstimmen!\
( [$SELF:Modus,"manu"] eq "auto" and [Tageslicht_aussen] eq "dunkel" and [([Rolladen_vorne_Zeit_runter_fruehestens]-[00:25]) - 23:00] )\
    (set RolladenKuecheRechts close;;)(set RolladenKuecheLinks close;;)\
\
### cmd 2  Abends: Runterfahren RolladenGaesteWC bei Dunkelheit\
DOELSEIF ([$SELF:Modus,"manu"] eq "auto"  and [{twilight("Twilight","ss_indoor","17:00","22:29")}])\
( set RolladenGaesteWC close;; )\
\
### cmd 3  Abends: Runterfahren RolladenFlur feste Uhrzeit\
DOELSEIF ([$SELF:Modus,"manu"] eq "auto" and [[Rolladen_Flur_runter]] )  \
( set RolladenFlur close;; )\
\
### cmd 4  morgens: Rauffahren je nach Wochentag früher oder später\
DOELSEIF ([$SELF:Modus,"manu"] eq "auto"      \
         and (\
               [{twilight("Twilight","sr_indoor","[Rolladen_Zeit_hoch_fruehestens]","08:15")}] \
)\
)  \
(set RolladenGaesteWC open;;\
             set RolladenKuecheRechts open;;\
             set RolladenKuecheLinks open;;\
set RolladenFlur open;;\
)\
\
### cmd 5 mittags: Rolladen rauffahren, da Sonne nicht mehr in Fenster scheint\
DOELSEIF ([$SELF:Modus,"manu"] eq "auto" and [12:00])\
(set RolladenGaesteWC open;;\
             set RolladenKuecheRechts open;;\
             set RolladenKuecheLinks open;;\
set RolladenFlur open;;\
)\
\
\

attr di_Rolladensteuerung_vorne alias di_Rolladensteuerung_vorne
attr di_Rolladensteuerung_vorne cmdState runtergefahren  | Rolladen Gaeste-WC runter  | Rollade Flur runter gefahren | Morgens raufgefahren | Mittags raufgefahren
attr di_Rolladensteuerung_vorne group Rolladen
attr di_Rolladensteuerung_vorne icon fts_shutter_automatic
attr di_Rolladensteuerung_vorne readingList Modus
attr di_Rolladensteuerung_vorne room Licht/Rolladen
attr di_Rolladensteuerung_vorne setList Modus:auto,manu
attr di_Rolladensteuerung_vorne timerWithWait 1
attr di_Rolladensteuerung_vorne wait 1500,2700:0:0:0:0
attr di_Rolladensteuerung_vorne webCmd Modus

setstate di_Rolladensteuerung_vorne  Rolladen Gaeste-WC runter 
setstate di_Rolladensteuerung_vorne 2021-03-01 18:20:01 Device Tageslicht_aussen
setstate di_Rolladensteuerung_vorne 2021-01-01 04:12:42 Modus auto
setstate di_Rolladensteuerung_vorne 2021-03-01 18:41:31 cmd 2
setstate di_Rolladensteuerung_vorne 2021-03-01 18:41:31 cmd_event timer_3
setstate di_Rolladensteuerung_vorne 2021-03-01 18:41:31 cmd_nr 2
setstate di_Rolladensteuerung_vorne 2021-03-01 18:20:01 e_Tageslicht_aussen_STATE dunkel
setstate di_Rolladensteuerung_vorne 2021-03-01 13:48:29 mode enabled
setstate di_Rolladensteuerung_vorne 2021-03-01 18:41:31 state  Rolladen Gaeste-WC runter 
setstate di_Rolladensteuerung_vorne 2021-03-01 13:49:13 timer_01_c01 01.03.2021 18:05:00
setstate di_Rolladensteuerung_vorne 2021-03-01 13:48:29 timer_02_c01 01.03.2021 23:00:00
setstate di_Rolladensteuerung_vorne 2021-03-01 18:41:31 timer_03_c02 02.03.2021 18:41:31
setstate di_Rolladensteuerung_vorne 2021-03-01 13:48:29 timer_04_c03 01.03.2021 22:00:00
setstate di_Rolladensteuerung_vorne 2021-03-01 13:48:29 timer_05_c04 02.03.2021 07:30:00
setstate di_Rolladensteuerung_vorne 2021-03-01 13:48:29 timer_06_c05 02.03.2021 12:00:00
setstate di_Rolladensteuerung_vorne 2021-03-01 18:41:31 wait_timer no timer





Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

Stelaku

#1
Hallo FFHem

Auf die schnelle würde mir da ein at im Ausführungteil einfallen.

ungfähr so für cmd 1
aus der dev kopiert

(defmod timer at +00:25:00 set RolladenKuecheRechts close;;set RolladenKuecheLinks close)


Gruß

Stephan

Damian

Einfach statt wait sleep; vor den Befehl setzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FFHEM

Danke Stefan und Damian,

da ich ja 2 Befehle absetze, der 1.  1500 s später, der 2.  2700 s später, müsste also so aussehen:

    (sleep 1500;set RolladenKuecheRechts close;)(sleep 1200;set RolladenKuecheLinks close;)

Vielen Dank Euch beiden!
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266

Damian

Zitat von: FFHEM am 02 März 2021, 16:22:38
Danke Stefan und Damian,

da ich ja 2 Befehle absetze, der 1.  1500 s später, der 2.  2700 s später, müsste also so aussehen:

    (sleep 1500;set RolladenKuecheRechts close;)(sleep 1200;set RolladenKuecheLinks close;)

Vielen Dank Euch beiden!

entweder:

    (sleep 1500;set RolladenKuecheRechts close;)(sleep 2700;set RolladenKuecheLinks close;)

oder

    (sleep 1500;set RolladenKuecheRechts close;sleep 1200;set RolladenKuecheLinks close;)

Im ersten Fall laufen zwei Timer gleichzeitig, im zweiten nacheinander.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

FFHEM

Prima, Damian,

werde es wie im 2. Fall mit einer Klammer (1 Thread) realisieren.
Aber gut zu wissen, dass die Mehrklammerlösung auch parallele Threads erzeugt.

Danke hierfür und auch bei der Gelegenheit für Deine gesamte Arbeit!!!!

Gruß,
Friedhelm
Raspberry Pi 4B, Homematic, Sonoff, Shelly, Worx, Arduino, ESP8266