[Gelöst] DOIF Wait Timer abbrechen

Begonnen von dirkbalzer, 11 Juni 2016, 00:00:35

Vorheriges Thema - Nächstes Thema

dirkbalzer

Manchmal fahren meine Rollläden nicht so wie sie sollen, und bleiben auf dem Status ,,set_off" hängen.
Jetzt wollte ich mir ein DOIF basteln dass den Status abfragt und entsprechend triggert falls mal wieder ein Rollo nicht will:
define di_repeat_CMD DOIF (["^Roll_:set_on"])(set $DEVICE clear msgEvents)(set $DEVICE on)(set Pushover msg 'FHEM - RepeatCMD' 'Befehl für $DEVICE hoch wurde wiederholt')\
DOELSEIF (["^Roll_:set_off"])(set $DEVICE clear msgEvents)(set $DEVICE off)(set Pushover msg 'FHEM - RepeatCMD' 'Befehl für $DEVICE runter wurde wiederholt')\
DOELSE

attr di_repeat_CMD alias Rollo RepeatCMD
attr di_repeat_CMD icon own_repeat
attr di_repeat_CMD room Testbereich
attr di_repeat_CMD wait 60,60:60,60



Ich habe das ganze mal mit einem ,,Roll_Dummy" getestet. Der Status des Dummys mit ,,set_off" wird erkannt und die wait timer werden gestartet. So weit so gut...
Allerdings kann ich die Timer nicht mehr abbrechen. Selbst wenn innerhalb der ersten 60 Sekunden mein Dummy seinen Status von ,,set_off" in ,,off" wechselt, laufen die Zeiten einfach weiter.


Weiß jemand eine Lösung für mein kleines Problem?
Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

Per

Mach statt DOELSE ein DOELSEIF (["^Roll_"]).
Ein Problem bekommst du aber, wenn ein Rollo auf set_xxx hängt und ein anderes durchschaltet. Durch die RegEx hat DOIF nicht für jedes Rollo einen eigenen Timer.

dirkbalzer

Ich dachte eigentlich gerade durch RegEx hat jeder Rollo seinen eigenen Timer.
Also müsste ich in dem Fall dann das RegEx rauswerfen und für jeden der 8 Rollo's ein eigenes DOIF erstellen?

Aber mal wieder zum eigentlichen Problem:
ein DOELSEIF (["^Roll_"]) am ende ändert leider nichts an dem Problem. Die Timer laufen immer noch stur durch...
Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

dirkbalzer

AHA!
Ich glaube ich habe das Problem gefunden. Die "leere" Anweisung muss vor den Wait-Timern stehen. Dann springt das ganze auch um.
Da ich aber für jeden Rollo einen eigenen Timer brauche, musste ich jetzt die RegEx rauswerfen und für jeden Rollo ein eigenes DOIF erstellen. Schade eigentlich ...

Also mit dem Dummy schaltet alles so wie ich es mir gedacht habe. Mal sehen wie sich das ganze am lebenden Objekt verhält.
Falls Ihr hier nichts mehr von mir hört funktioniert es wohl  ;D

Aktueller Stand:
define di_check_Roll_OG_Buero_R DOIF ([Roll_OG_Buero_R] ne "set_on" and [Roll_OG_Buero_R] ne "set_off")\
DOELSEIF ([Roll_OG_Buero_R] eq "set_on")(set Roll_OG_Buero_R clear msgEvents)(set Roll_OG_Buero_R on)\
(set Pushover msg 'FHEM - RepeatCMD' 'Befehl für Rollo "Obergeschoss Büro rechts" hoch wurde wiederholt')\
DOELSEIF ([Roll_OG_Buero_R] eq "set_off")(set Roll_OG_Buero_R clear msgEvents)(set Roll_OG_Buero_R off)\
(set Pushover msg 'FHEM - RepeatCMD' 'Befehl für Rollo "Obergeschoss Büro rechts" runter wurde wiederholt')

attr di_check_Roll_OG_Buero_R alias Rollo OG Büro - rechts Überwachung
attr di_check_Roll_OG_Buero_R cmdState OK|set_on|set_off
attr di_check_Roll_OG_Buero_R group Rollladen_Check
attr di_check_Roll_OG_Buero_R icon own_repeat
attr di_check_Roll_OG_Buero_R room Rollladen
attr di_check_Roll_OG_Buero_R wait 0:60,15:60,15
Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...