DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe

Begonnen von Damian, 06 November 2015, 22:05:57

Vorheriges Thema - Nächstes Thema

Damian

Hallo DOIF-Nutzer,

eine wichtige Funktionalität fehlte bisher im Modul, nämlich wiederholende Ausführungen durch Selbsttriggerung. Dieses Feature wurde nun eingebaut.

Es gibt jetzt ein neues Attribut namens repeatcmd. Wie beim wait-Attribut können pro DO-Fall Sekundenangaben getrennt mit Doppelpunkt angegeben werden.

Syntax: attr <Modulname> repeatcmd <Sekunden für Befehlsfolge des ersten DO-Falls>:<Sekunden für Befehlsfolge des zweiten DO-Falls>:...

Beispiel

define di_push DOIF ([Frost] eq "on")(push Frostmeldung)
attr di_push repeatcmd 3600


Hier wird beim Eintreffen des Ereignisses die push-Meldung stündlich wiederholt, bis Frost ungleich "on" ist.

Die Anzahl der Wiederholungen lässt sich mit dem Attribut repeatsame begrenzen.

Durch

attr di_push repeatsame 3

wird die stündliche Wiederholung bis zu drei mal ausgeführt.

Ebenso lässt sich das neue Attribut mit Zeitangaben kombinieren. Beispiel:

define di DOIF ([08:00])(push Täglich grüßt das Murmeltier)
attr di repeatcmd 300
attr di repeatsame 10
attr di do always


Hier alle 5 Minuten insgesamt 10 mal.

Ebenso sind indirekte Zeitangaben wie bei wait möglich:

attr di_test repeatcmd [dummy_t]:my_function():...

Anwendungsbeispiel: Anwesenheitssimulation

define di_presence_simulation DOIF ([19:00-00:00])(set lamp on-for-timer {(int(rand(1800)+300))}) DOELSE
attr di_presence_simulation repeatcmd rand(3600)+1800
attr di_presence_simulation do always


Das neue Attribut lässt sich mit allen anderen Attributen des Moduls kombinieren.

Die Sekundenangaben müssen größer Null sein.

Testversion befindet sich im Anhang.

Edit: Diese Version wurde eingecheckt.

Gruß

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

Rince

Oh, das klingt nach einem echten Problemlöser für offene Fenster, Türen, fertigen Waschmaschinen und Wäschetrocknern :)
Wer zu meinen Posts eine Frage schreibt und auf eine Antwort wartet, ist hiermit herzlich eingeladen mich per PN darauf aufmerksam zu machen. (Bitte mit Link zum betreffenden Thread)

Damian

Zitat von: Rince am 07 November 2015, 12:31:42
Oh, das klingt nach einem echten Problemlöser für offene Fenster, Türen, fertigen Waschmaschinen und Wäschetrocknern :)

ja, insbesondere bei nicht zyklischen sendenden Sensoren. Man konnte zwar über relative Zeitangaben (z. B. [+00:01]) in der Definition das Modul immer wieder antriggern, allerdings wurde dann das Modul unnötig ständig getriggert.

Ich habe im ersten Post noch ein Beispiel für Anwendungssimulation in Kombination mit Zeitintervallen angegeben.

Gruß

Damian

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

Omega

Klasse, wieder mehr Möglichkeiten...

Allerdings verstehe ich in dem Beispiel

define di DOIF ([08:00])(push Täglich grüßt das Murmeltier)
attr di repeatcmd 300
attr di repeatsame 10
attr di do always

das Attribut do always nicht.

Mein Verständnis: durch repeatcmd wird alle 5 Min wiederholt (das ist doch implizit der do always), durch repeatsame erfolgt allerdings eine Begrenzung auf 10 mal.
In den Beispielen zuvor wurde für Wiederholungen ja auch kein do always benötigt.

LG
Holger

NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

Damian

Zitat von: Omega am 09 November 2015, 10:43:55
Klasse, wieder mehr Möglichkeiten...

Allerdings verstehe ich in dem Beispiel

define di DOIF ([08:00])(push Täglich grüßt das Murmeltier)
attr di repeatcmd 300
attr di repeatsame 10
attr di do always

das Attribut do always nicht.

Mein Verständnis: durch repeatcmd wird alle 5 Min wiederholt (das ist doch implizit der do always), durch repeatsame erfolgt allerdings eine Begrenzung auf 10 mal.
In den Beispielen zuvor wurde für Wiederholungen ja auch kein do always benötigt.

LG
Holger

ja, in Verbindung mit dem neuen Attribut repeatcmd, bezieht sich repeatsame auf die Anzahl der automatischen Wiederholungen. Damit auch morgen um 8:00 Uhr alles funktioniert muss noch das do always dazu.

Gruß

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

sentinel1

Hallo Damian,

ist es möglich bei DOIF die so aufgebaut sind (Bedingung1) (Kommandos1) (Kommandos2) zb. nur cmd2 zu wiederholen wie bei  Wait-Attribut?

Gruß
Claudiu

Damian

Zitat von: sentinel1 am 09 November 2015, 18:09:03
Hallo Damian,

ist es möglich bei DOIF die so aufgebaut sind (Bedingung1) (Kommandos1) (Kommandos2) zb. nur cmd2 zu wiederholen wie bei  Wait-Attribut?

Gruß
Claudiu

Nein. Z. Zt. kann man nur den kompletten DO-Fall  wiederholen lassen.

Gruß

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

Sirel

Hi Damian,

das Feature funktioniert wunderbar! :D

Besten Dank - darauf habe ich gewartet!

BG,
Max

Damian

Da es bisher keine Fehlermeldungen zu dieser Version gibt, werde ich sie in den nächsten Tagen einchecken.

Gruß

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

Damian

Zitat von: Damian am 13 November 2015, 21:22:37
Da es bisher keine Fehlermeldungen zu dieser Version gibt, werde ich sie in den nächsten Tagen einchecken.

Diese Version wurde eingecheckt und ist ab morgen per Update verfügbar.

Gruß

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

heikoh81

Hallo Damian,

Zitat von: Damian am 09 November 2015, 18:28:54
Nein. Z. Zt. kann man nur den kompletten DO-Fall  wiederholen lassen.

Ich könnte mir für teilweise Wdh. Anwendungsszenarien vorstellen.
Vielleicht hast du ja irgendwann mal Zeit, das noch einzubauen in ein zukünftiges Update :-)

Viele Grüße,
Heiko

moonsorrox

Könnte man ein DOIF nicht auch als eine Art Zufallstimer oder Urlaubsschaltung benutzen, so in der Art ich sage mal ich möchte das er
1. in der Zeit von-bis immer an ist - das geht ja sowieso
2. in der Zeit von-bis immer mal wieder Aus/Ein schaltet
3. in der Zeit von-bis zufällig mal Ein schaltet
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

heikoh81

Hallo moonsorrox,

Zitat von: moonsorrox am 12 Januar 2016, 19:34:36
Könnte man ein DOIF nicht auch als eine Art Zufallstimer oder Urlaubsschaltung benutzen, so in der Art ich sage mal ich möchte das er
2. in der Zeit von-bis immer mal wieder Aus/Ein schaltet
3. in der Zeit von-bis zufällig mal Ein schaltet

Ist das nicht was Damian im Start-Beitrag in diesem Thread als Beispiel aufführt oder meinst du etwas anderes?
Zitat
Anwendungsbeispiel: Anwesenheitssimulation

define di_presence_simulation DOIF ([19:00-00:00])(set lamp on-for-timer {(int(rand(1800)+300))}) DOELSE
attr di_presence_simulation repeatcmd rand(3600)+1800
attr di_presence_simulation do always


Viele Grüße,
Heiko

moonsorrox

Hab ich jetzt gar nicht drauf geachtet..!  :-\
Aber ja ist ja etwas ähnliches...! Muss mich mal mit beschäftigen oder eben mal nachstellen...
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

#14
ich habe nochmal eine Frage zu dem Anwendungsbeispiel: Anwesenheitssimulation
Ich habe das mal Testweise nach gestellt um zu sehen wie es funktioniert, aber so ganz ist mir das nicht klar

Hier mal das list:
Internals:
   CFGFN      ./FHEM/Test.cfg
   DEF        ([19:00-00:45])(set Dachlicht_03 on-for-timer {(int(rand(1800)+300))}) DOELSE
   NAME       di_presence_simulation
   NR         3688
   NTFY_ORDER 50-di_presence_simulation
   STATE      cmd_2
   TYPE       DOIF
   Readings:
     2016-01-19 23:54:11   Event           wait_timer: no timer
     2016-01-20 00:45:00   cmd_event       timer_2
     2016-01-20 00:45:00   cmd_nr          2
     2016-01-20 00:45:00   state           cmd_2
     2016-01-19 19:00:00   timer_1_c1      20.01.2016 19:00:00
     2016-01-20 00:45:00   timer_2_c1      21.01.2016 00:45:00
     2016-01-20 00:45:00   wait_timer      no timer
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
   Do:
     0:
       0          set Dachlicht_03 on-for-timer {(int(rand(1800)+300))}
     1:
       0
   Helper:
     event      batVoltage: 3.03
     globalinit 1
     last_timer 2
     sleepdevice timer_1
     sleepsubtimer 0
     sleeptimer -1
     triggerDev Temperatur_Bad
     triggerEvents:
       batVoltage: 3.03
       battery: ok
       humidity: 31
       luminosity: 6.93
       T: 20.1 H: 31 L: 6.93
       temperature: 20.1
   Internals:
   Itimer:
   Readings:
   Realtime:
     0          19:00:00
     1          00:45:00
   Regexp:
   State:
   Time:
     0          19:00:00
     1          00:45:00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   alias      Anwesenheitssimulation Licht EG
   do         always
   group      Anwesenheitssimulation
   icon       light_on-for-timer@#F0E68C
   repeatcmd  rand(3600)+1800
   room       AutomationTest



wenn ich jetzt in mein Log schaue sehe ich folgende Ereignisse die ich nicht verstehe.
Die Angebane hinter "on-for-timer" sind ja die Sekunden, dass bedeutet doch das solange das Dachlicht eingeschaltet ist.
Wenn ich jetzt mal 21:09:32 nehme bleibt das Licht für 1691sec. eingeschaltet dass sind ca. 28:18 min. das heißt das Licht ist eigentlich bis 22:37 Uhr eingeschaltet, aber da kommt doch vorher schon die nächste Zeit 21:47:57 Uhr und setzt erneut den on-for-timer auf 529sec. das heißt die Beleuchtung ist doch gar nicht ausgegangen...! oder verstehe ich das falsch..?

hier mal die Logeinträge

2016.01.19 22:57:09 3: CUL_HM set Dachlicht_03 on-for-timer 1703
2016.01.19 22:18:54 3: CUL_HM set Dachlicht_03 on-for-timer 899
2016.01.19 21:47:57 3: CUL_HM set Dachlicht_03 on-for-timer 529
2016.01.19 21:09:32 3: CUL_HM set Dachlicht_03 on-for-timer 1691
2016.01.19 20:06:45 3: CUL_HM set Dachlicht_03 on-for-timer 1014
2016.01.19 19:00:00 3: CUL_HM set Dachlicht_03 on-for-timer 1125

Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM