Zeitschaltung mit Timer funktioniert nicht

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

Vorheriges Thema - Nächstes Thema

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

flurin

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  :)

flurin

#17
@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

odie13690

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Pfriemler

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.
"Ä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 ..."

rudolfkoenig

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

odie13690

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

Damian

#23
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

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

flurin

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

odie13690

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

flurin

#27
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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

odie13690

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