FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Damian am 06 November 2015, 22:05:57

Titel: DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 06 November 2015, 22:05:57
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
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag 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 :)
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 07 November 2015, 12:45:52
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

Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag 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

Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 09 November 2015, 11:04:33
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
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag 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
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 09 November 2015, 18:28:54
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
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Sirel am 10 November 2015, 22:47:02
Hi Damian,

das Feature funktioniert wunderbar! :D

Besten Dank - darauf habe ich gewartet!

BG,
Max
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag 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.

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 16 November 2015, 20:45:23
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
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: heikoh81 am 10 Januar 2016, 23:30:36
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
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag 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
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
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: heikoh81 am 12 Januar 2016, 22:15:42
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
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 12 Januar 2016, 22:26:56
Hab ich jetzt gar nicht drauf geachtet..!  :-\
Aber ja ist ja etwas ähnliches...! Muss mich mal mit beschäftigen oder eben mal nachstellen...
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 20 Januar 2016, 13:44:46
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

Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 20 Januar 2016, 17:16:13
Zitat von: moonsorrox am 20 Januar 2016, 13:44:46
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


In dem Fall geht sie wohl nicht aus. Wenn deine Lampe auf jeden Fall ausgehen soll, dann musst du den festen Wiederholungsanteil höher setzen z. B.

repeatcmd  rand(3600)+2600

Da rand(3600)+2600  immer größer ist, als die on-for-time-Zeit von rand(1800)+300 muss die Lampe vorher ausgehen, bevor sie wieder angeht.

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: dk3572 am 20 Januar 2016, 17:23:17
Hallo,
ich möchte eine Nachricht, wenn das Fenster länger als 20 sec. offen ist und nach weiteren 20 sec. die gleiche Nachricht noch einmal.
Mit meinem DOIF bekomme ich es nicht gebacken.
Das sendet auch, wenn das Fenster vor den 20 sec. wieder geschlossen wird und auch wenn sich der Status von HandyDieter von "off" auf "on" ändert.
Ich habe schon so ziemlich alle Konstellationen aus der commandref probiert. Wo liegt mein Fehler?

define Status_Fenster_WC DOIF ([Fenster_WC] eq "open" and [HandyDieter] eq "on") (set Pushbullet_D message Das Fenster im WC ist noch offen
attr repeatcmd 20
attr repeatsame 2
attr wait 20


Danke schon mal für die Hilfe.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 20 Januar 2016, 18:20:17
Zitat von: Damian am 20 Januar 2016, 17:16:13
In dem Fall geht sie wohl nicht aus. Wenn deine Lampe auf jeden Fall ausgehen soll, dann musst du den festen Wiederholungsanteil höher setzen z. B.

repeatcmd  rand(3600)+2600

Da rand(3600)+2600  immer größer ist, als die on-for-time-Zeit von rand(1800)+300 muss die Lampe vorher ausgehen, bevor sie wieder angeht.

Gruß

Damian

OK, dass werde ich dann mal ausprobieren.

Ich habe jetzt erst einmal alle so gelassen und ein weitere Anwesenheitssimulation erstellt und bekomme bei der einen Fehler angezeigt, währen dessen die andere Simulation läuft. Beide sind identisch nur der zu schaltende Ausgang ist ein anderer.
Aber wo liegt der Fehler jetzt..?

Fehler im DOIF:
2016.01.20 18:15:00 2: di_TerrassenBeleuchtung_simulation: set NI3_LichtTerrasse on-for-timer 509: Unknown argument on-for-timer, choose one of  ON OFF TRIGGER

List des DOIF:
Internals:
   CFGFN      ./FHEM/AussenBeleuchtung.cfg
   DEF        ([18 NI3_LichtTerrasse on-for-timer {(int(rand(1800)+300))}) DOELSE
   NAME       di_TerrassenBeleuchtung_simulation
   NR         988
   NTFY_ORDER 50-di_TerrassenBeleuchtung_simulation
   STATE      Ein
   TYPE       DOIF
   Readings:
     2016-01-20 18   Event           Next: 18
     2016-01-20 18   cmd_event       timer_1
     2016-01-20 18   cmd_nr          1
     2016-01-20 18   error           set NI3_LichtTerrasse on-for-timer 509: Unknown argument on-for-timer, choose one of  ON OFF TRIGGER
     2016-01-20 18   state           Ein
     2016-01-20 18   timer_1_c1      21.01.2016 18
     2016-01-20 18   timer_2_c1      21.01.2016 00
     2016-01-20 18   wait_timer      20.01.2016 19 cmd_1 timer_1
   Condition:
     0          DOIF_time($hash,$hash->{realtime}{0},$hash->{realtime}{1},$wday,$hms,"")
   Days:
   Devices:
   Do:
     0:
       0          set NI3_LichtTerrasse on-for-timer {(int(rand(1800)+300))}
     1:
       0
   Helper:
     event      loadLvl: low
     globalinit 1
     last_timer 2
     sleepdevice timer_1
     sleepsubtimer 0
     sleeptimer 0
     triggerDev HMUSB
     triggerEvents:
       loadLvl: low
   Internals:
   Itimer:
   Readings:
   Realtime:
     0          18
     1          00
   Regexp:
   State:
   Time:
     0          18
     1          00
   Timecond:
     0          0
     1          0
   Timer:
     0          0
     1          0
   Timerfunc:
   Timers:
     0           0  1
Attributes:
   alias      Anwesenheitssimulation Licht Terrasse
   cmdState   Ein|Aus
   do         always
   group      Anwesenheitssimulation
   icon       light_on-for-timer@blue
   repeatcmd  rand(3600)+1800
   room       AußenLicht



EDITH:// ich denke die Probleme kommen deshalb weil mein Netzwerkeingang NI3 nicht mit dem on-for-timer umgehen kann...!
Ich müsste da wohl einen Umweg gehen und die Zeit des DOIF on-for-timer in ein Dummy schreiben und dieses sollte dann den Status weiter geben.
Ich habe mal nur den on-for-timer auf den NI3 mit set set NI3_LichtTerrasse 10 gegeben da bekomme ich den gleichen Fehler wie oben angegeben.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 20 Januar 2016, 19:21:05
Zitat von: dk3572 am 20 Januar 2016, 17:23:17
Hallo,
ich möchte eine Nachricht, wenn das Fenster länger als 20 sec. offen ist und nach weiteren 20 sec. die gleiche Nachricht noch einmal.
Mit meinem DOIF bekomme ich es nicht gebacken.
Das sendet auch, wenn das Fenster vor den 20 sec. wieder geschlossen wird und auch wenn sich der Status von HandyDieter von "off" auf "on" ändert.
Ich habe schon so ziemlich alle Konstellationen aus der commandref probiert. Wo liegt mein Fehler?

define Status_Fenster_WC DOIF ([Fenster_WC] eq "open" and [HandyDieter] eq "on") (set Pushbullet_D message Das Fenster im WC ist noch offen
attr repeatcmd 20
attr repeatsame 2
attr wait 20


Danke schon mal für die Hilfe.
Du könntest DOELSE verwenden und die rechte Klammer schliessen.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: dk3572 am 20 Januar 2016, 19:27:34
Das ist nur ein Teil der massage, die rechte Klammer ist natürlich geschlossen ;-)
Was meinst du mit dem DOELSE? Wie soll ich das verwenden?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 20 Januar 2016, 19:47:26
ZitatWas meinst du mit dem DOELSE?
Das Schlüsselwort DOELSE als möglicher Bestandteil der DOIF Definition.
ZitatWie soll ich das verwenden?
Die Frage irritiert mich etwas.
ZitatIch habe schon so ziemlich alle Konstellationen aus der commandref probiert.
Schau Dir doch diesen Abschnitt bitte noch einmal an http://fhem.de/commandref_DE.html#DOIF_Lesbarkeit_der_Definitionen bis zum Abschnitt "Teilausdrücke abfragen" ;) Kommst Du damit klar?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: dk3572 am 20 Januar 2016, 20:05:23
Ich bin dankbar für die Unterstützung und die Hilfestellungen.
Ich lese Anleitungen und Forenbeiträge, probiere die verschiedensten Konstellationen und lerne dadurch immer mehr dazu.
Auch jetzt habe ich mir den Artikel zum wiederholten male durchgelesen. Doch leider will es mir nicht gelingen.
Wäre es nicht weniger zeit intensiv und zielführender wenn ich ein Beispiel gezeigt bekomme, auf dem ich dann weiter aufbauen und dazulernen kann?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 20 Januar 2016, 20:27:15
ZitatWäre es nicht weniger zeit intensiv und zielführender wenn ich ein Beispiel gezeigt bekomme
Scheinbar nicht, denn die erste beispielhafte Definition in dem verlinkten Abschitt ist das gewünschte Beispiel mit Erläuterungen. Hast Du dazu noch konkrete Fragen?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 20 Januar 2016, 21:08:49
würde es gehen das DOIF so umzustellen das ich in meinem Fall nicht den on-for-timer nutze sondern eben den set NI3_LichtTerrasse on aber die Simulation trotzdem läuft.
Ich habe da einige Versuche hinter mir aber es gelingt mir nicht  :-\
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: dk3572 am 21 Januar 2016, 06:01:51
@Ellert
Ok, das war das mit dem Wald und den vielen Bäumen  :-[
Scheint jetzt zu funktionieren.
Danke!!!
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 21 Januar 2016, 08:50:00
Zitat von: moonsorrox am 20 Januar 2016, 21:08:49
würde es gehen das DOIF so umzustellen das ich in meinem Fall nicht den on-for-timer nutze sondern eben den set NI3_LichtTerrasse on aber die Simulation trotzdem läuft.
Ich habe da einige Versuche hinter mir aber es gelingt mir nicht  :-\

Im Prinzip geht es so:
([<Zeitspanne>]) (<Einschaltbefehl>) (<Ausschaltbefehl>)

wait <Zufallszeitdauer1>, <Zufallszeitdauer2>
repeatcmd <maximale Zufallszeitdauer1 plus maximale Zufallszeitdauer2>
timerWithWait
do always
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 21 Januar 2016, 13:29:26
OK, ich werde mal schauen wie ich das bei mir einbaue...

Ich habe den letzten Versuch von gestern Abend bisher heute noch nicht getestet - der sieht momentan so aus, ich glaube aber das er hiermit nicht ausgeht...!
Evtl. kannst du mal drüber schauen..?

Die Zeiten habe ich bisher noch so gelassen, wenn das Teil erst einmal funktioniert passe ich diese noch an.. jetzt schaue ich erst deinen Vorschlag an.


define di_TerrassenBeleuchtung_Simulation DOIF ([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and ([[du_Anfang_Zufall]])) ({(int(rand(1800)+300))}) (set NI3_LichtTerrasse on) DOELSEIF ([[du_Ende_Zufall]]) (set NI3_LichtTerrasse off)\

attr di_TerrassenBeleuchtung_Simulation alias Anwesenheitssimulation Licht Terrasse
attr di_TerrassenBeleuchtung_Simulation cmdState EIN|AUS
attr di_TerrassenBeleuchtung_Simulation do always
attr di_TerrassenBeleuchtung_Simulation group Anwesenheitssimulation Terrasse
attr di_TerrassenBeleuchtung_Simulation icon light_on-for-timer@blue
attr di_TerrassenBeleuchtung_Simulation repeatcmd rand(3600)+1800
attr di_TerrassenBeleuchtung_Simulation room AußenLicht
attr di_TerrassenBeleuchtung_Simulation sortby 04


EDITH://
wenn ich das so vergleiche mit deinem Vorschlag habe ich das glaube ich so gemacht. Ich stehe nur etwas auf Kriegsfuß mit diesen ganzen Warte- und Wiederholungszeiten, dass habe ich noch nicht begriffen.
Mir fehlt in den Attributen das von dir angegebene..!
- wait
- timerWithWait

Dazu muss ich glaube ich aus meinem Code diesen Teil raus nehmen
({(int(rand(1800)+300))})

Ich habe jetzt mal umgebaut und werde heute Abend mal schauen ob das so funktioniert, zumindest meckert das DOIF nicht beim speichern...!
define di_TerrassenBeleuchtung_Simulation DOIF ([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and ([[du_Anfang_Zufall]])) (set NI3_LichtTerrasse on) DOELSEIF ([[du_Ende_Zufall]]) (set NI3_LichtTerrasse off)
attr di_TerrassenBeleuchtung_Simulation alias Anwesenheitssimulation Licht Terrasse
attr di_TerrassenBeleuchtung_Simulation cmdState EIN|AUS
attr di_TerrassenBeleuchtung_Simulation do always
attr di_TerrassenBeleuchtung_Simulation group Anwesenheitssimulation Terrasse
attr di_TerrassenBeleuchtung_Simulation icon light_on-for-timer@blue
attr di_TerrassenBeleuchtung_Simulation repeatcmd rand(3600)+1800
attr di_TerrassenBeleuchtung_Simulation room AußenLicht
attr di_TerrassenBeleuchtung_Simulation sortby 04
attr di_TerrassenBeleuchtung_Simulation timerWithWait 1
attr di_TerrassenBeleuchtung_Simulation wait 1800,300


EDITH:// ging gar nicht erst an... :-\
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 22 Januar 2016, 14:16:47
ich habe nun heute den ganzen Tag mal ein Test DOIF laufen - welches mir einen freien Kanal meines 4-Kanal nutzt - bevor ich das produktiv einsetze, aber es schaltet sich die Beleuchtung immer nur ein ich sehe im Log kein ausgehen..

Ich denke das liegt an dem attr repeatcmd welches ich noch nicht so richtig begriffen habe.

Generell mal die Frage..
Der erste Teil ist ja für den ersten DO-Fall das Einschalten der Teil nach dem Doppelpunkt für den zweiten DO-Fall, dass Ausschalten, ist das richtig..?

rand(1200) macht das zufällige und die was macht die zweite Zahl hinter dem "+"..?

Ich finde dazu leider in der commandref kein solch kombiniertes Beispiel

Internals:
   CFGFN      ./FHEM/AussenBeleuchtung.cfg
   DEF        ([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and ([[du_Anfang_Zufall_WoT]|8] or [[du_Anfang_Zufall_WoE]|7])) (set Dachlicht_03 on) DOELSEIF ([[du_Ende_Zufall]]) (set Dachlicht_03 off)
   NAME       di_TerrassenBeleuchtung_Simulation1
   NR         1007
   NTFY_ORDER 50-di_TerrassenBeleuchtung_Simulation1
   STATE      EIN
   TYPE       DOIF
   Readings:
     2016-01-22 14:05:02   Event           wait_timer: no timer
     2016-01-22 14:05:02   cmd_event       timer_1
     2016-01-22 14:05:02   cmd_nr          1
     2016-01-22 14:05:02   state           EIN
     2016-01-22 04:00:00   timer_1_c1      23.01.2016 04:00:00|8
     2016-01-22 06:20:00   timer_2_c1      23.01.2016 06:20:00|7
     2016-01-22 00:40:00   timer_3_c2      23.01.2016 00:40:00
     2016-01-22 14:05:02   wait_timer      22.01.2016 14:24:49 cmd_1 timer_1
   Condition:
     0          InternalDoIf('du_Modus_TerrassenBeleuchtung','STATE','',AttrVal($hash->{NAME},'notexist',undef)) eq "Zufall" and (DOIF_time_once($hash,$hash->{timer}{0},$wday,"8") or DOIF_time_once($hash,$hash->{timer}{1},$wday,"7"))
     1          DOIF_time_once($hash,$hash->{timer}{2},$wday,"")
   Days:
     0          8
     1          7
   Devices:
   Do:
     0:
       0          set Dachlicht_03 on
     1:
       0          set Dachlicht_03 off
     2:
   Helper:
     event      loadLvl: low
     globalinit 1
     last_timer 3
     sleepdevice timer_1
     sleepsubtimer 0
     sleeptimer 0
     triggerDev HMUSB
     triggerEvents:
       loadLvl: low
   Internals:
     0           du_Modus_TerrassenBeleuchtung:STATE
     all         du_Modus_TerrassenBeleuchtung:STATE
   Itimer:
     all         du_Anfang_Zufall_WoT du_Anfang_Zufall_WoE du_Ende_Zufall
   Readings:
   Realtime:
     0          04:00:00
     1          06:20:00
     2          00:40:00
   Regexp:
   State:
   Time:
     0          [du_Anfang_Zufall_WoT]
     1          [du_Anfang_Zufall_WoE]
     2          [du_Ende_Zufall]
   Timecond:
     0          0
     1          0
     2          1
   Timer:
     0          0
     1          0
     2          0
   Timerfunc:
   Timers:
     0           0  1
     1           2
Attributes:
   alias      Anwesenheitssimulation Licht Terrasse
   cmdState   EIN|AUS
   do         always
   group      Anwesenheitssimulation
   icon       light_on-for-timer@blue
   repeatcmd  rand(3600)+1800:rand(900)+900
   room       AußenLicht
   sortby     05
   timerWithWait 1
   wait       rand(600):rand(300)
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 22 Januar 2016, 20:17:32
Zitat von: Ellert am 21 Januar 2016, 08:50:00
Im Prinzip geht es so:
([<Zeitspanne>]) (<Einschaltbefehl>) (<Ausschaltbefehl>)

wait <Zufallszeitdauer1>, <Zufallszeitdauer2>
repeatcmd <maximale Zufallszeitdauer1 plus maximale Zufallszeitdauer2>
timerWithWait
do always


Und konkret sieht es so aus:
([18:00-23:00]) (set Dachlicht_03 on ) (set Dachlicht_03 off)

wait rand(1800),rand(1800) wartet eine zufällige Zeit bis  Befehl 1 ausgeführt wird und danach eine zufällige Zeit bis Befehl 2 ausgeführt wird.
repeatcmd 3610 wiederholt den Befehlszweig alle 1800+1800+10 Sekunden, (+10) damit die Wiederholung auf jeden Fall nach rand(1800)+rand(1800) stattfindet und immer ausgeschaltet wird,
timerWithwait
do always

rand(1200) macht das zufällige und die was macht die zweite Zahl hinter dem "+"..?
Sie verlängert die zufällige Zeit um einen  festen Wert.
ZitatDer erste Teil ist ja für den ersten DO-Fall das Einschalten der Teil nach dem Doppelpunkt für den zweiten DO-Fall, dass Ausschalten, ist das richtig..?
Ja, aber
ZitatBeispieldefinition bei mehreren DO-Blöcken mit mehreren Sequenzen:

DOIF (Bedingung1)
(set ...) ## erster Befehl der ersten Sequenz soll um eine Sekunde verzögert werden
(set ...) ## zweiter Befehl der ersten Sequenz soll um 2 Sekunden verzögert werden
DOELSE (Bedingung2)
(set ...) ## erster Befehl der zweiten Sequenz soll um 3 Sekunden verzögert werden
(set ...) ## zweiter Befehl der zweiten Sequenz soll um 0,5 Sekunden verzögert werden

attr <DOIF-modul> wait 1,2:3,0.5

Für Kommandos ohne Verzögerung werden Sekundenangaben ausgelassen oder auf Null gesetzt. Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung. Eine bereits ausgelöste Verzögerung wird zurückgesetzt, wenn während der Wartezeit ein Kommando eines anderen DO-Falls, ausgelöst durch ein neues Ereignis, ausgeführt werden soll.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 23 Januar 2016, 01:22:36
OK das ist super erklärt  :) jetzt sollte es mir gelingen mein DOIF in den Griff zu kriegen..! Besser es läuft schon mal Probe.
das mit dem "repeatcmd" ist aber auch schwierig zu verstehen, ich wäre niemals auf die Idee gekommen bei Zeiten zusammen zu addieren..!  :-\ Ich dachte immer das muss jeweils einzeln hintereinander geschrieben werden.

Diese "repeatcmd" Zeiten kann ich doch nach belieben verändern ohne die "wait" Zeiten zu verändern. Wichtig hierbei ist, wenn ich erreichen möchte das das Licht ausgeht, dass die "repeatcmd" Zeiten größer sind als die "wait" Zeiten..? Richtig.?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 23 Januar 2016, 12:59:31
ZitatDiese "repeatcmd" Zeiten kann ich doch nach belieben verändern ohne die "wait" Zeiten zu verändern. Wichtig hierbei ist, wenn ich erreichen möchte das das Licht ausgeht, dass die "repeatcmd" Zeiten größer sind als die "wait" Zeiten..? Richtig.?

Ja, das ist richtig.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 23 Januar 2016, 14:01:25
na da habe ich ja wenigstens etwas verstanden...! ;)

Nun habe ich diese Nacht und auch jetzt am Tage diese Testsession mal laufen lassen und stelle fest das die Zeiten jetzt nicht optimal sind und diese gilt es jetzt zu modifizieren.

Mit diesen Zeiten:
repeatcmd 3610 und wait rand(1800),rand(1800) habe ich folgende Zeitspannen.

Eingeschaltet ist die Beleuchtung zwischen 3min. und 25min. aber ausgeschaltet ist sie jedes mal so fast genau 1 Stunde.
Das ist jetzt nicht so das was ich wollte.
Ich werde jetzt mal schauen wie ich das vernünftig in Griff bekomme zumal die Zeit für AUS zu lange ist und die für EIN zu kurz..!
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 25 Januar 2016, 13:13:53
ich habe jetzt mal ein paar Tests laufen lassen mit verscheidenen Einstellungen
Hier mal das Ergebnis

- wait:           rand(1800),rand(1800)
- repeatcmd: 3610
Beleuchtung EIN - 3 bis 25 min.
Beleuchtung AUS - 1 Std. (immer gleich)
--------------------------------------------------

- wait:           rand(450),rand(450)
- repeatcmd: 3610
Beleuchtung EIN - 1 bis 2 min.
Beleuchtung AUS - 1 Std. (immer gleich)
--------------------------------------------------

- wait:           rand(1800),rand(1800)
- repeatcmd: 910
Beleuchtung EIN - 1 bis 27 min.
Beleuchtung AUS - 15min. (immer gleich)
--------------------------------------------------

- wait:           rand(1800),rand(3600)
- repeatcmd: 300
Beleuchtung EIN - 2 bis 60 min.
Beleuchtung AUS - 5min. (immer gleich)
--------------------------------------------------

Was mir bisher nicht gelungen ist (durch Zeitmangel) auch die AUS Zeit unterschiedlich zu gestalten, so in dem Bereich bis 20 min. und genau die Einschaltdauer, da wären 1 Std. OK aber dann ein anders mal nur 2min. das ist zu wenig.

Man müsste dieses einstellen können so in der Art
Einschaltzeit - 30 min. bis 1 Std. 15min.
Ausschaltzeit - 10 min. bis 30 min.  (glaube hier wäre dann "wait rand(1800)" möglich)

Geht das zu machen..?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 25 Januar 2016, 13:58:00
Du könntest statt rand(1800) eine fixe Zeit einbauen rand(t1)+t2,rand(t3)+t4 und
repeatcmd t1+t2+t3+t4+10 dann hast Du immer eine mindest Dauer für Ein und Aus.

ZitatBeleuchtung EIN - 3 bis 25 min.
Beleuchtung AUS - 1 Std. (immer gleich)

Zitatimmer gleich
das kann nur Zufall sein ;)
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 25 Januar 2016, 14:13:25
Zitat von: Ellert am 25 Januar 2016, 13:58:00
Du könntest statt rand(1800) eine fixe Zeit einbauen rand(t1)+t2,rand(t3)+t4 und
repeatcmd t1+t2+t3+t4+10 dann hast Du immer eine mindest Dauer für Ein und Aus.

Puuh, jetzt wird es schierig  :-\ ;)
Naja ich sage mal das zufällige ist ja nicht schlecht, aber wenn die Einschaltzeit nur 1min. ist wäre mir das zu wenig wie oben schon geschrieben.


Zitat von: Ellert am 25 Januar 2016, 13:58:00
das kann nur Zufall sein ;)
das war bei allen 4 Tests immer der Fall, dass die Zeit zwar unterschiedlich war aber immer gleichlange Aus  ;)


OK,

also ich mache dann mal einen Test mit
wait: rand(1800)+600,rand(1800)+600
repeatcmd: 4800

Mal schauen was das wird..? ich dachte ich habe es verstanden komme einfach mit den Zeiten nicht klar  :-\
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 25 Januar 2016, 14:36:32
Damit Du dokumentierte Zeiten erhältst kannst Du ja mal mitloggen und den Befehlezweig mit
Zitat(set Dachlicht_03 on, ({Log 1, "Einschalten"})) (set Dachlicht_03 off, ({Log 1, "Ausschalten"}))
ergänzen.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: gloob am 25 Januar 2016, 15:04:38
Kann man die Attribute repeatcmd und repeatsame auch durch ein Notify auf einen Dummy füllen?

define doif_water DOIF ([[water1start]] and [water1repeat] > 0)(set Switch01 on-for-timer 10)
attr doif_water do always
attr doif_water repeatcmd 15
attr doif_water repeatsame 5
attr doif_water room Wohnzimmer

define notify_water1repeat notify water1repeat {fhem ("set doif_water1 repeatsame water1repeat")}
attr notify_water1repeat room Wohnzimmer



Aktuell wird mir nur ein komisches reading erzeugt:


     2016-01-25 15:05:07   e_water1repeat_STATE 10
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 25 Januar 2016, 20:15:12
ZitatKann man die Attribute repeatcmd und repeatsame auch durch ein Notify auf einen Dummy füllen?
Ja, aber der Befehl zum Setzen eines Attributes lautet nicht "set" sondern "attr".
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 26 Januar 2016, 00:12:33
Hier mal die Ergebnisse vom heutigen Test mit folgenden Zeiten und wieder ist die Zeit für "AUS" immer gleich und diesmal sehr lang.

Einstellung:
repeatcmd: 4800 (ich habe hier die +10 vergessen)
wait: rand(1800)+600,rand(1800)+600
Zeit EIN ist von minimum 15 min. bis maximal 32 min.
Zeit AUS ist immer 1 Std. und 20 min.


2016.01.26 00:02:50 1: Ausschalten
2016.01.25 23:45:26 1: Einschalten

2016.01.25 22:25:26 1: Ausschalten
2016.01.25 22:01:23 1: Einschalten

2016.01.25 20:41:23 1: Ausschalten
2016.01.25 20:26:40 1: Einschalten

2016.01.25 19:06:40 1: Ausschalten
2016.01.25 18:37:38 1: Einschalten

2016.01.25 17:17:38 1: Ausschalten
2016.01.25 17:00:22 1: Einschalten

2016.01.25 15:40:22 1: Ausschalten
2016.01.25 15:08:09 1: Einschalten


Ich bekomme es nicht hin auch die Ausschaltzeit kürzer und unterschiedlich zu machen, die Einschaltzeit könnte auch bis zu 1 Std. sein.

Das werden meine Einstellungen für den Test über Nacht, mit Logik komme ich hier nicht weiter also muss ich probieren... :-\ ;)

repeatcmd: 3910
wait: rand(1200)+600,rand(1800)+300
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 26 Januar 2016, 08:42:43
ZitatZeit EIN ist von minimum 15 min. bis maximal 32 min.
Das sieht für mich wie erwartet aus. Die 120 min würde ich nicht erwarten, die scheinen irgendwie mit der Zeitangabe in repeatcmd zusammenzuhängen 4800 s sind 120 min.

Um das weiter zu untersuchen würde ich das Logging erweitern und die Events des DOIF mitloggen mit:
define Zeituntersuchung notify <doifname> {Log 1, "Name: $NAME, Event: $EVENT"}
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: gloob am 26 Januar 2016, 09:15:30
Zitat von: Ellert am 25 Januar 2016, 20:15:12
Ja, aber der Befehl zum Setzen eines Attributes lautet nicht "set" sondern "attr".

Vielen Dank. Genau das habe ich gesucht.
Kann ich im Notify auch ein "Save config" mit aufrufen um die Änderungen auch in die Config Datei zu speichern?

Reicht ein einfaches fhem("save")?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 26 Januar 2016, 09:22:38
Warum sollte das nicht ausreichen? Probier es aus.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: gloob am 26 Januar 2016, 10:46:27
Konnte es jetzt wie folgt lösen. Vielen Dank:

define notify_water1repeat notify water1repeat {fhem("attr Bewaesserung_doif2 repeatsame $EVENT");fhem("save")}
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 26 Januar 2016, 12:44:04
Zitat von: Ellert am 26 Januar 2016, 08:42:43
Um das weiter zu untersuchen würde ich das Logging erweitern und die Events des DOIF mitloggen mit:
define Zeituntersuchung notify <doifname> {Log 1, "Name: $NAME, Event: $EVENT"}
OK, das logge ich mal mit
Hier nochmal das Ergebnis des letzten Tests heute Nacht/vormittag

Einstellung
repeatcmd: 3910
wait: rand(1200)+600,rand(1800)+300
Zeit EIN ist von minimum 10 min. bis maximal 31 min.
Zeit AUS ist immer 1 Std. und 05 min.


2016.01.26 11:55:32 1: Ausschalten
2016.01.26 11:45:22 1: Einschalten

2016.01.26 10:40:12 1: Ausschalten
2016.01.26 10:26:34 1: Einschalten

2016.01.26 09:21:24 1: Ausschalten
2016.01.26 09:08:36 1: Einschalten

2016.01.26 08:03:26 1: Ausschalten
2016.01.26 07:53:38 1: Einschalten

2016.01.26 06:48:28 1: Ausschalten
2016.01.26 06:17:04 1: Einschalten

2016.01.26 05:11:54 1: Ausschalten
2016.01.26 05:00:49 1: Einschalten

2016.01.26 03:55:39 1: Ausschalten
2016.01.26 03:34:35 1: Einschalten

2016.01.26 02:29:25 1: Ausschalten
2016.01.26 02:11:06 1: Einschalten

2016.01.26 01:05:56 1: Ausschalten
2016.01.26 00:45:11 1: Einschalten


Bin ja mal gespannt ob ich hier irgendwann einen Plan rein kriege, damit ich weiß wenn ich eine Zeit verändere und vorallem an welcher Stelle ich das tun muss. :-\
Noch sehe ich nicht durch, wenn ich die Ausschalt-Zeit ändern möchte an welcher Stelle und genauso wenn ich die Einschalt-Zeit ändern möchte
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 26 Januar 2016, 19:27:02
Hier nun meine Ergebnis des loggens mit dem notify

Einstellung:
repeatcmd: 2710
wait: rand(600)+600,rand(1200)+300

Zeit EIN ist von minimum 8 min. bis maximal 25 min.
Zeit AUS ist immer 45 min.

2016.01.26 19:14:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 19:59:39 cmd_1_1 timer_1
2016.01.26 19:14:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1
2016.01.26 19:14:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 19:14:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 2
2016.01.26 19:14:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 19:14:29 1: Ausschalten
2016.01.26 19:14:29 3: CUL_HM set Dachlicht_03 off
2016.01.26 19:14:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 19:02:39 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 19:14:29 cmd_1_2 timer_1
2016.01.26 19:02:39 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1_1
2016.01.26 19:02:39 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 19:02:39 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 1
2016.01.26 19:02:39 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 19:02:39 1: Einschalten
2016.01.26 19:02:39 3: CUL_HM set Dachlicht_03 on
2016.01.26 19:02:39 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 18:17:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 19:02:39 cmd_1_1 timer_1
2016.01.26 18:17:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1
2016.01.26 18:17:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 18:17:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 2
2016.01.26 18:17:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 18:17:29 1: Ausschalten
2016.01.26 18:17:29 3: CUL_HM set Dachlicht_03 off
2016.01.26 18:17:29 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 17:56:34 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 18:17:29 cmd_1_2 timer_1
2016.01.26 17:56:34 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1_1
2016.01.26 17:56:34 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 17:56:34 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 1
2016.01.26 17:56:34 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 17:56:34 1: Einschalten
2016.01.26 17:56:34 3: CUL_HM set Dachlicht_03 on
2016.01.26 17:56:34 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 17:11:24 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 17:56:34 cmd_1_1 timer_1
2016.01.26 17:11:24 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1
2016.01.26 17:11:24 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 17:11:24 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 2
2016.01.26 17:11:24 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 17:11:24 1: Ausschalten
2016.01.26 17:11:24 3: CUL_HM set Dachlicht_03 off
2016.01.26 17:11:24 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 17:02:11 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 17:11:24 cmd_1_2 timer_1
2016.01.26 17:02:11 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1_1
2016.01.26 17:02:11 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 17:02:11 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 1
2016.01.26 17:02:11 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 17:02:11 1: Einschalten
2016.01.26 17:02:11 3: CUL_HM set Dachlicht_03 on
2016.01.26 17:02:11 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 16:17:01 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 17:02:11 cmd_1_1 timer_1
2016.01.26 16:17:01 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1
2016.01.26 16:17:01 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 16:17:01 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 2
2016.01.26 16:17:01 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 16:17:01 1: Ausschalten
2016.01.26 16:17:01 3: CUL_HM set Dachlicht_03 off
2016.01.26 16:17:01 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 16:09:32 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 16:17:01 cmd_1_2 timer_1
2016.01.26 16:09:32 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1_1
2016.01.26 16:09:32 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 16:09:32 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 1
2016.01.26 16:09:32 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 16:09:32 1: Einschalten
2016.01.26 16:09:32 3: CUL_HM set Dachlicht_03 on
2016.01.26 16:09:32 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 15:24:22 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 16:09:32 cmd_1_1 timer_1
2016.01.26 15:24:22 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1
2016.01.26 15:24:22 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 15:24:22 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 2
2016.01.26 15:24:22 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 15:24:22 1: Ausschalten
2016.01.26 15:24:22 3: CUL_HM set Dachlicht_03 off
2016.01.26 15:24:22 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 15:09:28 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 15:24:22 cmd_1_2 timer_1
2016.01.26 15:09:28 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1_1
2016.01.26 15:09:28 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 15:09:28 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 1
2016.01.26 15:09:28 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 15:09:28 1: Einschalten
2016.01.26 15:09:28 3: CUL_HM set Dachlicht_03 on
2016.01.26 15:09:28 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 14:24:18 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 15:09:28 cmd_1_1 timer_1
2016.01.26 14:24:18 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1
2016.01.26 14:24:18 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 14:24:18 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 2
2016.01.26 14:24:18 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 14:24:18 1: Ausschalten
2016.01.26 14:24:18 3: CUL_HM set Dachlicht_03 off
2016.01.26 14:24:18 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 14:20:39 3: at_KalenderTermine_S: Wrote configuration to fhem.cfg
2016.01.26 14:20:39 3: save : Wrote configuration to fhem.cfg
2016.01.26 14:10:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 14:24:18 cmd_1_2 timer_1
2016.01.26 14:10:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1_1
2016.01.26 14:10:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 14:10:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 1
2016.01.26 14:10:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 14:10:40 1: Einschalten
2016.01.26 14:10:40 3: CUL_HM set Dachlicht_03 on
2016.01.26 14:10:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 13:25:30 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 14:10:40 cmd_1_1 timer_1
2016.01.26 13:25:30 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1
2016.01.26 13:25:30 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 13:25:30 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 2
2016.01.26 13:25:30 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 13:25:30 1: Ausschalten
2016.01.26 13:25:30 3: CUL_HM set Dachlicht_03 off
2016.01.26 13:25:30 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: no timer
2016.01.26 13:00:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: wait_timer: 26.01.2016 13:25:30 cmd_1_2 timer_1
2016.01.26 13:00:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_1_1
2016.01.26 13:00:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_event: timer_1
2016.01.26 13:00:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_seqnr: 1
2016.01.26 13:00:40 1: Name: di_TerrassenBeleuchtung_Simulation1, Event: cmd_nr: 1
2016.01.26 13:00:40 1: Einschalten
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 26 Januar 2016, 20:36:57
Es scheint so, dass einmal der zufällige wait-Timer und das andere Mal der feste repeatcmd-Timer die Zeiten bestimmt.

Nach dem ich hier: http://fhem.de/commandref_DE.html#DOIF_wait nachgelesen habe, denke ich die Berechnung funktioniert nur bei einfachen wait mit Doppelpunkt, nur dort wird die Berechnung erwähnt. Dass es auch bei Komma getrennten wait-Zeiten klappen müsste, habe ich wohl falsch interpretiert.

Neue Idee:
([18:00-23:00]) (IF ([Dachlicht_03] eq "off") (set Dachlicht_03 on ) ELSE (set Dachlicht_03 off))
wait rand(600)+300
repeatcmd 910
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 26 Januar 2016, 22:24:18
ich habe da schon hoch und runter gelesen, aber umso mehr ich lese umso weniger verstehe ich das alles, weil verwirrt...! ;)

Ich fahre jetzt mal den Test mit den von vorgeschlagenen Werten und werde später wieder dazu schreiben

@Ellert
EDITH:// geht gar nicht, schaltet immer nur AUS  :-\
Ich werde jetzt nochmal die Zeiten für die Nacht umändern, dann lebe ich damit das die Ausschaltzeit immer gleich ist, aber ich versuche sie kurz zu halten so bis 15min. und die Einschaltzeit soll variieren zwischen 30min. bis 60min.  :D wie gesagt ich versuche  ;)
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 26 Januar 2016, 23:45:04
Zitat von: Ellert am 26 Januar 2016, 20:36:57
Nach dem ich hier: http://fhem.de/commandref_DE.html#DOIF_wait nachgelesen habe, denke ich die Berechnung funktioniert nur bei einfachen wait mit Doppelpunkt, nur dort wird die Berechnung erwähnt. Dass es auch bei Komma getrennten wait-Zeiten klappen müsste, habe ich wohl falsch interpretiert.

Die Berechnung wird auch bei Komma ausgeführt.

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 27 Januar 2016, 09:57:42
Das müsste klappen ich habe es probiert:

([18:00-23:00]) () (set Dachlicht_03 on ) (set Dachlicht_03 off)

wait 0,rand(600)+300,rand(600)+300
repeatcmd 1


repeatcmd wird erst nach Ausführung aller Sequenzen berechnet und kollidiert mit dem 1. Zufallstimer, daher einmal () und wait 0,...
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 27 Januar 2016, 13:43:37
Meine Ergebnisse aus der Nacht bis heute morgen.

Einstellung
repeatcmd: 900
wait: rand(1800)+300,rand(3600)+1800

Zeit EIN ist von minimum 40 min. bis maximal 1 h 23 min.
Zeit AUS ist immer  15 min.
damit könnte ich leben, die Ausschaltzeit ist zwar immer gleich aber das ist OK die Einschaltzeit variiert nun soweit wie ich es möchte.


2016.01.27 12:58:00 1: Ausschalten
2016.01.27 12:18:30 1: Einschalten

2016.01.27 12:03:30 1: Ausschalten
2016.01.27 10:50:41 1: Einschalten

2016.01.27 10:35:40 1: Ausschalten
2016.01.27 09:53:16 1: Einschalten

2016.01.27 09:38:16 1: Ausschalten
2016.01.27 08:44:31 1: Einschalten

2016.01.27 08:29:31 1: Ausschalten
2016.01.27 07:15:26 1: Einschalten

2016.01.27 07:00:26 1: Ausschalten
2016.01.27 05:46:49 1: Einschalten

2016.01.27 05:31:49 1: Ausschalten
2016.01.27 04:38:06 1: Einschalten

2016.01.27 04:23:06 1: Ausschalten
2016.01.27 03:17:32 1: Einschalten

2016.01.27 03:02:32 1: Ausschalten
2016.01.27 01:39:34 1: Einschalten


Ich werde mir jetzt eine zweite Simulation/DOIF bauen und die neue Idee von dir probieren
Übrigens mal einen großen Dank für die tolle Unterstützung ;) :D
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 27 Januar 2016, 14:47:12
@Damian: Mich hat das von moonsorrox beobachtete Verhalten des DOIF irritiert und habe es nachgestellt, mit dem Ergebnis:
Bei Verwendung von erweitertem wait zusammen mit repeatcmd, wird der 1. wait-Timer nicht beachtet.

Verwendete DOIF-Version: DOIF-Testversion V 0.5
Loggendes notify:
anaus {Log 1, "notify $NAME: $EVENT"}
Beobachtetes DOIF:
anaus DOIF ([13:45-18:00]) (({Log 1,"DOIF anaus: Einschalten"})) (({Log 1,"DOIF anaus: Ausschalten"}))
wait 10,14
repeatcmd 1

Zitat
+++++++++ 1. Runde
1. timer (10 s) ignoriert
2016.01.27 13:45:00 1: DOIF anaus: Einschalten
2016.01.27 13:45:00 1: notify anaus: cmd_nr: 1
2016.01.27 13:45:00 1: notify anaus: cmd_seqnr: 1
2016.01.27 13:45:00 1: notify anaus: cmd_event: timer_1
2016.01.27 13:45:00 1: notify anaus: cmd_1_1
2016.01.27 13:45:00 1: notify anaus: wait_timer: 27.01.2016 13:45:14 cmd_1_2 timer_1
2. timer (15 s) gesetzt
2016.01.27 13:45:14 1: notify anaus: wait_timer: no timer
2016.01.27 13:45:14 1: DOIF anaus: Ausschalten
2016.01.27 13:45:14 1: notify anaus: cmd_nr: 1
2016.01.27 13:45:14 1: notify anaus: cmd_seqnr: 2
2016.01.27 13:45:14 1: notify anaus: cmd_event: timer_1
2016.01.27 13:45:14 1: notify anaus: cmd_1
2016.01.27 13:45:14 1: notify anaus: wait_timer: 27.01.2016 13:45:15 cmd_1_1 timer_1
+++++++++ 2. Runde
1. timer (10 s) ignoriert, stattdessen repeatcmd-Zeit (1 s) verwendet
2016.01.27 13:45:15 1: notify anaus: wait_timer: no timer
2016.01.27 13:45:15 1: DOIF anaus: Einschalten
2016.01.27 13:45:15 1: notify anaus: cmd_nr: 1
2016.01.27 13:45:15 1: notify anaus: cmd_seqnr: 1
2016.01.27 13:45:15 1: notify anaus: cmd_event: timer_1
2016.01.27 13:45:15 1: notify anaus: cmd_1_1
2016.01.27 13:45:15 1: notify anaus: wait_timer: 27.01.2016 13:45:29 cmd_1_2 timer_1
2. timer (14 s) gesetzt
2016.01.27 13:45:29 1: notify anaus: wait_timer: no timer
2016.01.27 13:45:29 1: DOIF anaus: Ausschalten
2016.01.27 13:45:29 1: notify anaus: cmd_nr: 1
2016.01.27 13:45:29 1: notify anaus: cmd_seqnr: 2
2016.01.27 13:45:29 1: notify anaus: cmd_event: timer_1
2016.01.27 13:45:29 1: notify anaus: cmd_1
2016.01.27 13:45:29 1: notify anaus: wait_timer: 27.01.2016 13:45:30 cmd_1_1 timer_1
1. Runde: Die erste wait-Zeit von 10 s wird nicht beachtet.
2. Runde: Statt der ersten wait-Zeit von 10 s, wird die repeatcmd-Zeit von 1 s aktiv und danach die zweite wait-Zeit von 14 s.

Habe ich das richtig interpretiert?
Das Verhalten kann man umgehen, wenn ein 0 Timer im wait-Abschnitt der zu wiederholenden Sequenzen vorangestellt wird und eine leere Sequenz an den Anfang des zugehörigen Bedingungszweig  eingefügt wird.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 27 Januar 2016, 17:54:22
Zitat von: Ellert am 27 Januar 2016, 14:47:12
@Damian: Mich hat das von moonsorrox beobachtete Verhalten des DOIF irritiert und habe es nachgestellt, mit dem Ergebnis:
Bei Verwendung von erweitertem wait zusammen mit repeatcmd, wird der 1. wait-Timer nicht beachtet.

Verwendete DOIF-Version: DOIF-Testversion V 0.5
Loggendes notify:
anaus {Log 1, "notify $NAME: $EVENT"}
Beobachtetes DOIF:
anaus DOIF ([13:45-18:00]) (({Log 1,"DOIF anaus: Einschalten"})) (({Log 1,"DOIF anaus: Ausschalten"}))
wait 10,14
repeatcmd 1
1. Runde: Die erste wait-Zeit von 10 s wird nicht beachtet.
2. Runde: Statt der ersten wait-Zeit von 10 s, wird die repeatcmd-Zeit von 1 s aktiv und danach die zweite wait-Zeit von 14 s.

Habe ich das richtig interpretiert?
Das Verhalten kann man umgehen, wenn ein 0 Timer im wait-Abschnitt der zu wiederholenden Sequenzen vorangestellt wird und eine leere Sequenz an den Anfang des zugehörigen Bedingungszweig  eingefügt wird.

Der Trigger kommt vom Zeitintervall, daher greift das erste wait nicht. Mit dem Attribut timerWithWait, sollte das aber funktionieren. Zitat aus der Commandref:
ZitatFür Kommandos ohne Verzögerung werden Sekundenangaben ausgelassen oder auf Null gesetzt. Die Verzögerungen werden nur auf Events angewandt und nicht auf Zeitsteuerung. Eine bereits ausgelöste Verzögerung wird zurückgesetzt, wenn während der Wartezeit ein Kommando eines anderen DO-Falls, ausgelöst durch ein neues Ereignis, ausgeführt werden soll.

Verzögerungen von Timern

Verzögerungen können mit Hilfe des Attributs timerWithWait auf Timer ausgeweitet werden.

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 27 Januar 2016, 18:14:21
Danke für den Hinweis, darauf hätte ich eigentlich selbst kommen müssen, ich habe es schon mehrfach gelesen und auch schon benutzt.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 27 Januar 2016, 18:47:21
OK nun mal die Ergebnisse der zweiten Variante der Simulation

DEF
([13:35-23:00]) () (set Dachlicht_03 on, ({Log 1, "Einschalten"})) (set Dachlicht_03 off, ({Log 1, "Ausschalten"}))


Einstellung
repeatcmd: 1
wait: 0,rand(600)+300,rand(600)+300

Zeit EIN ist von minimum 6 min. bis maximal 15 min.
Zeit AUS ist minimum 5 min. bis maximal 15 min.

So scheint das jetzt also mit unterschiedlicher EIN/AUS Zeit zu funktionieren
Ich habe jetzt die Zeiten verändert und teste es weiter, die Pausenzeit ist OK und die Einschaltzeit versuche ich auf ca. minimum 30 min. bis maximum 1 h 20 min. zu bekommen


2016.01.27 16:53:08 1: Ausschalten
2016.01.27 16:53:08 3: CUL_HM set Dachlicht_03 off
2016.01.27 16:53:08 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:44:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:53:08 cmd_1_3 timer_1
2016.01.27 16:44:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_2
2016.01.27 16:44:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:44:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 2
2016.01.27 16:44:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:44:44 1: Einschalten
2016.01.27 16:44:44 3: CUL_HM set Dachlicht_03 on
2016.01.27 16:44:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:29:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:44:44 cmd_1_2 timer_1
2016.01.27 16:29:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_1
2016.01.27 16:29:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:29:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 1
2016.01.27 16:29:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:29:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:29:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:29:47 cmd_1_1 timer_1
2016.01.27 16:29:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1
2016.01.27 16:29:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:29:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 3
2016.01.27 16:29:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:29:46 1: Ausschalten
2016.01.27 16:29:46 3: CUL_HM set Dachlicht_03 off
2016.01.27 16:29:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:21:22 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:29:46 cmd_1_3 timer_1
2016.01.27 16:21:22 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_2
2016.01.27 16:21:22 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:21:22 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 2
2016.01.27 16:21:22 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:21:22 1: Einschalten
2016.01.27 16:21:22 3: CUL_HM set Dachlicht_03 on
2016.01.27 16:21:22 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:17:48 3: CUL_HM set Ladestation_kueche on
2016.01.27 16:15:48 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:21:22 cmd_1_2 timer_1
2016.01.27 16:15:48 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_1
2016.01.27 16:15:48 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:15:48 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 1
2016.01.27 16:15:48 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:15:48 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:15:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:15:48 cmd_1_1 timer_1
2016.01.27 16:15:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1
2016.01.27 16:15:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:15:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 3
2016.01.27 16:15:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:15:47 1: Ausschalten
2016.01.27 16:15:47 3: CUL_HM set Dachlicht_03 off
2016.01.27 16:15:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:09:23 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:15:47 cmd_1_3 timer_1
2016.01.27 16:09:23 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_2
2016.01.27 16:09:23 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:09:23 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 2
2016.01.27 16:09:23 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:09:23 1: Einschalten
2016.01.27 16:09:23 3: CUL_HM set Dachlicht_03 on
2016.01.27 16:09:23 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:01:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:09:23 cmd_1_2 timer_1
2016.01.27 16:01:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_1
2016.01.27 16:01:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:01:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 1
2016.01.27 16:01:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:01:47 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 16:01:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:01:47 cmd_1_1 timer_1
2016.01.27 16:01:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1
2016.01.27 16:01:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 16:01:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 3
2016.01.27 16:01:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 16:01:46 1: Ausschalten
2016.01.27 16:01:46 3: CUL_HM set Dachlicht_03 off
2016.01.27 16:01:46 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 15:55:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 16:01:46 cmd_1_3 timer_1
2016.01.27 15:55:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_2
2016.01.27 15:55:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 15:55:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 2
2016.01.27 15:55:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 15:55:18 1: Einschalten
2016.01.27 15:55:18 3: CUL_HM set Dachlicht_03 on
2016.01.27 15:55:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 15:42:10 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 15:55:18 cmd_1_2 timer_1
2016.01.27 15:42:10 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_1
2016.01.27 15:42:10 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 15:42:10 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 1
2016.01.27 15:42:10 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 15:42:10 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 15:42:09 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 15:42:10 cmd_1_1 timer_1
2016.01.27 15:42:09 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1
2016.01.27 15:42:09 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 15:42:09 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 3
2016.01.27 15:42:09 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 15:42:09 1: Ausschalten
2016.01.27 15:42:09 3: CUL_HM set Dachlicht_03 off
2016.01.27 15:42:09 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 15:29:39 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 15:42:09 cmd_1_3 timer_1
2016.01.27 15:29:39 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_2
2016.01.27 15:29:39 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 15:29:39 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 2
2016.01.27 15:29:39 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 15:29:39 1: Einschalten
2016.01.27 15:29:39 3: CUL_HM set Dachlicht_03 on
2016.01.27 15:29:39 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 15:17:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 15:29:39 cmd_1_2 timer_1
2016.01.27 15:17:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_1
2016.01.27 15:17:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 15:17:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 1
2016.01.27 15:17:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 15:17:18 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 15:17:17 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 15:17:18 cmd_1_1 timer_1
2016.01.27 15:17:17 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1
2016.01.27 15:17:17 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 15:17:17 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 3
2016.01.27 15:17:17 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 15:17:17 1: Ausschalten
2016.01.27 15:17:17 3: CUL_HM set Dachlicht_03 off
2016.01.27 15:17:17 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 15:02:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 15:17:17 cmd_1_3 timer_1
2016.01.27 15:02:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_2
2016.01.27 15:02:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 15:02:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 2
2016.01.27 15:02:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 15:02:44 1: Einschalten
2016.01.27 15:02:44 3: CUL_HM set Dachlicht_03 on
2016.01.27 15:02:44 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:57:05 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 15:02:44 cmd_1_2 timer_1
2016.01.27 14:57:05 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_1
2016.01.27 14:57:05 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 14:57:05 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 1
2016.01.27 14:57:05 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 14:57:05 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:57:04 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 14:57:05 cmd_1_1 timer_1
2016.01.27 14:57:04 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1
2016.01.27 14:57:04 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 14:57:04 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 3
2016.01.27 14:57:04 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 14:57:04 1: Ausschalten
2016.01.27 14:57:04 3: CUL_HM set Dachlicht_03 off
2016.01.27 14:57:04 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:44:12 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 14:57:04 cmd_1_3 timer_1
2016.01.27 14:44:12 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_2
2016.01.27 14:44:12 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 14:44:12 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 2
2016.01.27 14:44:12 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 14:44:12 1: Einschalten
2016.01.27 14:44:12 3: CUL_HM set Dachlicht_03 on
2016.01.27 14:44:12 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:32:51 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 14:44:12 cmd_1_2 timer_1
2016.01.27 14:32:51 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_1
2016.01.27 14:32:51 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 14:32:51 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 1
2016.01.27 14:32:51 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 14:32:51 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:32:50 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 14:32:51 cmd_1_1 timer_1
2016.01.27 14:32:50 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1
2016.01.27 14:32:50 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 14:32:50 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 3
2016.01.27 14:32:50 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 14:32:50 1: Ausschalten
2016.01.27 14:32:50 3: CUL_HM set Dachlicht_03 off
2016.01.27 14:32:50 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:26:57 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 14:32:50 cmd_1_3 timer_1
2016.01.27 14:26:57 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_2
2016.01.27 14:26:57 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 14:26:57 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 2
2016.01.27 14:26:57 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 14:26:57 1: Einschalten
2016.01.27 14:26:57 3: CUL_HM set Dachlicht_03 on
2016.01.27 14:26:57 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:13:25 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 14:26:57 cmd_1_2 timer_1
2016.01.27 14:13:25 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1_1
2016.01.27 14:13:25 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 14:13:25 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 1
2016.01.27 14:13:25 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 14:13:25 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:13:24 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: 27.01.2016 14:13:25 cmd_1_1 timer_1
2016.01.27 14:13:24 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_1
2016.01.27 14:13:24 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_event: timer_1
2016.01.27 14:13:24 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_seqnr: 3
2016.01.27 14:13:24 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: cmd_nr: 1
2016.01.27 14:13:24 1: Ausschalten
2016.01.27 14:13:24 3: CUL_HM set Dachlicht_03 off
2016.01.27 14:13:24 1: Name: di_TerrassenBeleuchtung_Simulation2, Event: wait_timer: no timer
2016.01.27 14:04:07 1: Einschalten
2016.01.27 14:04:07 3: CUL_HM set Dachlicht_03 on
2016.01.27 13:56:54 1: Ausschalten
2016.01.27 13:56:54 3: CUL_HM set Dachlicht_03 off
2016.01.27 13:44:23 1: Einschalten
2016.01.27 13:44:23 3: CUL_HM set Dachlicht_03 on
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 27 Januar 2016, 18:54:38
Wenn Du mit gelesen hast, weisst Du was falsch war:

Zitat([18:00-23:00]) () (set Dachlicht_03 on ) (set Dachlicht_03 off)

wait 0,rand(600)+300,rand(600)+300
repeatcmd 1
timerWithWait
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 27 Januar 2016, 19:26:11
aber das hatten wir doch in der 1. Variante der Simulation mit drin..? Auf diese bezog sich denke ich Damians Hinweis..
Denn die jetzige funktioniert doch nur eben das die Zeiten angepaßt werden müssen
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 27 Januar 2016, 20:03:13
Ja, Du hast recht, ich werde auch noch mal probieren.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 28 Januar 2016, 00:09:35
Hier nun  die Ergebnisse der zweiten Simulationszeit

Einstellung
repeatcmd: 1
wait: 0,rand(1800)+600,rand(600)+600

Zeit EIN ist von minimum 10 min. bis maximal 17 min.
Zeit AUS ist minimum 12 min. bis maximal 40 min.

Den Rest des Logs schenke ich mir hier mal, da wir ja wissen das es so funktioniert, nur ist für mich noch die Frage welcher Bereich der wait Einstellung ist für Ein und welcher für Aus
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 28 Januar 2016, 09:31:59
Für diese Dauer ist AUS rand(1800)+600 und für diese EIN rand(600)+600.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 28 Januar 2016, 10:27:59
Zitat von: Damian am 27 Januar 2016, 17:54:22
Der Trigger kommt vom Zeitintervall, daher greift das erste wait nicht. Mit dem Attribut timerWithWait, sollte das aber funktionieren. Zitat aus der Commandref:
Gruß

Damian

@Damian: Ich habe es mit "timerWithWait" probiert. Das Verhalten hat sich nur wenig geändert.

Die 1. Runde funktioniert, wie erwartet.
ab der 2. Runde wird der 1. berechnete wait-Timer ignoriert.

Benutztes DOIF-Modul: Testversion 0.6
Untersuchtes DOIF:([09:41:45]) (({Log 1,"DOIF anaus: Einschalten"})) (({Log 1,"DOIF anaus: Ausschalten"}))

wait (rand(5)+5),(rand(5)+5)
repeatcmd 1
timerWithWait


Das Logging dazu:
Zitat2016.01.28 09:41:41 1: notify anaus: initialized
++++++++ 1.Runde
2016.01.28 09:41:45 1: notify anaus: wait_timer: 28.01.2016 09:41:54 cmd_1_1 timer_1 wait1 = 9 s
2016.01.28 09:41:54 1: notify anaus: wait_timer: no timer
2016.01.28 09:41:54 1: DOIF anaus: Einschalten
2016.01.28 09:41:54 1: notify anaus: cmd_nr: 1
2016.01.28 09:41:54 1: notify anaus: cmd_seqnr: 1
2016.01.28 09:41:54 1: notify anaus: cmd_event: timer_1
2016.01.28 09:41:54 1: notify anaus: cmd_1_1
2016.01.28 09:41:54 1: notify anaus: wait_timer: 28.01.2016 09:42:03 cmd_1_2 timer_1 wait2 = 9 s
2016.01.28 09:42:03 1: notify anaus: wait_timer: no timer
2016.01.28 09:42:03 1: DOIF anaus: Ausschalten
2016.01.28 09:42:03 1: notify anaus: cmd_nr: 1
2016.01.28 09:42:03 1: notify anaus: cmd_seqnr: 2
2016.01.28 09:42:03 1: notify anaus: cmd_event: timer_1
2016.01.28 09:42:03 1: notify anaus: cmd_1
2016.01.28 09:42:03 1: notify anaus: wait_timer: 28.01.2016 09:42:04 cmd_1_1 timer_1 repeatcmd 1 s
++++++++ 2.Runde
2016.01.28 09:42:04 1: notify anaus: wait_timer: no timer danach müsste wait1 kommen
2016.01.28 09:42:04 1: DOIF anaus: Einschalten
2016.01.28 09:42:04 1: notify anaus: cmd_nr: 1
2016.01.28 09:42:04 1: notify anaus: cmd_seqnr: 1
2016.01.28 09:42:04 1: notify anaus: cmd_event: timer_1
2016.01.28 09:42:04 1: notify anaus: cmd_1_1
2016.01.28 09:42:04 1: notify anaus: wait_timer: 28.01.2016 09:42:12 cmd_1_2 timer_1 wait2 = 8 s
2016.01.28 09:42:12 1: notify anaus: wait_timer: no timer
2016.01.28 09:42:12 1: DOIF anaus: Ausschalten
2016.01.28 09:42:12 1: notify anaus: cmd_nr: 1
2016.01.28 09:42:12 1: notify anaus: cmd_seqnr: 2
2016.01.28 09:42:12 1: notify anaus: cmd_event: timer_1
2016.01.28 09:42:12 1: notify anaus: cmd_1
2016.01.28 09:42:12 1: notify anaus: wait_timer: 28.01.2016 09:42:13 cmd_1_1 timer_1 repeatcmd 1 s
++++++++ 3.Runde
2016.01.28 09:42:13 1: notify anaus: wait_timer: no timer danach müsste wait1 kommen
2016.01.28 09:42:13 1: DOIF anaus: Einschalten
2016.01.28 09:42:13 1: notify anaus: cmd_nr: 1
2016.01.28 09:42:13 1: notify anaus: cmd_seqnr: 1
2016.01.28 09:42:13 1: notify anaus: cmd_event: timer_1
2016.01.28 09:42:13 1: notify anaus: cmd_1_1
2016.01.28 09:42:13 1: notify anaus: wait_timer: 28.01.2016 09:42:21 cmd_1_2 timer_1 wait2 8 s
2016.01.28 09:42:21 1: notify anaus: wait_timer: no timer
2016.01.28 09:42:21 1: DOIF anaus: Ausschalten
2016.01.28 09:42:21 1: notify anaus: cmd_nr: 1
2016.01.28 09:42:21 1: notify anaus: cmd_seqnr: 2
2016.01.28 09:42:21 1: notify anaus: cmd_event: timer_1
2016.01.28 09:42:21 1: notify anaus: cmd_1
2016.01.28 09:42:22 1: notify anaus: wait_timer: 28.01.2016 09:42:23 cmd_1_1 timer_1 repeatcmd 1 s
++++++++ 4.Runde
2016.01.28 09:42:23 1: notify anaus: wait_timer: no timer

Ergänzt: Testversion 0.7 zeigt das gleiche Verhalten
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 28 Januar 2016, 14:30:31
Zitat von: Ellert am 28 Januar 2016, 09:31:59
Für diese Dauer ist AUS rand(1800)+600 und für diese EIN rand(600)+600.

OK, dann gehe ich davon aus das bei meiner Einstellung unten für
AUS: die minimum Zeit 11min. und die maximum Zeit 40min. sein könnte und natürlich alles dazwischen
und für
EIN: die minimum Zeit 11min. und die maximum Zeit 70min. (war zufällig auch bei mir einmal der Fall) sein könnte. Weil für rand(x)macht er wohl in jedem Fall 1 Minute.

Das sind die Ergebnisse des letzten Testzeitraumes
Einstellung
repeatcmd: 1
wait: 0,rand(1800)+600,rand(3600)+600
Für AUS rand(1800)+600 und für EIN rand(3600)+600.

Zeit EIN ist von minimum 19 min. bis maximal 1 h 10 min.
Zeit AUS ist minimum 14 min. bis maximal 37 min.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 28 Januar 2016, 17:12:59
Zitat von: Ellert am 28 Januar 2016, 10:27:59
@Damian: Ich habe es mit "timerWithWait" probiert. Das Verhalten hat sich nur wenig geändert.

Die 1. Runde funktioniert, wie erwartet.
ab der 2. Runde wird der 1. berechnete wait-Timer ignoriert.

Benutztes DOIF-Modul: Testversion 0.6
Untersuchtes DOIF:([09:41:45]) (({Log 1,"DOIF anaus: Einschalten"})) (({Log 1,"DOIF anaus: Ausschalten"}))

wait (rand(5)+5),(rand(5)+5)
repeatcmd 1
timerWithWait


Das Logging dazu:
Ergänzt: Testversion 0.7 zeigt das gleiche Verhalten

ja, es ist so programmiert, dass die Angabe bei repeatcmd sich auf die letzte Ausführung bezieht, dabei wird wait nicht mehr berücksichtigt.

Bei wait 5,5 und repeatcmd 10

bedeutet es:

00:00 trigger  +5
00:05 cmd1_1 +5
00:10 cmd1_2 +10
00:20 cmd1_1 +5
00:25 cmd1_2 +5
00:35 cmd1_1 +10
...

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 28 Januar 2016, 17:59:41
@Damian: Danke, für die Erläuterung.

@moonsorrox: Du hast jetzt zwar ein funktionierendes DOIF, aber es könnte (ohne leere Klammer) formuliert werden.

([<Zeitspanne>]) (set Dachlicht_03 on ) (set Dachlicht_03 off)
DOELSE  (set Dachlicht_03 off) damit das Licht zum Schluss auch wirklich ausgeht.

wait rand(t_ein_zufall)+t_ein_fix, rand(t_aus_zufall)+t1_aus_fix
repeatcmd rand(t_ein_zufall)+t_ein_fix
timerWithWait
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 29 Januar 2016, 15:01:15
so ich habe das auch mal getestet und dieses ist meine DEF. damit ich das später so einbauen kann.

([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and ([[du_Anfang_Zufall]]-[[du_Ende_Zufall]])) ()(set Dachlicht_03 on, ({Log 1, "Einschalten"})) (set Dachlicht_03 off, ({Log 1, "Ausschalten"}))

Einstellung
repeatcmd: rand(3600)+600
wait: rand(3600)+600, rand(900)+300
timerWithWait (hierzu muss ich sagen, da macht er mir immer eine 1 hinter)

Zeit EIN ist von minimum 5 min. bis maximal 20 min.
Zeit AUS ist minimum 22 min. bis maximal 57 min.
Irgendwie sind jetzt die Zeiten alle wieder viel kürzer...! ich habe mal verscuht hier unter es für mich zu verstehen, evtl. liege ich aber falsch.. bitte berichtigen falls ja..!

wenn ich jetzt mal diese von dir zu Grunde lege
wait rand(t_ein_zufall)+t_ein_fix, rand(t_aus_zufall)+t1_aus_fix
repeatcmd rand(t_ein_zufall)+t_ein_fix


sollte bei meinen Zeiten oben die zufällige Zahl von rand(t_ein_zufall) entweder als kleinste 1min. und als größte 60min. sein plus den fixen Wert für ein t_ein_fix 10min. sein.
Das kann so nicht stimmen, denn die kleinste Zeit ist immer 1min + 10min= 11min. und die größte sollte minimum 60+10min=70min. dieses ist aber nie passiert, denn schon die kleinste Zahl stimmt nicht die ist nämlich 5 gewesen und die größte bisher nur 20

Ebenso die ganze Sache bei der Auszeit, denn die größte Pausen ist nie eingetreten, nämlich t_aus_zufall + t1_aus_fix in Zahlen 15+5=20min. die ist größer gewesen bis viel größer.
Nun verstehe ich die ganze Logik überhaupt nicht mehr..!

Momentan läuft noch ein weiterer Test, denn er hat auch meine Ausschaltzeit ignoriert (du_Ende_Zufall) eingeschaltet hat er aber eben nicht mehr AUS.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 29 Januar 2016, 16:59:07
Hier steht was rand leistet: http://perldoc.perl.org/functions/rand.html , rand(x) erzeugt Zahlen Z, für die gilt 0 <= Z < x.

Beispiel: rand(600), kleinste Zahl 0, grösste Zahl etwa 599,999999

Du beobachtest immer nur wenige erzeugte Zahlen. Damit kannst Du keine Grenzen ermitteln.

Für rand(600)+300 wird irgendwann eine Zahl 300 und eine  Zahl 899.999999, Du konntest das bei 20 Versuchen zufällig nicht beobachten.

Zitatals kleinste 1min. und als größte 60min
das kann rand nicht leisten, das geht nur mit rand(540)+60

ZitatDas kann so nicht stimmen, denn die kleinste Zeit ist immer 1min + 10min= 11min. und die größte sollte minimum 60+10min=70min. dieses ist aber nie passiert, denn schon die kleinste Zahl stimmt nicht die ist nämlich 5 gewesen und die größte bisher nur 20

Ebenso die ganze Sache bei der Auszeit, denn die größte Pausen ist nie eingetreten, nämlich t_aus_zufall + t1_aus_fix in Zahlen 15+5=20min. die ist größer gewesen bis viel größer.
Nun verstehe ich die ganze Logik überhaupt nicht mehr..!

Mit diesem Beispiel:
ZitatEinstellung
repeatcmd: rand(3600)+600
wait: rand(3600)+600, rand(900)+300
ergeben sich folgende Grenzen:

1. Runde
kleinste Wartezeit 600 s (10 min) längste Wartezeit 4199,999999 s (~70 min), dann Einschalten
kleinste Wartezeit 300 s (5 min) längste Wartezeit 1199,999999 s (~20 min), dann Ausschalten
2. Runde
kleinste Wartezeit 600 s (10 min) längste Wartezeit 4199,999999 s (~70 min), dann Einschalten
kleinste Wartezeit 300 s (5 min) längste Wartezeit 1199,999999 s (~20 min), dann Ausschalten
.
.
.

Ich habe es im kleineren Masstab nachgestellt:

repeatcmd rand(360)+60
wait rand(360)+60,rand(90)+30
timerWithWait 1

Zitat17:29:00 Start
2016.01.29 16:34:50 1: DOIF anaus: Einschalten nach 350 s (min 60 s, max 420 s)
2016.01.29 16:36:26 1: DOIF anaus: Ausschalten nach 96 s (min 30 s, max 120 s)
2016.01.29 16:37:58 1: DOIF anaus: Einschalten nach 92 s  (min 60 s, max 420 s)
2016.01.29 16:39:42 1: DOIF anaus: Ausschalten nach 104 s (min 30 s, max 120 s)
2016.01.29 16:42:01 1: DOIF anaus: Einschalten nach 139 s  (min 60 s, max 420 s)
2016.01.29 16:43:27 1: DOIF anaus: Ausschalten nach 86 s (min 30 s, max 120 s)
2016.01.29 16:45:51 1: DOIF anaus: Einschalten nach 144 s  (min 60 s, max 420 s)
2016.01.29 16:46:42 1: DOIF anaus: Ausschalten nach 51 s (min 30 s, max 120 s)
2016.01.29 16:50:44 1: DOIF anaus: Einschalten nach 242 s  (min 60 s, max 420 s)
2016.01.29 16:51:18 1: DOIF anaus: Ausschalten nach 51 s (min 30 s, max 120 s)
2016.01.29 16:53:00 1: DOIF anaus: Einschalten nach 102 s  (min 60 s, max 420 s)
2016.01.29 16:54:52 1: DOIF anaus: Ausschalten nach 112 s (min 30 s, max 120 s)

Ich kann keine unzulässige Abweichung erkennen.


Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 30 Januar 2016, 00:37:15
Zitat von: Ellert am 29 Januar 2016, 16:59:07
Hier steht was rand leistet: http://perldoc.perl.org/functions/rand.html , rand(x) erzeugt Zahlen Z, für die gilt 0 <= Z < x.

Beispiel: rand(600), kleinste Zahl 0, grösste Zahl etwa 599,999999

OK, dann lag ich gar nicht so falsch ich hatte immer angenommen die kleinste Zahl ist "1" also nun ist sie "0"
Ich wollte damit auch nur sagen das die Zeiten für mich bei rand(600) zufällig eben jetzt minimal 0min. und dann eben 10min (9,9xxxx) sind.

Was ich damit sagen wollte für mich sah das nach umgekehrter EIN/AUS Schaltung aus, die Beleuchtung war länger AUS als sie EIN war..!

Nach dem Beispiel hier:
wait rand(t_ein_zufall)+t_ein_fix, rand(t_aus_zufall)+t1_aus_fix
repeatcmd rand(t_ein_zufall)+t_ein_fix


Ich werde das morgen nochmal mit kurzen Zeiten laufen lassen so wie du es getan hast, denn nach meinen Zeiten war die Beleuchtung immer nur kurz EIN aber lang AUS.

Kannst du mir etwas zu der Abschaltung sagen, denn diese hat bei mir nicht funktioniert mit meinem DEF.
EINschalten ging aber die ganze Simulation lief einfach weiter über die eingestellte Zeit.

Ich habe diese Variante jetzt mal im Einsatz
([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and [[du_Anfang_Zufall]-[du_Ende_Zufall]]) (set Dachlicht_03 on, ({Log 1, "Einschalten"})) (set Dachlicht_03 off, ({Log 1, "Ausschalten"})) DOELSE (set Dachlicht_03 off, ({Log 1, "ZeitAus"}))

Das war der letzte Stand, hier funktionierte es nicht, aber mal schauen ob das mit der jetzigen Version geht:
([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and [[du_Anfang_Zufall]]-[[du_Ende_Zufall]]) (set Dachlicht_03 on, ({Log 1, "Einschalten"})) (set Dachlicht_03 off, ({Log 1, "Ausschalten"})) DOELSE (set Dachlicht_03 off, ({Log 1, "ZeitAus"}))


Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 30 Januar 2016, 09:40:32
ZitatWas ich damit sagen wollte für mich sah das nach umgekehrter EIN/AUS Schaltung aus, die Beleuchtung war länger AUS als sie EIN war..!
Da haben wir uns missverstanden:
Bei
repeatcmd: rand(3600)+600
wait: rand(3600)+600, rand(900)+300
ist
rand(3600)+600 die Wartezeit bis zum Einschalten und
rand(900)+300  die Wartezeit bis zum Ausschalten

Wenn das
([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and [[du_Anfang_Zufall]-[du_Ende_Zufall]])
   (set Dachlicht_03 on, ({Log 1, "Einschalten"})) (set Dachlicht_03 off, ({Log 1, "Ausschalten"}))
DOELSE (set Dachlicht_03 off, ({Log 1, "ZeitAus"}))

nicht klappt, dann versuch
([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and [[du_Anfang_Zufall]-[du_Ende_Zufall]])
    (set Dachlicht_03 on, ({Log 1, "Einschalten"})) (set Dachlicht_03 off, ({Log 1, "Ausschalten"}))

das hat bei mir funktioniert oder
([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and [[du_Anfang_Zufall]])
    (set Dachlicht_03 on, ({Log 1, "Einschalten"})) (set Dachlicht_03 off, ({Log 1, "Ausschalten"}))
DOELSEIF ([?du_Modus_TerrassenBeleuchtung] eq "Zufall" and [[du_Ende_Zufall]])
   (set Dachlicht_03 off, ({Log 1, "Ausschalten"}))

habe ich nicht ausprobiert.
   
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 30 Januar 2016, 12:27:23
Zitat von: Ellert am 30 Januar 2016, 09:40:32
Da haben wir uns missverstanden:
Bei
repeatcmd: rand(3600)+600
wait: rand(3600)+600, rand(900)+300
ist
rand(3600)+600 die Wartezeit bis zum Einschalten und
rand(900)+300  die Wartezeit bis zum Ausschalten

Ok, dann ist das klar und ich muss es nur anpassen, da sage ich mal Danke  ;)
Die Abschaltung funktioniert nun mit meiner letzten Variante, ich darf nicht doppelt um die Zeit eckig klammern..! Das war mein Fehler..!
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 31 Januar 2016, 17:58:56
nun muss ich doch nochmal etwas fragen.

Zitat von: Ellert am 30 Januar 2016, 09:40:32
wait: rand(3600)+600, rand(900)+300
ist
rand(3600)+600 die Wartezeit bis zum Einschalten und
rand(900)+300  die Wartezeit bis zum Ausschalten
da mir dieses EIN/AUS schalten nun mittlerweile klar ist gibt es aber dann noch "repeatcmd"
repeatcmd: rand(3600)+600
dieses spielt natürlich auch eine gehörige Rolle, kann ich das komplett weglassen, ich habe es jetzt noch nicht probiert, was ich gemacht habe:

diese wait Zeiten sind beides mal gleich geblieben
rand(90)+30, rand(360)+60

und repeatcmd habe ich jeweils mal geändert, das gibt komplett andere Zeiten
1. Variante - rand(360)+60
2. Variante - rand(90)+30

Habe schon gemerkt wenn dieses nicht da wäre gibt es keine Wiederholung...!
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: gloob am 22 Februar 2016, 15:01:01
Hallo,

Hat sich an der Funktion etwas seit dem letzten Update getan?

Ich bekomme leider einen Fehler bei folgendem Code:


define water1start dummy
attr water1start room Pflanzen
attr water1start setList state:time
attr water1start userReadings Stunde {()},Minute {()},
attr water1start webCmd state

define water1repeat dummy
attr water1repeat room Pflanzen
attr water1repeat setList state:slider,0,1,10
attr water1repeat webCmd state

define water1interval dummy
attr water1interval room Pflanzen
attr water1interval setList state:slider,10,5,100
attr water1interval webCmd state

define Bewaesserung_doif DOIF ([[water1start]] and [water1repeat] > 0) (set Switch01 on-for-timer 60)
attr Bewaesserung_doif do always
attr Bewaesserung_doif repeatcmd [water1interval]
attr Bewaesserung_doif repeatsame [water1repeat]
attr Bewaesserung_doif room Pflanzen


Fehlermeldung:
2016.02.22 14:58:00 1: PERL WARNING: Argument "[water1repeat]" isn't numeric in numeric lt (<) at ./FHEM/98_DOIF.pm line 885.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 22 Februar 2016, 15:04:20
diese Meldungen bekomme ich auch habe dazu auch schon gefragt, aber bisher noch keine Antwort  bekommen...!
Ich denke er erwartet einen numerischen Code, deshalb die Warnung
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: gloob am 22 Februar 2016, 15:05:57
Ich weiß aber, dass es schon einmal funktioniert hat. Ich wollte die Elemente jetzt nur noch über FTUI einstellbar machen und habe gemerkt, dass es nicht mehr geht.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 22 Februar 2016, 15:52:21
Zitat von: gloob am 22 Februar 2016, 15:05:57
Ich weiß aber, dass es schon einmal funktioniert hat. Ich wollte die Elemente jetzt nur noch über FTUI einstellbar machen und habe gemerkt, dass es nicht mehr geht.

Welche DOIF-Version?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 22 Februar 2016, 17:06:06
ich habe diese "98_DOIF.pm 10899 2016-02-21 12:41:29Z damian-s "

hatte diese Warnung schon hier (http://forum.fhem.de/index.php/topic,49680.msg413752.html#msg413752) geschildert
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 22 Februar 2016, 18:34:51
@gloob

Also bei repeatsame sowie repeatcmd kann man nur Zahlen angeben. Nur bei wait kann man Dummys auswerten lassen, das steht auch so in der Commandref. Mir ist keine DOIF-Version bekannt, wo es für repeatsame oder repeadcmd ausprogrammiert wäre.

@moonsorrox

Wenn man einen nicht numerischen Wert mit größer oder kleiner vergleicht, dann gibt es eine Warnung vom Perl-Interpreter, denn dieser wertet die Bedingung aus. Ich habe es mit der jetzigen Version, wie auch mit einer vom Mai getestet und in beiden Fällen kommt diese Warnung. Es ist also immer schon so gewesen.

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 22 Februar 2016, 18:56:00
Zitat von: Damian am 22 Februar 2016, 18:34:51
@moonsorrox

Wenn man einen nicht numerischen Wert mit größer oder kleiner vergleicht, dann gibt es eine Warnung vom Perl-Interpreter, denn dieser wertet die Bedingung aus. Ich habe es mit der jetzigen Version, wie auch mit einer vom Mai getestet und in beiden Fällen kommt diese Warnung. Es ist also immer schon so gewesen.

Gruß

Damian

Problem ist mit einem numerischen Wert funktioniert es nicht..! muss ich das wohl akzeptieren oder irgendwie ändern.
Hatte da schon einige Versuche, aber da ging gar nichts mehr  :-\
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 22 Februar 2016, 19:15:32
Das neue DOIF hat eine Ausgabeformatierung http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen , damit kannst Du den Wert über eine Regex vielleicht verändern:

[<Geraet>:<Reading>:"s/<zu suchender Begriff>/<Ersatzwert>/"]

Der zu suchende Begriff und der Ersatzwert können reguläre Ausdrücke sein.

Eine umfangreiche Beschreibung dazu findest Du hier http://perldoc.perl.org/perlre.html (http://perldoc.perl.org/perlre.html)

Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 22 Februar 2016, 19:53:15
Zitat von: Ellert am 22 Februar 2016, 19:15:32
Das neue DOIF hat eine Ausgabeformatierung http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen , damit kannst Du den Wert über eine Regex vielleicht verändern:

[<Geraet>:<Reading>:"s/<zu suchender Begriff>/<Ersatzwert>/"]

Der zu suchende Begriff und der Ersatzwert können reguläre Ausdrücke sein.

Eine umfangreiche Beschreibung dazu findest Du hier http://perldoc.perl.org/perlre.html (http://perldoc.perl.org/perlre.html)

Das mit dem Suchen und Ersetzen geht bei dem neuen Features so nicht. Es wird gematched und Sachen in runden Klammern werden in Variablen $1, $2 usw. abgespeichert (Perlfunktinalität), auf die man im letzten Parameter Output wieder zugreifen kann.

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 22 Februar 2016, 20:18:24
Würde sowas funktionieren ?[<Geraet>:<Reading>:d:($1 == 0 ? "Runter" : "none")]
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 22 Februar 2016, 20:42:07
Zitat von: Ellert am 22 Februar 2016, 20:18:24
Würde sowas funktionieren ?[<Geraet>:<Reading>:d:($1 == 0 ? "Runter" : "none")]

von der Syntax schon, aber die Warnung lautet:

Zitat2016.02.21 14:32:15 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 196330) line 1.

Es sind ja die nicht numerischen Werte das Problem und nicht die numerischen.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 23 Februar 2016, 10:31:48
Zitat von: Damian am 22 Februar 2016, 20:42:07
von der Syntax schon, aber die Warnung lautet:

Es sind ja die nicht numerischen Werte das Problem und nicht die numerischen.

Ja, mir ging es mehr ums Prinzip. Also, ob ich den Output beliebig manipulieren kann.

Das ist interessant für HM-Heizkörperventile, dort kann die desired-temp numerisch sein, aber auch  "on" oder "off".

Mit der Outputoption könnte man jetzt on/off durch 99/0 ersetzen und die Warnungen vermeiden, die durch numerische Vergleiche entstehen.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 23 Februar 2016, 10:37:03
Zitat von: Ellert am 23 Februar 2016, 10:31:48
Ja, mir ging es mehr ums Prinzip. Also, ob ich den Output beliebig manipulieren kann.

Das ist interessant für HM-Heizkörperventile, dort kann die desired-temp numerisch sein, aber auch  "on" oder "off".

Mit der Outputoption könnte man jetzt on/off durch 99/0 ersetzen und die Warnungen vermeiden, die durch numerische Vergleiche entstehen.

genau, ist doch schön zu sehen, dass die neue Funktionalität durchaus Praxisrelevanz hat  :)

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 23 Februar 2016, 11:00:15
ich bin da momentan am probieren aber scheitere leider...!
Irgendwie bin ich da nicht ganz auf der Höhe mit diesen readings.

Könnt ihr da mal einen Blick drauf nehmen in dem Beitrag (http://forum.fhem.de/index.php/topic,49680.msg414353.html#msg414353) habe ich das Problem und das list, ebtl. mal ein Zeile mit dieser neuen Syntax mir auf die Sprünge helfen.

Was ich auch nicht hin bekomme ist das er morgens nach dem hoch fahren, wieder runter fährt weil er wohl den "last_state" benutzt..!  :-\
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 05 März 2016, 12:12:07
eigentlich funktioniert der Rollladen für meine Terrassentür die ganze Woche über, aber heute weil wohl Samstag ist blieb er wieder mal unten.... ich dachte das Thema wäre erledigt aber leider nicht und ich habe keinen Ansatz wo ich suchen soll... macht er doch am Wochennende das selbe wie in der Woche nur das er etwas später hoch fährt.

Diese Meldungen habe ich im Log, die haben mich bisher auch nicht gestört und sind in der Woche auch nicht so zahlreich, gemeint ist das mit dem "numeric"

2016.03.05 08:29:49 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097753) line 1.
2016.03.05 08:29:49 1: PERL WARNING: Argument "Hoch" isn't numeric in numeric le (<=) at (eval 3097752) line 1.
2016.03.05 08:28:52 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097532) line 1.
2016.03.05 08:28:52 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097526) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097520) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097519) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097514) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097513) line 1.
2016.03.05 08:28:51 3: CUL_HM set RollladenWZT 100
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097508) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097507) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097502) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097501) line 1.
2016.03.05 08:28:51 3: CUL_HM set RollladenWZT 100
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097496) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097495) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097490) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097489) line 1.
2016.03.05 08:28:51 3: CUL_HM set RollladenWZT 100
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097484) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097483) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097478) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097477) line 1.
2016.03.05 08:28:51 3: CUL_HM set RollladenWZT 100
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097472) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "set_100" isn't numeric in numeric le (<=) at (eval 3097471) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097466) line 1.
2016.03.05 08:28:51 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097465) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097459) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097458) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097453) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097452) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097446) line 1.
2016.03.05 08:28:49 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097445) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097440) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097439) line 1.
2016.03.05 08:28:48 3: CUL_HM set RollladenWZT 0
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097434) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097433) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097428) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097427) line 1.
2016.03.05 08:28:48 3: CUL_HM set RollladenWZT 0
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097422) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097421) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097416) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097415) line 1.
2016.03.05 08:28:48 3: CUL_HM set RollladenWZT 0
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097410) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097409) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097404) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097403) line 1.
2016.03.05 08:28:48 3: CUL_HM set RollladenWZT 0
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097398) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "set_0" isn't numeric in numeric le (<=) at (eval 3097397) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3097392) line 1.
2016.03.05 08:28:48 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3097391) line 1.
2016.03.05 08:15:09 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3094350) line 1.
2016.03.05 08:15:09 1: PERL WARNING: Argument "Runter" isn't numeric in numeric le (<=) at (eval 3094349) line 1.
2016.03.05 08:15:00 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3094343) line 1.
2016.03.05 08:15:00 3: CUL_HM set RollladenWZT off
2016.03.05 08:15:00 1: PERL WARNING: Argument "off" isn't numeric in numeric le (<=) at (eval 3094335) line 1.
2016.03.05 08:15:00 3: CUL_HM set RollladenWZT on


das ist mein ausführendes DOIF:


([?du_RolloWZmodus] eq "FHEM" and ([[du_RolloZeitWZ_hoch]|8] or [[du_RolloZeitWZ_hoch_WoE]|7])) (set RollladenWZT on)
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and [WZ_TK_Terrasse:state] eq "closed" and [{sunset("CIVIL",-100,"16:35","22:20")}|78]) (set RollladenWZT off)
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and [du_Tageslicht] eq "dunkel" and [RollladenWZT] eq "Runter" and [WZ_TK_Terrasse:state] eq "open") ## Wenn Rollladen unten und Terrassentür wird geöffnet
(setreading RollladenWZT last_state [RollladenWZT], set RollladenWZT on,set NI3_LichtTerrasse on) ## schreibe die Position des Rollladen in ein Reading und fahre den Rollladen hoch schalte das Licht Terrasse EIN
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and [RollladenWZT] <= 100 and [RollladenWZT] eq "open") ## Wenn Rollladen auf einer Position zwischen 0 - 100 und Terrassentür wird geöffnet
(setreading RollladenWZT last_state [RollladenWZT], set RollladenWZT on,set NI3_LichtTerrasse on) ## schreibe die Position des Rollladen in ein Reading und fahre den Rollladen hoch und schalte das Licht Terrasse EIN
DOELSEIF ([?du_RolloWZmodus] eq "FHEM" and [du_Tageslicht] eq "dunkel" and [RollladenWZT:last_state] <= 99 and [WZ_TK_Terrasse:state] eq "closed") ## Wenn das gespeicherte Reading ein Wert von 0 - 99 hat und die Terrassentür wird geschlossen
(set NI3_LichtTerrasse off,set RollladenWZT [RollladenWZT:last_state]) ## nutze das Reading und fahre den Rollladen in die entsprechende Position zurück und schalte das Licht Terrasse AUS


warum funktioniert das nun am WoEnde nicht so wie in der Woche, übersehe ich etwas..?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 05 März 2016, 21:37:01
Zitat([?du_RolloWZmodus] eq "FHEM" and ([[du_RolloZeitWZ_hoch]|8] or [[du_RolloZeitWZ_hoch_WoE]|7])) (set RollladenWZT on)
Das sieht nicht verkehrt aus.

Das letzte DOIF update gab es gestern, also am Besten heute noch updaten und weiter beobachten und "shutdown restart" nicht vergessen.

siehe auch hier: https://forum.fhem.de/index.php/topic,50142.msg419552.html#msg419552

|78 bedeutet jeden Tag, das kannst Du weglassen.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 06 März 2016, 02:07:41
Zitat von: Ellert am 05 März 2016, 21:37:01
Das sieht nicht verkehrt aus.

deshalb ist es mir ja grad unerklärlich, warum der Rollladen am WoEnde unten bleibt oder er wieder runter fährt, werde morgen früh mal schauen.
Seit ich dieses DOIF umgebaut habe mit den ganzen setreadings Werten ist das glaube ich so... gefallen tut mir das alles noch nicht, aber es sollte ja für die kommende Sommerzeit  die Beschattung durch führen.
Dann ersetze ich nur "FHEM" durch "Beschattung" weil im Moment brauche ich das ja noch nicht und es ist eine sogenannte Testphase, aber diese klappt eben leider noch nicht. Werde es dann auch in einem eigenen Beschattungs DOIF nutzen, weil es übersichtlicher ist...!

Das ganze fahren des Terrassen Rollladen (RollladenWZT) soll dann bei Beschattung auch funktionieren, damit ist das hoch/runter fahren bei öffnen der Terrassentür gemeint und dann werden die setreadings und last_state Werte genutzt.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 06 März 2016, 09:11:12
Zitat von: moonsorrox am 06 März 2016, 02:07:41
deshalb ist es mir ja grad unerklärlich, warum der Rollladen am WoEnde unten bleibt oder er wieder runter fährt, werde morgen früh mal schauen.
Seit ich dieses DOIF umgebaut habe mit den ganzen setreadings Werten ist das glaube ich so... gefallen tut mir das alles noch nicht, aber es sollte ja für die kommende Sommerzeit  die Beschattung durch führen.
Dann ersetze ich nur "FHEM" durch "Beschattung" weil im Moment brauche ich das ja noch nicht und es ist eine sogenannte Testphase, aber diese klappt eben leider noch nicht. Werde es dann auch in einem eigenen Beschattungs DOIF nutzen, weil es übersichtlicher ist...!

Das ganze fahren des Terrassen Rollladen (RollladenWZT) soll dann bei Beschattung auch funktionieren, damit ist das hoch/runter fahren bei öffnen der Terrassentür gemeint und dann werden die setreadings und last_state Werte genutzt.

Dein Ausdruck ist recht komplex, daher Analyse schwierig. Es ist immer tückisch bei vielen Zweigen ohne DOELSE zu arbeiten insb. wenn man kein do always definiert hat. Denn, wenn dein Zustand von cmd_1 nicht zwischendurch in einen anderen wechselt, dann wird logischerweise am nächsten Tag nicht noch mal cmd_1 ausgeführt.

Gruß

Damian
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: moonsorrox am 06 März 2016, 11:23:07
OK, Danke Damian, ich werde mich der ganzen Sache nochmals annehmen und "Neu" aufbauen..! Ich lasse erst einmal das ganze setreadings Gedöns weg  ;)
Danach werde ich mir ein komplette Beschattungssteuerung mit Temperatur, Helligkeit, Beschattungsendzeit usw. aufbauen...
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Tueftler1983 am 12 Februar 2017, 23:35:10
Hallo ist es mitterweile möglich in dEM Beispiel:
(Bedingun) (Event1) (Event2)
Das das Event2, wiederholt wird?  Würde gerne ein Event 8 mal wiederholen.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Ellert am 13 Februar 2017, 00:24:37
Das funktioniert nur für alle Befehle/Sequenzen eines Bedingungszweiges, s. https://fhem.de/commandref_DE.html#DOIF_repeatcmd
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Per am 13 Februar 2017, 15:08:55
Zitat von: Tueftler1983 am 12 Februar 2017, 23:35:10Würde gerne ein Event 8 mal wiederholen.
([was auch immer])(Befehl_1,set $SELF cmd_2)
DOELSEIF (false)(Befehl_2)
attrib XXX repeatcmd 0:20
attrib XXX repeatsame 1:8

Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Tueftler1983 am 13 Februar 2017, 17:06:48
Das Problem ist das in meinem DOIF 4 Events ausgeführt werden sollen von den das 4. Neun mal wiederholt werden muss mit jeweils 1 sek verzögerung. Derzeit sieht es so aus
([d_Wecker] eq "on" and [[d_Weckzeit:state]]) (set d_HitRadio on) (set d_Soundbar POWER) (set ledstrip GREEN) (set ledstrip BRIGHTER) (set ledstrip BRIGHTER) (set ledstrip BRIGHTER)(set ledstrip BRIGHTER) (set ledstrip BRIGHTER) (set ledstrip BRIGHTER) (set ledstrip BRIGHTER) (set ledstrip BRIGHTER) (set ledstrip BRIGHTER)
Mit dem Attribut wait 0,0,0,1,1,1,1,1,1,1,1
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Per am 14 Februar 2017, 18:14:25
Wo ist das Problem?
([d_Wecker] eq "on" and [[d_Weckzeit:state]]) (set d_HitRadio on,set d_Soundbar POWER,set ledstrip GREEN,set $SELF cmd_2)
DOELSEIF (0) (set ledstrip BRIGHTER)

repeatcmd 0:1
repeatsame 1:8
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: chq am 06 September 2018, 21:11:31
Hm. Wenn ich jetzt nur das einzelne Kommando set nasBackupHD on (und nur dieses) mehrmals hintereinander senden wollen würde, müsste ich ihm (also nur diesem Kommando) ein eigenes DOELSEIF spendieren, richtig?

([14:59|Do]) (setreading $SELF doifState reset)

DOELSEIF ([15:00-24:00|Do] and [Bewohner:"home"]) (setreading $SELF doifState hd_startup, set nasBackupHD on, set doif_NAS disable)

DOELSEIF ([?$SELF:doifState] eq "hd_startup") (set doif_NAS enable, setreading $SELF doifState hd_finished, set nasBackupHD off)


Gruß Chris
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Per am 07 September 2018, 11:59:20
Ja, aber du musst auch selftrigger anschalten mit ? wird dein dritter Fall nie (!) angetriggert.
Wenn du das ? hingegen wegnimmst, musst du hoffen, dass auch "set nasBackupHD on, set doif_NAS disable" irgendwann mal ausgeführt wird, denn du verlässt ja den zweiten Fall, bevor er zu Ende ist.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: fhemjan am 01 Februar 2023, 13:46:58
Ich möchte die Abfrage der Luftfeuchtigkeit realisieren und eine Warnung geben wenn sie über einem bestimmten Wert ist. Es funktioniert einigermaßen mit:
([TH_Variabel:humidity] > "60") ({
       my $hum = ReadingsVal("TH_Variabel","humidity","");;
       Log 1, "Hohe Luftfeuchtigkeit im Schlafzimmer";;
       fhem("set pushmsg msg title='Schlafzimmer' message='$hum% Luftfeuchtigkeit!'");;
       })
DOELSE)

Der Lacrosse Sensor TH_Variabel gibt die Luftfeuchtigkeit ziemlich häufig aus, daher wird man sehr zugespamt mit Nachrichten. Ich habe es nun mit
attr xxx repeatcmd 3600
probiert, mit dem Gedanken, dass ich bei Auslösung des DOIF eine Nachricht bekomme und falls nach einer Stunde immer noch hum > 60 % noch eine.
Es will aber noch nicht richtig klappen. Es wirkt eher so als wenn die DOIF Abfrage jede Stunde durch geführt wird und schaut ob die Bedingung korrekt ist.
Ist das so richtig und ich hab lediglich den Befehl flasch verstanden? Oder ist irgendwo ein Fehler drin?
Ich habe auch
attr xxx do always
mit eingebaut, auch wenn ich mir nicht 100% sicher bin ob das notwendig ist (hatte es in einem Beispiel in der commandref so gesehen)

Edit: Irgendwie ist definitiv der Wurm drin. Wenn ich repeatcmd lösche löst er jetzt gar nicht mehr aus, auch wenn ich die Bedingung auf einen wahren Wert wie z.b. > "40" setze
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: fhemjan am 01 Februar 2023, 14:44:27
 Es scheint irgendwie die Befehlsausführung jede Stunde gespeichert zu sein. Es kam jetzt nochmal eine Meldung. Also scheint repeatcmd dafür zu sorgen, das DOIF alle in repeatcmd angegebenen Sekunden zu prüfen ob die Bedingung stimmt.

Eine Funktion mit der er direkt bei Erüllung der DOIF-Bedingung auslöst und dann aber frühestens wieder in z.B. einer Std., falls die Bedingung immer noch erfüllt ist, gibt es nicht, oder?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: Damian am 01 Februar 2023, 16:41:59
Wahrscheinlich sucht du so etwas: https://fhem.de/commandref_DE.html#DOIF_cmdpause
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: fhemjan am 01 Februar 2023, 17:22:47
Hm, ja das hatte ich anfangs probiert, war jedoch nicht erfolgreich. Ich bekomme grade nicht mehr ganz zusammen was dabei passiert ist.

Aktuell verstehe ich aber generell nicht was los ist. Ich habe alle betreffenden Attribute wieder gelöscht, aber das DOIF reagiert nicht (s. Screenshot). Wenn ich FHEM neustarte wird es einmal ausgelöst, aber das war es dann.

Edit: Irgendwie werden die readings nicht geupdated, obwohl der Sensor alle paar Sekunde  neue Werte liefert (deutlich über 40% humidity)
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: jhohmann am 01 Februar 2023, 18:13:25
Eventuell ein neues Userreading definieren, was unterhalb des Werts z.B. auf false und oberhalb von 60 auf true gesetzt wird.
Und dieses Userreading sollte bei event-on-change mit enthalten sein.
Das sollte sich dann nicht mehr ändern, auch wenn der Wert auf 70 oder 80 steigt.
Dann kannst du auf diesem Userreading das DOIF ansetzen und bekommst nur eine Meldung.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: sash.sc am 02 Februar 2023, 05:52:13
Ich würde bei dem sensor schon mit event-on-change arbeiten, um die Ebene Flut einzudämmen. Bei Daten die regelmäßig kommen brauchst eigentlich kein do always.

Gruß Sascha
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: fhemjan am 02 Februar 2023, 16:54:38
Besten Dank an alle!

Zitat von: jhohmann am 01 Februar 2023, 18:13:25
Eventuell ein neues Userreading definieren, was unterhalb des Werts z.B. auf false und oberhalb von 60 auf true gesetzt wird.

Dieser Tipp hat letztlich zum Erfolg geführt.
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: fhemjan am 08 Februar 2023, 09:23:54
Tatsächlich hab ich aktuell nun noch das Problem, das die Sensorausgabe tendenziell etwas schwankt. Das heißt, dass er beim Übergang von 59,9% auf 60% ab und zu hin und her springt. Das bringt mir dann jedes Mal eine Push-Nachricht aufs Handy.
Ich hätte nun gedacht, dass der cmdpause Befehl genau das Problem lösen sollte. Wenn ich aber z.B. cmdpause mit 600 Sek. nutze löst das DOIF überhaupt nicht mehr aus. Auch wenn ich den Schwellwert in meinem Userreading händisch ein paar mal ändere, 30% --> 60% --> 30% usw.
Das Reading springt dann von true auf false usw. aber das DOIF bleibt stumm.

Habe ich da einen Denkfehler?
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: sash.sc am 08 Februar 2023, 14:50:54
Nimm event-on-change-reading. Da kannst du auch festlegen, wann ein Event ausverkauft werden soll. Z.b. Wenn sich das angegebene reading um 0.2 oder 0.4 ändert, wie bei Temperatur oder was auch immer
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: fhemjan am 08 Februar 2023, 16:09:59
Hatte jetzt erst gedacht das es nicht funktioniert weil ich
attr DOIF_hum do always
nicht gesetzt hatte. Aber das hat auch nicht wirklich was geändert. Das DOIF hat einmal ausgelöst, aber wenn ich Schwellwert wieder rauf und nach Ablauf des Werts von cmdpause wieder runter gesetzt habe hat das DOIF nicht mehr ausgelöst.

Zitat von: sash.sc am 08 Februar 2023, 14:50:54
Nimm event-on-change-reading. Da kannst du auch festlegen, wann ein Event ausverkauft werden soll. Z.b. Wenn sich das angegebene reading um 0.2 oder 0.4 ändert, wie bei Temperatur oder was auch immer
Interessanter Ansatz, ich denke ich versteh erst jetzt was du meinst, sorry, du hattest den Hinweis ja schon vorher gegeben. Tatsächlich wird die Luftfeuchtigkeit nur in ganzen Zahlen ausgegeben (das hatte ich falsch im Kopf). Also wäre jetzt der Ansatz beim Sensor das Attribut zu setzen
attr DTH_Sensor event-on-change-reading humidity:1,.*
Ich habe event-on-change-reading bei den meisten Geräten standardmäßig auf .*

Nachteil wäre jetzt, dass ich nun künstlich die Genauigkeit des Sensors für Luftfeuchtigkeit verschlechtert habe, oder? So richtig ideal wäre das ja auch noch nicht, oder hab ich da noch was falsch verstanden? Und noch eine Verständnisfrage, die meines Erachtens nicht aus der Referenz hervorgeht: Muss eine einzelne Änderung größer sein als der Schwellwert in event-on-change-reading? Dann würde er bei nie auslösen wenn nur Änderungen < Schwellwert auftreten? Oder summiert er? Aber ab wann zählt er dann?

Prinzipiell vestehe ich aber auch immer noch nicht wieso es mit cmdpause nicht funktioniert, da es laut commandref ja genau meine Anwendung abbilden sollte (https://fhem.de/commandref_DE.html#DOIF_cmdpause):
Zwangspause für das Ausführen eines Kommandos seit der letzten Zustandsänderung

Mit dem Attribut cmdpause <Sekunden für cmd_1>:<Sekunden für cmd_2>:... wird die Zeitspanne in Sekunden angegeben für eine Zwangspause seit der letzten Zustandsänderung. In der angegebenen Zeitspanne wird ein Kommando nicht ausgeführt, auch wenn die dazugehörige Bedingung wahr wird.

Anwendungsbeispiel: Meldung über Frostgefahr alle 60 Minuten

define di_frost DOIF ([outdoor:temperature] < 0) (set pushmsg "danger of frost")
attr di_frost cmdpause 3600
attr di_frost do always
Titel: Antw:DOIF neues Feature: Wiederholende Ausführung mit Zeitangabe
Beitrag von: fhemjan am 10 Februar 2023, 10:47:45
Oder andere Herangehensweise.
Ist es möglich im Userreading eine Abfrage der folgenden Art zu machen:
if Luftf. > 60 = true
elif Luftf. <= 58 = false
else = vorheriger bool Wert bleibt bestehen