FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Talkabout am 15 August 2015, 12:10:57

Titel: "at" - Relative Zeit pro Aufruf erhöhen
Beitrag von: Talkabout am 15 August 2015, 12:10:57
Hallo zusammen,

gibt es eine Möglichkeit einem "at", welches so definiert ist:

define OpenTimer at +*00:20:00 {...}

mitzuteilen, dass nach jedem Aufruf die relative Zeit von 20 Minuten um z.b. 10 Minuten erhöht wird? Heisst also, dass das at zu folgenden Zeiten getriggert werden würde:

+20 Minuten
+50 Minuten
+90 Minuten
+140 Minuten
...

Mein Use Case ist folgender: Ich habe einen Reminder laufen, der mir aktuell alle 20 Minuten mitteilt, dass ein Fenster geöffnet ist. Ich möchte gerne, dass bei diesem Reminder, je öfter er kommt, die Zeitabstände größer werden.

Hoffe da kann mir einer helfen!

Danke!

Gruss
Titel: Antw:"at" - Relative Zeit pro Aufruf erhöhen
Beitrag von: rudolfkoenig am 15 August 2015, 12:32:23
Mwn nur indem man im at_Exec die Definition geaendert wird.
Titel: Antw:"at" - Relative Zeit pro Aufruf erhöhen
Beitrag von: Damian am 15 August 2015, 14:10:23
Zitat von: Talkabout am 15 August 2015, 12:10:57
Hallo zusammen,

gibt es eine Möglichkeit einem "at", welches so definiert ist:

define OpenTimer at +*00:20:00 {...}

mitzuteilen, dass nach jedem Aufruf die relative Zeit von 20 Minuten um z.b. 10 Minuten erhöht wird? Heisst also, dass das at zu folgenden Zeiten getriggert werden würde:

+20 Minuten
+50 Minuten
+90 Minuten
+140 Minuten
...

Mein Use Case ist folgender: Ich habe einen Reminder laufen, der mir aktuell alle 20 Minuten mitteilt, dass ein Fenster geöffnet ist. Ich möchte gerne, dass bei diesem Reminder, je öfter er kommt, die Zeitabstände größer werden.

Hoffe da kann mir einer helfen!

Danke!

Gruss

Du kannst es mit indirekten Zeitangaben machen:

define sec dummy
set sec 1200

define di_sec DOIF ([+[sec]]) (set ... , set sec {([sec]+1800)})
attr di_sec do always



Gruß

Damian
Titel: Antw:"at" - Relative Zeit pro Aufruf erhöhen
Beitrag von: Talkabout am 15 August 2015, 14:32:12
Zitat von: Damian am 15 August 2015, 14:10:23
Du kannst es mit indirekten Zeitangaben machen:

define sec dummy
set sec 1200

define di_sec DOIF ([+[sec]]) (set ... , set sec {([sec]+1800)})
attr di_sec do always



Gruß

Damian
Hallo Damian,

danke für den Hinweis!

da ich die Anforderung an den "at"-Befehl aber durchaus als sinnvoll erachte, habe ich einen Patch erstellt, der die von mir genannte Funktionalität in dieses Hilfsmodul integriert.

@Rudi: vielleicht kannst Du es dir bei Gelegenheit mal anschauen. Die Doku habe ich noch nicht angepasst, kann ich aber tun, wenn Du diese Funktionalität in den Standard aufnehmen möchtest. Syntax:

define Test_At at +*{2}[00:20:00]00:20:00 {...}

damit wird ein "at" definiert, dass initial alle 20 Minuten getriggert wird. Über das Statement in den eckigen Klammer definiert man, dass pro Aufruf die Trigger-Zeit um 20 Minuten nach hinten geschoben werden soll. Heisst also, dass dieses "at" folgende Trigger-Zeiten hat:

nach 20 Minuten
dann nach 40 Minuten
dann nach 60 Minuten
dann nach 80 Minuten
...

Zusätzlich dazu kann man der Verzögerung auch noch ein "Vorzeichen" mitgeben. '+' ist dabei das Standard-Verhalten (Verzögerung nach hinten), '-' macht genau das umgekehrte und verkürzt die Trigger-Zeit pro Aufruf.

Gruss
Titel: Antw:"at" - Relative Zeit pro Aufruf erhöhen
Beitrag von: rudolfkoenig am 16 August 2015, 11:45:08
Die at definition bzw. TimeSpec ist mAn jetzt schon kompliziert genug.

Gegenangebot (eingecheckt): die Perl-Funktion Each, was bei jedem Aufruf den naechsten Wert aus der Liste zurueckliefert. Damit ist dein 20,50,90,140 so zu bauen:
define Test_at at +*{4}{Each("Test_at","00:20,00:50,01:30,02:20")} {...}
Nach dem letzten Element faengt Each wieder von vorne an. Der erste Parameter ist irgendein device, hier wird mit EACH_INDEX der letzte Index gespeichert. Als optionalen letzten Parameter kann man den Trenner angeben, default ist ",", da at kein Leerzeichen in der Definition mag. Vmtl. kann man Each auch anderweitig nutzen, z.Bsp. als neue Art von toggle:
define Test_ntfy notify Button { fhem "set Lamp ".Each("Lamp", "on,off") }
Titel: Antw:"at" - Relative Zeit pro Aufruf erhöhen
Beitrag von: Talkabout am 16 August 2015, 12:18:18
Zitat von: rudolfkoenig am 16 August 2015, 11:45:08
Die at definition bzw. TimeSpec ist mAn jetzt schon kompliziert genug.

Gegenangebot (eingecheckt): die Perl-Funktion Each, was bei jedem Aufruf den naechsten Wert aus der Liste zurueckliefert. Damit ist dein 20,50,90,140 so zu bauen:
define Test_at at +*{4}{Each("Test_at","00:20,00:50,01:30,02:20")} {...}
Nach dem letzten Element faengt Each wieder von vorne an. Der erste Parameter ist irgendein device, hier wird mit EACH_INDEX der letzte Index gespeichert. Als optionalen letzten Parameter kann man den Trenner angeben, default ist ",", da at kein Leerzeichen in der Definition mag. Vmtl. kann man Each auch anderweitig nutzen, z.Bsp. als neue Art von toggle:
define Test_ntfy notify Button { fhem "set Lamp ".Each("Lamp", "on,off") }
Hallo Rudi,

danke für das Feedback!

Ich habe es mal ausprobiert und es scheint zu funktionieren. Unschön ist die Tatsache, dass man die Zeiten manuell angeben muss. Aber gut, ich denke damit kann ich leben.

Danke!

Gruss
Titel: Antw:"at" - Relative Zeit pro Aufruf erhöhen
Beitrag von: rudolfkoenig am 16 August 2015, 13:38:47
ZitatUnschön ist die Tatsache, dass man die Zeiten manuell angeben muss.

Dafuer funktioniert damit deine urspruengliche Anforderung, was mit deinem Patch wiederum nicht tut :)
Titel: Antw:"at" - Relative Zeit pro Aufruf erhöhen
Beitrag von: Talkabout am 16 August 2015, 14:38:25
Zitat von: rudolfkoenig am 16 August 2015, 13:38:47
Dafuer funktioniert damit deine urspruengliche Anforderung, was mit deinem Patch wiederum nicht tut :)
Meine Anforderung war erst einmal nur dass die Zeit regelmässig erhöht wird. Das funktionierte mit dem Patch auch. Die manuelle Eingabe ist dann gut, wenn ich abschätzen kann, wie häufig die Erhöhung stattfinden wird. Im Falle meiner Fenster weiss ich das aber nicht. Ich habe aber mit Deiner Lösung jetzt die Konfiguration bei mir so integriert, dass es für alle Fälle funktionieren sollte.

Danke Dir!

Gruss