FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: odie13690 am 01 Juni 2015, 09:55:59

Titel: DOIF per Dummy aktivieren/deaktivieren
Beitrag von: odie13690 am 01 Juni 2015, 09:55:59
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
Titel: Antw:DOIF per Dummy aktivieren/deaktivieren
Beitrag von: Bartimaus am 02 Juni 2015, 07:22:47
Moin,

habe das gleiche Problem und würde mich über eine Lösung/Tip freuen.
Titel: Antw:DOIF per Dummy aktivieren/deaktivieren
Beitrag von: Ralli am 02 Juni 2015, 07:40:20
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.
Titel: Antw:DOIF per Dummy aktivieren/deaktivieren
Beitrag von: flurin am 02 Juni 2015, 11:44:32
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
Titel: Antw:DOIF per Dummy aktivieren/deaktivieren
Beitrag von: moonsorrox am 02 Juni 2015, 13:21:36
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%
Titel: Antw:DOIF per Dummy aktivieren/deaktivieren
Beitrag von: Damian am 02 Juni 2015, 17:33:58
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
Titel: Antw:DOIF per Dummy aktivieren/deaktivieren
Beitrag von: odie13690 am 02 Juni 2015, 20:01:48
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
Titel: Antw:DOIF per Dummy aktivieren/deaktivieren
Beitrag von: flurin am 02 Juni 2015, 21:40:54
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