Zeitschaltung mit Timer funktioniert nicht

Begonnen von odie13690, 29 April 2015, 08:14:43

Vorheriges Thema - Nächstes Thema

odie13690

Hallo,

ich nutze den folgenden Code um einen HomeMatic Schaltaktor zu schalten.
define AktorEin_Aus at *08:00:00 {fhem("define AktorEin at +*{6}02:00:00 set Aktor on-for-timer 12")}
Ich schaue mir das jetzt schon den zweiten Tag an. Weder gestern noch heute hat der Aktor um 8 Uhr geschaltet. Gestern hat er dann zwar um 10 Uhr und 12 Uhr geschaltet, aber danach nicht mehr.
Da ich mir das nicht erklären kann, bitte ich hier um Rat.

Eine Frage am Rande: Wenn ich während einer Zeitschaltung wie oben, Änderungen an der fhem.cfg bzw. der Konfiguration vornehme und diese speichere, läuft die Zeitschaltung weiter oder erst bei der nächsten Initialisierung am nächsten Tag?

odie13690

Pfriemler

Wenn du um 8 einen Timer definierst, der in 2h das erste Mal auslöst, wird um 8 nie eteas passieren. Außerdem ist eine Definition in der Definition für mich immer eine Krücke.
Deine Definition erstellt bei Ausführung eine weitere Definition. Solange Du die nicht anfässt, bleibt sie Aktuell.
Schon mal was von DOIF gehört?

Vom 7Zöller via Tapatalk

"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

odie13690

Zitat von: Pfriemler am 29 April 2015, 08:44:57Schon mal was von DOIF gehört?

Vom 7Zöller via Tapatalk
Gehört/Gelesen ja, aber noch nicht zur praktischen Anwendung gebracht. Wie müsste eine DOIF Anweisung für meinen Fall aussehen?

Für mich wäre wünschenswert, dass ich die Werte für Wiederholung und Timer in der FHEM-Oberfläche anpassen kann und nicht in der fhem.cfg ändern muss.

odie13690

Pfriemler

Zitat von: odie13690 am 29 April 2015, 09:09:20
Für mich wäre wünschenswert, dass ich die Werte für Wiederholung und Timer in der FHEM-Oberfläche anpassen kann und nicht in der fhem.cfg
Ich habe seit Monaten nichts mehr in der fhem.cfg geändert. Ich mache alles über die Konfigurationsoberfläche. Diskussionen über das für und wider einer Manipulation in der fhem.cfg haben hier schon Grabenkriege ausgelöst ...

Möchtest Du die Definition in der Weboberfläche übersichtlich und leicht anpassbar, oder möchtest Du direkt Bedienelemente, mit denen Du Startpunkt, Intervall und Anzahl der Wiederholungen festlegst?

Ansonsten kann ich zum x. Mal nur die Lektüre der hervorragenden Commandref (in der deutschen Fassung nur) zum DOIF empfehlen. DOIF ist extrem vielseitig und imho sowas wie die Hochsprache der Wenn-Dann-Definitionen in FHEM  8)
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

odie13690

Zitat von: Pfriemler am 29 April 2015, 09:32:10
Möchtest Du die Definition in der Weboberfläche übersichtlich und leicht anpassbar, oder möchtest Du direkt Bedienelemente, mit denen Du Startpunkt, Intervall und Anzahl der Wiederholungen festlegst?
Wenn es nicht zu viel verlangt ist, würde ich mir zur Erweiterung meines (noch sehr niedrigen) Horizonts, beide Varianten ansehen und mich dann entscheiden.

Zitat von: Pfriemler am 29 April 2015, 09:32:10
Ansonsten kann ich zum x. Mal nur die Lektüre der hervorragenden Commandref (in der deutschen Fassung nur) zum DOIF empfehlen. DOIF ist extrem vielseitig und imho sowas wie die Hochsprache der Wenn-Dann-Definitionen in FHEM  8)
Das werde ich tun. Wenn ich das richtig einschätze, bist du der "absolute" DOIF-Nutzer :)

Danke schon mal!

odie13690

Damian

#5
Zitat von: odie13690 am 29 April 2015, 10:13:14
Wenn es nicht zu viel verlangt ist, würde ich mir zur Erweiterung meines (noch sehr niedrigen) Horizonts, beide Varianten ansehen und mich dann entscheiden.
Das werde ich tun. Wenn ich das richtig einschätze, bist du der "absolute" DOIF-Nutzer :)

Danke schon mal!

odie13690

alle zwei Stunden zwischen  8 und 20 Uhr.


define AktorEin_Aus DOIF ([?08:00-20:00] and [+02:00]) (set Aktor on-for-timer 12)


hier das Gleiche allerdings immer zur vollen Stunde:

define AktorEin_Aus DOIF ([?08:00-20:00] and [+[2]:00]) (set Aktor on-for-timer 12)

oder einfach:

define AktorEin_Aus DOIF ([08:00] or [10:00] or [12:00] or [14:00] or [16:00] or [18:00] or [20:00]) (set Aktor on-for-timer 12)

in allen drei Fällen

attr AktorEin_Aus do always

definieren.

suche dir was aus ;)

Gruß

Damian


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

odie13690

Hallo und Danke,

der Code ist einfach und für mich nachvollziehbar. Ich würde aber gern bei meinem Ansatz:

Beginne um xx.xx Uhr
Zyklus alle x Stunden
wiederhole x mal
und das x Sekunden lang

bleiben. Ich denke, damit kann ich die für mich entscheidenden Parameter besser steuern, wenn diese dann noch in der FHEM-Oberfläche anpassbar wären.

define AktorEin_Aus DOIF ([?08:00] and [+[2]:00]) (set Aktor on-for-timer 12)
Dies würde wohl den ersten Schaltvorgang um 8 Uhr auslösen und dann alle 2 h wiederholen. Wie kann ich jetzt noch vorgeben, dass der Code (pro Tag) nur x mal ausgeführt wird?

odie13690

Damian

Zitat von: odie13690 am 29 April 2015, 11:24:51
Hallo und Danke,

der Code ist einfach und für mich nachvollziehbar. Ich würde aber gern bei meinem Ansatz:

Beginne um xx.xx Uhr
Zyklus alle x Stunden
wiederhole x mal
und das x Sekunden lang

bleiben. Ich denke, damit kann ich die für mich entscheidenden Parameter besser steuern, wenn diese dann noch in der FHEM-Oberfläche anpassbar wären.

define AktorEin_Aus DOIF ([?08:00] and [+[2]:00]) (set Aktor on-for-timer 12)
Dies würde wohl den ersten Schaltvorgang um 8 Uhr auslösen und dann alle 2 h wiederholen. Wie kann ich jetzt noch vorgeben, dass der Code (pro Tag) nur x mal ausgeführt wird?

odie13690

Das wird so nicht funktionieren. DOIF arbeitet mit Intervallen von bis, wie von mir angegeben. Anzahl von Wiederholungen kann man mit dem Attribut repeatsame beeinflussen. Dann muss man aber einen DOELSE-Fall haben, der eine Zustandsänderung beeinflusst, um mit der Wiederholungszählung bei Null anzufangen.
Zeitvorgaben kann man als indirekte Zeiten z. B. über Dummys vorgeben. Hier noch ein  Beispiel:

define dummy von
set von 08:00

define AktorEin_Aus DOIF ([?[von]-00:00] and [+[2]:00]) (set Aktor on-for-timer 12) DOELSEIF ([00:01])
attr repeatsame 10


DOIF arbeitet im Gegensatz zu notify oder at mit Zuständen (DOELSE(IF)-Fälle), die es sich merkt. Weitere Möglichkeiten mit Zeiten zu spielen kannst du, wie @Priemler schon sagte, in der Commandref zu DOIF nachlesen.

Alle Möglichkeiten des Moduls hier aufzuführen dürfte den Rahmen sprengen.


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

odie13690

Hallo noch mal,

ich habe die DOIF-Schaltung hinbekommen. Ist das "Phänomen", dass die erste Schaltzeit = Von + Wiederholung ist, hier auch so? Von einer Zeitschaltung erwarte ich doch, dass bei mir der erste Schaltvorgang mit der Startzeit (hier 8 Uhr) beginnt und dann in Abständen von 2 Stunden insg. 6 mal geschaltet wird.

odie13690

flurin

#9
Zitat von: odie13690 am 30 April 2015, 11:05:21
Hallo noch mal,

ich habe die DOIF-Schaltung hinbekommen. Ist das "Phänomen", dass die erste Schaltzeit = Von + Wiederholung ist, hier auch so? Von einer Zeitschaltung erwarte ich doch, dass bei mir der erste Schaltvorgang mit der Startzeit (hier 8 Uhr) beginnt und dann in Abständen von 2 Stunden insg. 6 mal geschaltet wird.

odie13690

Einen ähnlichen Fall habe ich so gelöst:


define du_counter dummy
set du_counter 6

define du_interval dummy
set du_interval 02:00

define du_event dummy
attr du_event setList on off



define aktorEin_Aus DOIF ([du_event:?on] or ([+[du_interval]] and [du_event] eq "on"))
  (set Aktor on-for-timer 12,
  attr aktorEin_Aus repeatsame [du_counter],
  trigger du_interval)
DOELSE ()


Mit "du_event" on wird das DOIF gestartet und mit "du_event" off erfolgt ein Reset von "repeatsame".

Gruss
flurin

Pfriemler

@flurin: Warum triggerst Du du_interval? Das verstehe ich nicht.
Sonst schön gelöst, finde ich. Nun noch einen Dummy für die Laufzeit (z.B. du_time, dann "set Aktor on-for-timer [du_zeit]) (?) ... und dann Slider für Startzeit, Intervall und Dauer auf der Oberfläche.

@odie13690: Gute Frage. Das müsste Damian mal erläutern. Gehe ich recht in der Annahme, dass [+[2]:00] nur alle zwei Stunden ab Mitternacht zutrifft und eine Definition wie ([?09:00-00:00] and [+[2]:00]) das erste Mal also um 10 Uhr zutrifft? wie reagiert hingegen ([09:00-00:00] and [+[2]:00]) (also ohne ?): Wird das dann um 9 und ab da alle zwei Stunden getriggert?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

flurin

#11
Zitat von: Pfriemler am 30 April 2015, 13:10:36
@flurin: Warum triggerst Du du_interval? Das verstehe ich nicht.

Mit [du_event:?on] wird der erste Befehl sofort ausgeführt. Damit der zweite Befehl nach dem gewünschten Intervall ausgeführt wird, wird du_interval getriggert. Man könnte es auch so lösen:


define aktorEin_Aus DOIF ([du_event:?on] or ([+[du_interval]] and [du_event] eq "on"))
  (set Aktor on-for-timer 12,
  attr aktorEin_Aus repeatsame [du_counter],
  set du_interval [du_interval])
DOELSE ()

Pfriemler

Die Änderung von du_interval n.m.V. eine Neuberechnung des Timers (timer_1_c1) des DOIF aus. Ebenso wird zumindest bei einer timergesteuerten Auslösung der Timer automatisch neu berechnet, wenn die Def so gestrickt ist. Ändert sich das Reading timer_1_c1 im DOIF also nicht von allein, wenn Du das DOIF durch das Einschalten von du_event aktivierst?
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

flurin

Zitat von: Pfriemler am 30 April 2015, 13:53:50
Die Änderung von du_interval n.m.V. eine Neuberechnung des Timers (timer_1_c1) des DOIF aus. Ebenso wird zumindest bei einer timergesteuerten Auslösung der Timer automatisch neu berechnet, wenn die Def so gestrickt ist. Ändert sich das Reading timer_1_c1 im DOIF also nicht von allein, wenn Du das DOIF durch das Einschalten von du_event aktivierst?

So wie ich es getestet habe, wird der timer_1_c1 bei der DOIF-Definition gesetzt und wird durch "du_event" nicht beeinflusst.
Es würde auch ohne "trigger" funktionieren, das Intervall nach dem ersten Befehl ist dann zufällig zwischen 0 und [du_interval].

Pfriemler

Zitat von: flurin am 30 April 2015, 14:08:38
So wie ich es getestet habe, wird der timer_1_c1 bei der DOIF-Definition gesetzt und wird durch "du_event" nicht beeinflusst.
Es würde auch ohne "trigger" funktionieren, das Intervall nach dem ersten Befehl ist dann zufällig zwischen 0 und [du_interval].
Dann wissen wir das. Danke für die Aufklärung (und ich merk es mir hoffentlich für ähnliche Fälle).
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."