Hallo zusammen,
ich würde gern eine DOIF-Anweisung per On-/Off-Dummy aktivieren bzw. deaktivieren. Dazu nutze ich folgenden Code:
define On_Off dummy
attr On_Off eventMap on:an off:aus
attr On_Off setList on off
attr On_Off webCmd an:aus
#zu steuernde DOIF-Anweisung
define Anweisung DOIF (([On_Off] eq "an" and [[Beginn]]) or ([On_Off] eq "an" and [[Zeit:time]])) (set Aktor on-for-timer [Dauer])
attr Anweisung do always
"Zeit:time" wird über eine separate Funktion in der "99_myUtils.pm" gesteuert. Das Aktivieren/Deaktivieren per Dummy funktioniert, d. h. der Status wird auch an die DOIF-Anweisung übertragen. Ist die Anweisung aktiv, funktioniert alles. Das Deaktivieren klappt auch noch. Wurde die Anweisung aber einmal per Dummy deaktiviert, klappt das Aktivieren nicht mehr. D. h. die DOIF-Anweisung wird erst wieder am nächsten Tag ausgeführt und nicht zu einem Zeitpunkt (nach Wiederaktivierung) der "Zeit:time" entspricht.
Woran liegt das? Muss ich bei der (Wieder-)Aktivierung noch etwas resetten?
odie13690
Moin,
habe das gleiche Problem und würde mich über eine Lösung/Tip freuen.
Ich löse das etwas anders. Ich definiere einen Dummy als Schalter und dazu dann noch einen notify, der letztendlich das zu beeinflussende Device (DOIF) mit einem attr disable 1 oder attr disable 0 versieht.
Zitat von: odie13690 am 01 Juni 2015, 09:55:59
...
D. h. die DOIF-Anweisung wird erst wieder am nächsten Tag ausgeführt und nicht zu einem Zeitpunkt (nach Wiederaktivierung) der "Zeit:time" entspricht.
Woran liegt das? Muss ich bei der (Wieder-)Aktivierung noch etwas resetten?
odie13690
In diesem Fall ist vermutlich die aktuelle Zeit > Zeit:time, dann wird die Ausführung am nächsten Tag ausgeführt.
siehe: Anweisung > Readings > timer: Datum Zeit
ich mache das folgendermaßen und schalte mit einem Dummy das DOIF ab
([RolloSZmodus] eq "Aus") (attr di_RollladenSZ disable 1)
DOELSEIF
([RolloSZmodus] ne "Aus") (attr di_RollladenSZ disable 0)
Dieses Dummy "RolloSZmodus hat noch weitere Modi so z.B. FHEM,Nachtschicht,Beschattung
Fhem ist bei mir der normal Modus, Beschattung ist fast ähnlich nur das er bei einer Temperatur über 27° in eine Position fährt wo noch ein wenig Licht rein fällt, bei mir sind das 30%
Zitat von: Bartimaus am 02 Juni 2015, 07:22:47
Moin,
habe das gleiche Problem und würde mich über eine Lösung/Tip freuen.
Zukünftig soll disable das DOIF-Modul komplett stilllegen. mit enable (disable 0) werden dann auch die Timer neu aufgesetzt - steht so bei mir auf der todo-Liste.
Gruß
Damian
Zitat von: flurin am 02 Juni 2015, 11:44:32
In diesem Fall ist vermutlich die aktuelle Zeit > Zeit:time, dann wird die Ausführung am nächsten Tag ausgeführt.
Das sollte nicht der Grund sein. Basis für meine Tests ist deine [url:http://forum.fhem.de/index.php/topic,36814.0.html]Funktion[/url]. Ich starte z. B. um 8 Uhr mit aktiviertem On_Off und 6 Wiederholungen alle 7200 s. Um 9 Uhr deaktiviere ich On_Off, so dass um 10 Uhr set-on-timer nicht ausgeführt wird. Aktiviere ich um 11 Uhr On_Off wieder, sollte um 12 Uhr set-on-timer wieder ausgeführt werden müsste, was es leider nicht tut. Auch die normalerweise um 14, 16 und 18 Uhr zu erfolgenden Schaltungen finden nicht statt. Erst am nächsten Tag läuft die Funktion wieder wie erwartet.
Die Timer für Zeit:time sind im Übrigen korrekt. D. h. auch bei deaktiviertem On_Off wird der Timer in o. g. Beispiel auf heute:12:00:00 gesetzt.
Zitat von: Damian am 02 Juni 2015, 17:33:58
Zukünftig soll disable das DOIF-Modul komplett stilllegen. mit enable (disable 0) werden dann auch die Timer neu aufgesetzt - steht so bei mir auf der todo-Liste.
Gruß
Damian
Das würde es (mir) deutlich leichter machen ;)
odie13690
Zitat von: odie13690 am 02 Juni 2015, 20:01:48
Das sollte nicht der Grund sein. Basis für meine Tests ist deine [url:http://forum.fhem.de/index.php/topic,36814.0.html]Funktion[/url]. Ich starte z. B. um 8 Uhr mit aktiviertem On_Off und 6 Wiederholungen alle 7200 s. Um 9 Uhr deaktiviere ich On_Off, so dass um 10 Uhr set-on-timer nicht ausgeführt wird. Aktiviere ich um 11 Uhr On_Off wieder, sollte um 12 Uhr set-on-timer wieder ausgeführt werden müsste, was es leider nicht tut. Auch die normalerweise um 14, 16 und 18 Uhr zu erfolgenden Schaltungen finden nicht statt. Erst am nächsten Tag läuft die Funktion wieder wie erwartet.
Die Timer für Zeit:time sind im Übrigen korrekt. D. h. auch bei deaktiviertem On_Off wird der Timer in o. g. Beispiel auf heute:12:00:00 gesetzt.
Ich würde ich es so lösen:
Dummies für Intervall und Anzahl Wiederholungen
define du_interval dummy
set du_interval 7200
define du_repeat dummy
set du_repeat 6
Zudem hast du noch Dummies für Dauer und Beginn:
define Dauer dummy
set Dauer 10
define Beginn dummy
set Beginn 08:00
Um eine Fehlermeldung zu vermeiden, folgenden Befehl im FHEM-Eingabefeld vor der DOIF-Definition eingeben:
setreading du_repeat time 00:00
DOIF
define Anweisung DOIF ([[Beginn]]) or [[du_repeat:time]]))
({if (Value("ON_OFF") eq "an") {fhem("set Aktor on-for-timer [Dauer]")}},
{set_repeat_time("du_repeat","du_interval")})
attr Anweisung do always
Bemerkung: in du_repeat werden zusätzlich 2 Readings (count und time) durch "set_repeat_time" gespeichert:
Internals:
NAME du_repeat
NR 373
STATE 2
TYPE dummy
Readings:
2015-06-02 21:25:10 count 0
2015-05-07 12:00:44 state 2
2015-06-02 21:25:00 time 21:25:10