FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: odie13690 am 29 April 2015, 08:14:43

Titel: Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 29 April 2015, 08:14:43
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
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Pfriemler am 29 April 2015, 08:44:57
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

Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 29 April 2015, 09:09:20
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
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Pfriemler am 29 April 2015, 09:32:10
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)
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 29 April 2015, 10:13:14
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
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Damian am 29 April 2015, 10:50:49
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


Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag 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
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Damian am 29 April 2015, 13:29:17
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
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag 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
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 30 April 2015, 11:54:15
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
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Pfriemler am 30 April 2015, 13:10:36
@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?
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 30 April 2015, 13:30:25
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 ()
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag 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?
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 30 April 2015, 14:08:38
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].
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Pfriemler am 30 April 2015, 15:03:35
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).
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Damian am 30 April 2015, 16:21:05
Zitat von: Pfriemler am 30 April 2015, 13:10:36
@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?

Das Intervall und die wiederholende Zeittriggerung sind von einander unabhängig und werden nur durch das and miteinander verknüpft. [+[2]:00] bedeutet Triggerung um 00:00, 02:02, 04:00 Uhr usw. Das Intervall mit Fragezeichen triggert gar nicht, ohne Fragezeichen triggert zum Beginn und zum Ende, d. h. bei ([09:00-00:00] and [+[2]:00]) wird sowohl um 09:00 Uhr als dann um 10:00, 12:00 Uhr usw. getriggert. Mit einem Fragezeichen würde um 09:00 Uhr nicht getriggert.

Die Syntax für Triggerung ab einem Zeitpunkt alle x-Minuten ist nicht programmiert.

Der Einzige Nachteil bei flurins Lösung ist die Tatsache, dass durch das Setzen des Attributs das Save-Fragezeichen aufleuchtet, weil sich die Konfiguration ändert.

Gruß

Damian
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 30 April 2015, 16:36:07
Zitat von: Damian am 30 April 2015, 16:21:05
Das Intervall und die wiederholende Zeittriggerung sind von einander unabhängig und werden nur durch das and miteinander verknüpft. [+[2]:00] bedeutet Triggerung um 00:00, 02:02, 04:00 Uhr usw. Das Intervall mit Fragezeichen triggert gar nicht, ohne Fragezeichen triggert zum Beginn und zum Ende, d. h. bei ([09:00-00:00] and [+[2]:00]) wird sowohl um 09:00 Uhr als dann um 10:00, 12:00 Uhr usw. getriggert. Mit einem Fragezeichen würde um 09:00 Uhr nicht getriggert.

Die Syntax für Triggerung ab einem Zeitpunkt alle x-Minuten ist nicht programmiert.

Der Einzige Nachteil bei flurins Lösung ist die Tatsache, dass durch das Setzen des Attributs das Save-Fragezeichen aufleuchtet, weil sich die Konfiguration ändert.

Gruß

Damian

... wenn "du_counter" fix ist, dann kann man es so definieren:


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


aber noch besser wäre es so:


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


das ist aber (noch) nicht implementiert  :)
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 02 Mai 2015, 16:20:09
@odie13690

Hier noch eine Variante:


define du_interval dummy
set du_interval 7200

define du_repeat dummy
set du_repeat 6


7200 Sekunden = 2 Stunden.


define aktorEin_Aus DOIF ([08:00] or [[du_repeat:time]])
  (set Aktor on-for-timer 12,
  {set_repeat_time("du_repeat","du_interval")})
attr aktorEin_Aus do always


set_repeat_time > siehe:

http://forum.fhem.de/index.php/topic,36814.0.html
(http://forum.fhem.de/index.php/topic,36814.0.html)
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 05 Mai 2015, 10:19:50
Hallo noch mal,

ich habe es jetzt mit folgendem Code versucht:
define Von dummy
set Von 06:00
define Dauer dummy
set Dauer 12
define Anzahl dummy
set Anzahl 6

define AktorAn_Aus DOIF ([?[Von]-22:00] and [+[2]:00]) (set Aktor on-for-timer [Dauer])
attr AktorAn_Aus do always
attr AktorAn_Aus repeatsame Anzahl


Praktisch stellt sich das jetzt so dar, dass der erste Schaltvorgang um 8 Uhr stattfindet. Der Zweite (eigentlich um 10 Uhr) bleibt aus.

Die DOIF-Timer sehen so aus:
cmd_count  1  2015-05-05 08:00:00
cmd_event  timer_3  2015-05-05 08:00:00
cmd_nr  1  2015-05-05 08:00:00
state  cmd_1  2015-05-05 08:00:00
timer_1_c1  06.05.2015 06:00:00  2015-05-05 07:00:15
timer_2_c1  05.05.2015 22:00:00  2015-05-05 07:00:15
timer_3_c1  05.05.2015 12:00:00  2015-05-05 10:00:00


Ich lese das so, dass um 10 Uhr eigentlich ein Schaltvorgang hätte ausgelöst werden müssen. Wie am Count ersichtlich, ist aber nur der Eine um 8 Uhr erfolgt.

Ich verstehe es nicht :-[

odie13690
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Damian am 05 Mai 2015, 18:31:41
Zitat von: odie13690 am 05 Mai 2015, 10:19:50
attr AktorAn_Aus repeatsame Anzahl

Bei Attributen kannst du keine Dummys angeben, hier kannst also nur mit konkreten Werten arbeiten:

attr AktorAn_Aus repeatsame 6

Gruß

Damian
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Pfriemler am 05 Mai 2015, 20:45:12
Ergänzend zu Damian: Eine feste Definition (als Abspeicherung in der fhem.cfg) funktioniert mit einer Variablen nicht. Gleichwohl kannst Du veranlassen (etwa durch ein Notify oder ein DOIF), dass bei einer Änderung des Dummys der Befehl "attr AktorAn_Aus repeatsame X" mit X als Entsprechung abgeschickt und damit das DOIF quasi modifiziert wird.
flurins Vorschlag weiter oben hat aber auch was.
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: rudolfkoenig am 05 Mai 2015, 22:36:27
Das urspruengliche Problem kann man auch mit der  "Niedrigsprache" at auch einfach/verstaendlich loesen:

define AktorEin_Aus at +*02:00 set Aktor on-for-timer 12
attr AktorEin_Aus alignTime 00:00
attr AktorEin_Aus disabledForIntervals 00-07 19-23
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 06 Mai 2015, 07:17:10
Zitat von: Damian am 05 Mai 2015, 18:31:41
Bei Attributen kannst du keine Dummys angeben, hier kannst also nur mit konkreten Werten arbeiten:

attr AktorAn_Aus repeatsame 6

Gruß

Damian

Danke für die Bestätigung. Dass habe ich gestern durch weiteres probieren auch herausgefunden. :-\ Da es zu diesem Zeitpunkt bereits Nachmittag war, lief dann erst der Counter (repeatsame) los, was zur Folge hatte, dass er heute früh die Sechs noch nicht erreicht hatte und nun weiter läuft.

Wie setze ich den Counter zu Beginn eines neuen Tages auf Null zurück?

Zitat von: rudolfkoenig am 05 Mai 2015, 22:36:27
Das urspruengliche Problem kann man auch mit der  "Niedrigsprache" at auch einfach/verstaendlich loesen:

define AktorEin_Aus at +*02:00 set Aktor on-for-timer 12
attr AktorEin_Aus alignTime 00:00
attr AktorEin_Aus disabledForIntervals 00-07 19-23

Vielen Dank auch für deine Antwort. Wie so oft, führen viele Wege nach Rom... Ich schaue als Neuling, was für mich am einfachsten/verständlichsten und praktischsten ist/erscheint. Wie du am Eröffnungsbeitrag siehst, habe ich mit "Niedrigsprache" begonnen (und noch nicht gänzlich aus den Augen verloren).

Das was flurin gepostet hat, ist mir, zumindest noch, zu hoch. Das kann ich nicht nachvollziehen und damit nicht für mich verwenden.

Wie bereits in einem Beitrag geschildert, wäre mir wichtig, dass ich die "Variablen" über die Fhem-Oberfläche einfach anpassen kann, ohne immer die DEF selbst ändern zu müssen, geschweige denn direkt in der fhem.cfg zu editieren.
Leider passt dass mit repeatsame ja wieder nicht.

odie13690
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Damian am 06 Mai 2015, 09:47:27
Zitat von: odie13690 am 06 Mai 2015, 07:17:10
Danke für die Bestätigung. Dass habe ich gestern durch weiteres probieren auch herausgefunden. :-\ Da es zu diesem Zeitpunkt bereits Nachmittag war, lief dann erst der Counter (repeatsame) los, was zur Folge hatte, dass er heute früh die Sechs noch nicht erreicht hatte und nun weiter läuft.

Wie setze ich den Counter zu Beginn eines neuen Tages auf Null zurück?
Vielen Dank auch für deine Antwort. Wie so oft, führen viele Wege nach Rom... Ich schaue als Neuling, was für mich am einfachsten/verständlichsten und praktischsten ist/erscheint. Wie du am Eröffnungsbeitrag siehst, habe ich mit "Niedrigsprache" begonnen (und noch nicht gänzlich aus den Augen verloren).

Das was flurin gepostet hat, ist mir, zumindest noch, zu hoch. Das kann ich nicht nachvollziehen und damit nicht für mich verwenden.

Wie bereits in einem Beitrag geschildert, wäre mir wichtig, dass ich die "Variablen" über die Fhem-Oberfläche einfach anpassen kann, ohne immer die DEF selbst ändern zu müssen, geschweige denn direkt in der fhem.cfg zu editieren.
Leider passt dass mit repeatsame ja wieder nicht.

odie13690

define Anzahl dummy

define di_repeat DOIF ([Anzahl:?]) (attr AktorAn_Aus repeatsame [Anzahl])
define di_repeat do always


Zum Zurücksetzen von repeatsame habe ich bereits im Post Nr. 8 eine Lösung präsentiert.

Gruß

Damian

Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 06 Mai 2015, 10:58:54
Zitat von: Damian am 06 Mai 2015, 09:47:27
define Anzahl dummy

define di_repeat DOIF ([Anzahl:?]) (attr AktorAn_Aus repeatsame [Anzahl])
define di_repeat do always


Zitat
Der Einzige Nachteil bei flurins Lösung ist die Tatsache, dass durch das Setzen des Attributs das Save-Fragezeichen aufleuchtet, weil sich die Konfiguration ändert.

Das ist hier auch der Fall  ;) . Deshalb habe ich es mit der Repeat-Funktion gelöst, um dieses "Problem" zu vermeiden.

Gruss
flurin
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Damian am 06 Mai 2015, 11:23:01
Zitat von: flurin am 06 Mai 2015, 10:58:54
Das ist hier auch der Fall  ;) . Deshalb habe ich es mit der Repeat-Funktion gelöst, um dieses "Problem" zu vermeiden.

Gruss
flurin

Ja. Ich halte es bei diese Problemstellung eh nicht für sinnvoll mit der Anzahl von Wiederholung zu arbeiten. Denn wenn man die Anfangszeit angibt, dann sollte man ohnehin im Kopf überschlagen, wie viele Wiederholungen bis zu Mitternacht ab dem vorgegebenen Zeitpunkt maximal überhaupt sinnvoll sind. Und wenn ich sowieso kopfrechnen muss, dann kann ich genauso im Kopf  aus der Anzahl der Wiederholungen überschlagen bis wann der set Befehl laufen soll. Das kann ich aber gleich mit von-, bis-Angaben elegant über dummy lösen.

Gruß

Damian
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 06 Mai 2015, 11:43:44
Zitat von: Damian am 06 Mai 2015, 09:47:27
Zum Zurücksetzen von repeatsame habe ich bereits im Post Nr. 8 eine Lösung präsentiert.

Ups, das habe ich unbewusst überlesen :-X Und dabei habe ich mich schon gefragt, weshalb es eine DOELSE-Anweisung braucht.

Zitat von: Damian am 30 April 2015, 16:21:05
Die Syntax für Triggerung ab einem Zeitpunkt alle x-Minuten ist nicht programmiert.

Darf man sich das wünschen? ::)

Zitat von: flurin am 06 Mai 2015, 10:58:54
Deshalb habe ich es mit der Repeat-Funktion gelöst, um dieses "Problem" zu vermeiden.

Und da sind wir schon bei meinem Problem. Ich habe deine Funktion noch nicht mal soweit durchschaut, dass es dabei "nur" um das zurücksetzen des Counters ging. :-\

Ich muss mir das noch mal in Ruhe zu Gemüte führen...

... oder ich nehme doch die "Niedrigsprache". Da verstehe ich deutlich mehr...

odie13690
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 06 Mai 2015, 12:04:47
Zitat von: odie13690 am 06 Mai 2015, 11:43:44
Ups, das habe ich unbewusst überlesen :-X Und dabei habe ich mich schon gefragt, weshalb es eine DOELSE-Anweisung braucht.

Darf man sich das wünschen? ::)

Und da sind wir schon bei meinem Problem. Ich habe deine Funktion noch nicht mal soweit durchschaut, dass es dabei "nur" um das zurücksetzen des Counters ging. :-\

Ich muss mir das noch mal in Ruhe zu Gemüte führen...

... oder ich nehme doch die "Niedrigsprache". Da verstehe ich deutlich mehr...

odie13690

Hallo odie13690

Ich verstehe deine Frust: die Aufgabe ist eigentlich einfach, nur meines Wissens lässt es sich nicht so lösen, dass es einfach verständlich ist.
Wenn du auf die Flexibilität der Erfassung über das Frontend verzichten kannst, ist die Lösung mit "at" Okey.
Möchtest du jedoch eine flexible/ausbaubare Lösung, dann würde ich es mit der Repeat-Funktion mal versuchen. Du musst die Lösung nicht unbedingt verstehen, so wie du "at" oder "notify" auch verwendest ohne den Perl-Code zu verstehen  ;)

Die Benutzerschnittstelle ist wie von dir gewünscht einfach:


define du_begin dummy
set du_begin 08:00

define du_repeat dummy
set du_repeat 6

define du_interval dummy
set du_interval 7200

define du_duration dummy
set du_duration 12


Die Lösung mit DOIF sowie die Repeat-Funktion kannst du als Blackbox ansehen:


define di_repeat_cmd DOIF ([[du_begin]] or [[du_repeat:time]])
(set Aktor on-for-timer [du_duration], {set_repeat_time("du_repeat","du_interval")})
attr di_repeat_cmd do always


Gruss
flurin
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: Damian am 06 Mai 2015, 13:03:47
Zitat von: odie13690 am 06 Mai 2015, 11:43:44
... oder ich nehme doch die "Niedrigsprache". Da verstehe ich deutlich mehr...

Aber nur, wenn du deine Vorgaben nicht über dummys machen willst, ansonsten musst du die "Niedrigsprache" um die "Hochsprache" Perl erweitern. ;)

Gruß

Damian
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 06 Mai 2015, 13:28:39
Zitat von: flurin am 06 Mai 2015, 12:04:47
Ich verstehe deine Frust: die Aufgabe ist eigentlich einfach, nur meines Wissen lässt es sich nicht so lösen, dass es einfach verständlich ist.

Gruss
flurin

Frust gibts eigentlich nicht, nur eigenes Unvermögen :o Aber ich lasse nicht locker und werde mich mal an deiner Lösung probieren 8)

Zitat von: Damian am 06 Mai 2015, 13:03:47
Aber nur, wenn du deine Vorgaben nicht über dummys machen willst
Gruß

Damian


Hm, das ist noch ein Argument den Kopf nicht in den Sand, sondern in die "Hochsprache" zu stecken...

DANKE an dieser Stelle für die hilfreichen Informationen. Als Newbie wird einem nicht in jedem Forum so viel Hilfe zu Teil! :)

odie13690
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 07 Mai 2015, 09:13:06
Guten Morgen,

habe mich daran gemacht, deinen Code einzuarbeiten. Beim Versuch define di_repeat_cmd DOIF ([[du_begin]] or [[du_repeat:time]]) (set Aktor on-for-timer [du_duration], {set_repeat_time("du_repeat","du_interval")}) einzugeben, kommt diese Fehlermeldung di_repeat_cmd DOIF: reading does not exist: du_repeat:time: [du_repeat:time] die ich nicht nachvollziehen kann.

Meine Schritte der Einarbeitung:

Benötige ich noch du_event und die entsprechende Definition aus dem Thema: http://forum.fhem.de/index.php/topic,36814.0.html ?

odie13690
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 07 Mai 2015, 09:32:01
Zitat von: odie13690 am 07 Mai 2015, 09:13:06
di_repeat_cmd DOIF: reading does not exist: du_repeat:time: [du_repeat:time]

Damit die Fehlermeldung nicht kommt, kannst du im FHEM-Eingabefeld das Reading einmalig manuell eingeben:


setreading du_repeat time 00:00


das Reading wird dann von der Repeat-Funktion richtig gesetzt.

Gruss
flurin
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 07 Mai 2015, 10:51:15
Hallo,

Nun habe ich keine Fehlermeldung mehr bekommen.

Benötige ich noch du_event und die entsprechende Definition aus dem Thema: http://forum.fhem.de/index.php/topic,36814.0.html ? oder wie starte ich die Funktion?

odie13690
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 07 Mai 2015, 11:11:43
Zitat von: odie13690 am 07 Mai 2015, 10:51:15
Hallo,

Nun habe ich keine Fehlermeldung mehr bekommen.

Benötige ich noch du_event und die entsprechende Definition aus dem Thema: http://forum.fhem.de/index.php/topic,36814.0.html ? oder wie starte ich die Funktion?

odie13690

du_event brauchst du in deinem Fall nicht. Die Funktion wird zur "du_begin" Zeit gestartet; zum Testen kannst du eine aktuelle Zeit + 1 Minute eingeben (aktuelle Zeit 11:09 > Eingabe 11:10):


set du_begin 11:10
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 09 Mai 2015, 22:48:08
Hallo Flurin,

habe mir das jetzt zwei Tage ausprobiert. Prinzipiell funktioniert alles wie es soll. Was allerdings komisch ist, dass die Funktion immer eine Wiederholung mehr macht als angegeben.

Dann wäre es schön, wenn die Funktion die Wiederholungen um 0.00 Uhr auf 0 setzt, unabhängig davon, ob schon alle Wiederholungen abgearbeitet sind.

Danke!

odie13690
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 11 Mai 2015, 08:54:00
Zitat von: odie13690 am 09 Mai 2015, 22:48:08
Was allerdings komisch ist, dass die Funktion immer eine Wiederholung mehr macht als angegeben.

Das habe ich am 7.5.2015 bereits korrigiert. Kopiere die Funktion nochmal, es sollte richtig zählen.

http://forum.fhem.de/index.php/topic,36814.0.html (http://forum.fhem.de/index.php/topic,36814.0.html)

Zitat
Dann wäre es schön, wenn die Funktion die Wiederholungen um 0.00 Uhr auf 0 setzt, unabhängig davon, ob schon alle Wiederholungen abgearbeitet sind.

Mal schauen, was man machen kann. ...

Gruss
flurin
Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: flurin am 11 Mai 2015, 09:49:13
Zitat von: odie13690 am 09 Mai 2015, 22:48:08
Dann wäre es schön, wenn die Funktion die Wiederholungen um 0.00 Uhr auf 0 setzt, unabhängig davon, ob schon alle Wiederholungen abgearbeitet sind.

Versuchs mal mit einem zusätzlichen DOIF:


define di_reset_count DOIF ([00:00:05]) (setreading du_repeat time 00:00, setreading du_repeat count 0)
attr di_reset_count do always


Titel: Antw:Zeitschaltung mit Timer funktioniert nicht
Beitrag von: odie13690 am 13 Mai 2015, 11:29:27
Hallo Flurin,

Danke! Habe es gerade eingearbeitet und werde testen :D

odie13690