(Gelöst): Probleme mit "waitsame"-Attribut

Begonnen von FunkOdyssey, 30 November 2015, 18:10:06

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Hallo,

ich lasse meine Jalousien über Helligkeitswerte runterfahren. Bisher habe ich das wait-Attribut genutzt, damit die Jalousien nur dann herunterfahren, wenn der Helligkeitswerte in 360 Sekunden zweimal erreicht wurde.

Variante 1
Nun bin ich gestern irgendwie über "waitsame" gestolpert und wollte den Initiator für das Schließen der Jalousien darüber regeln. Aber ich glaube, dass ich hier etwas falsch verstanden habe.
Ich wollte nicht mehr feste x Sekunden über "wait" warten, sondern direkt nach dem zweiten Zutreffen der Bedingung mittels "waitsame" den Ausführungsteil ansteuern. Aber irgendwie wollte es nicht so richtig. Die Jalousien fuhren beim ersten Erreichen der Bedingung bereits herunter.

Variante 2
In der Doku wurde das "do always"-Attribut bei waitsame genutzt. Also habe ich dies entsprechend hinzugefügt. Nun fuhren meine Jalousien aber bei jedem brightness-Trigger erneut herunter. Dies habe ich schnell wieder entfernt.

Hat jemand einen Tipp, wie ich die Jalousien beim zweiten Unterschreiben eines Helligkeitswertes herunterfahren kann? Danke.


([08:00])
(set jalousien1 100)
(set jalousien2 100)
(set jalousien3 100)
DOELSEIF (
[du_brightness:average] < 150 and [du_brightness:average] > 120
)
(set jalousien1 50)
(set jalousien2 50)
(set jalousien3 50)
DOELSEIF (
[du_brightness:average] < 120
)
(set jalousien1 0)
(set jalousien2 0)
(set jalousien3 0)


Attributes:
   cmdState   Auf|Halb|Zu
   timerWithWait 1
   wait       rand(300),rand(300),rand(300):0,rand(180):0,rand(180),rand(180)
   waitsame   0:360:360

Damian

Zitat von: FunkOdyssey am 30 November 2015, 18:10:06
Hallo,

ich lasse meine Jalousien über Helligkeitswerte runterfahren. Bisher habe ich das wait-Attribut genutzt, damit die Jalousien nur dann herunterfahren, wenn der Helligkeitswerte in 360 Sekunden zweimal erreicht wurde.

Variante 1
Nun bin ich gestern irgendwie über "waitsame" gestolpert und wollte den Initiator für das Schließen der Jalousien darüber regeln. Aber ich glaube, dass ich hier etwas falsch verstanden habe.
Ich wollte nicht mehr feste x Sekunden über "wait" warten, sondern direkt nach dem zweiten Zutreffen der Bedingung mittels "waitsame" den Ausführungsteil ansteuern. Aber irgendwie wollte es nicht so richtig. Die Jalousien fuhren beim ersten Erreichen der Bedingung bereits herunter.

Variante 2
In der Doku wurde das "do always"-Attribut bei waitsame genutzt. Also habe ich dies entsprechend hinzugefügt. Nun fuhren meine Jalousien aber bei jedem brightness-Trigger erneut herunter. Dies habe ich schnell wieder entfernt.

Hat jemand einen Tipp, wie ich die Jalousien beim zweiten Unterschreiben eines Helligkeitswertes herunterfahren kann? Danke.


([08:00])
(set jalousien1 100)
(set jalousien2 100)
(set jalousien3 100)
DOELSEIF (
[du_brightness:average] < 150 and [du_brightness:average] > 120
)
(set jalousien1 50)
(set jalousien2 50)
(set jalousien3 50)
DOELSEIF (
[du_brightness:average] < 120
)
(set jalousien1 0)
(set jalousien2 0)
(set jalousien3 0)


Attributes:
   cmdState   Auf|Halb|Zu
   timerWithWait 1
   wait       rand(300),rand(300),rand(300):0,rand(180):0,rand(180),rand(180)
   waitsame   0:360:360


waitsame und wait beeinflusst sich gegenseitig. Wenn wait größer ist als waitsame kommt waitsame nie zum Zuge.

do always und waitsame ist dagegen kombinierbar.

Gruß

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

FunkOdyssey

Zitatwaitsame und wait beeinflusst sich gegenseitig. Wenn wait größer ist als waitsame kommt waitsame nie zum Zuge.

Hallo Damian, danke für den Hinweis. Aber dann dürfte meine Konfiguration doch eigentlich wie gewollt funktionieren.


   wait       rand(300),rand(300),rand(300):0,rand(180):0,rand(180),rand(180)
   waitsame   0:360:360


Ich ignoriere jetzt einfach mal "cmd_1", da hier mit einer Uhrzeit gearbeitet wird.
Für "cmd_2_1" habe ich wait=0 und waitsame=360. Also sollte doch waitsame zum tragen kommen, oder?

Anbei das Log. Hier wurde nicht auf das zweifache Unterschreiten des Helligkeitswertes gewartet.

2015-11-30_15:39:36 di_jal waitsame: cmd_2
2015-11-30_15:39:36 di_jal cmd_nr: 2
2015-11-30_15:39:36 di_jal cmd_seqnr: 1
2015-11-30_15:39:36 di_jal cmd_event: du_brightness
2015-11-30_15:39:36 di_jal cmd_2_1
2015-11-30_15:39:36 di_jal wait_timer: 30.11.2015 15:42:05 cmd_2_2 du_brightness
2015-11-30_15:42:05 di_jal wait_timer: no timer
2015-11-30_15:42:05 di_jal cmd_nr: 2
2015-11-30_15:42:05 di_jal cmd_seqnr: 2
2015-11-30_15:42:05 di_jal cmd_event: du_brightness
2015-11-30_15:42:05 di_jal Halb
2015-11-30_16:22:39 di_jal waitsame: cmd_3
2015-11-30_16:22:40 di_jal cmd_nr: 3
2015-11-30_16:22:40 di_jal cmd_seqnr: 1
2015-11-30_16:22:40 di_jal cmd_event: du_brightness
2015-11-30_16:22:40 di_jal cmd_3_1
2015-11-30_16:22:40 di_jal wait_timer: 30.11.2015 16:23:53 cmd_3_2 du_brightness
2015-11-30_16:23:53 di_jal wait_timer: no timer
2015-11-30_16:23:53 di_jal cmd_nr: 3
2015-11-30_16:23:53 di_jal cmd_seqnr: 2
2015-11-30_16:23:53 di_jal cmd_event: du_brightness
2015-11-30_16:23:53 di_jal cmd_3_2
2015-11-30_16:23:53 di_jal wait_timer: 30.11.2015 16:24:08 cmd_3_3 du_brightness
2015-11-30_16:24:08 di_jal wait_timer: no timer
2015-11-30_16:24:08 di_jal cmd_nr: 3
2015-11-30_16:24:08 di_jal cmd_seqnr: 3
2015-11-30_16:24:08 di_jal cmd_event: du_brightness
2015-11-30_16:24:08 di_jal Zu

FunkOdyssey


Ich habe nun mal das wait-Attribut entfernt und es nur beim waitsame gelassen.
Aber auch hier wird nicht auf das zweite Wiederholung gewartet, sondern direkt die Jalousie heruntergefahren:

DOIF

([08:00])
(set jalousien1 100)
(set jalousien2 100)
(set jalousien3 100)
DOELSEIF (
[du_brightness:average] < 140 and [du_brightness:average] > 110
)
(set jalousien1 50)
(set jalousien2 50)
(set jalousien3 50)
DOELSEIF (
[du_brightness:average] < 110
)
(set jalousien1 0)
(set jalousien2 0)
(set jalousien3 0)


Attribute

Attributes:
   cmdState   Auf|Halb|Zu
   timerWithWait 1
   waitsame   0:360:360


DOIF-Log

2015-12-06_16:16:31 di_jal waitsame: cmd_2
2015-12-06_16:16:31 di_jal cmd_nr: 2
2015-12-06_16:16:31 di_jal cmd_seqnr: 1
2015-12-06_16:16:31 di_jal cmd_event: du_brightness
2015-12-06_16:16:31 di_jal cmd_2_1
2015-12-06_16:16:31 di_jal cmd_nr: 2
2015-12-06_16:16:31 di_jal cmd_seqnr: 2
2015-12-06_16:16:31 di_jal cmd_event: du_brightness
2015-12-06_16:16:31 di_jal Halb
2015-12-06_16:34:43 di_jal waitsame: cmd_3
2015-12-06_16:34:43 di_jal cmd_nr: 3
2015-12-06_16:34:43 di_jal cmd_seqnr: 1
2015-12-06_16:34:43 di_jal cmd_event: du_brightness
2015-12-06_16:34:43 di_jal cmd_3_1
2015-12-06_16:34:44 di_jal cmd_nr: 3
2015-12-06_16:34:44 di_jal cmd_seqnr: 2
2015-12-06_16:34:44 di_jal cmd_event: du_brightness
2015-12-06_16:34:44 di_jal cmd_3_2
2015-12-06_16:34:44 di_jal cmd_nr: 3
2015-12-06_16:34:44 di_jal cmd_seqnr: 3
2015-12-06_16:34:44 di_jal cmd_event: du_brightness
2015-12-06_16:34:44 di_jal Zu


Brightness-Dummy

2015-12-06_16:06:23 du_brightness average: 156.5
2015-12-06_16:11:43 du_brightness average: 148
2015-12-06_16:16:31 du_brightness average: 137.5
2015-12-06_16:23:06 du_brightness average: 123.5
2015-12-06_16:29:10 du_brightness average: 119
2015-12-06_16:34:06 du_brightness average: 111
2015-12-06_16:34:39 du_brightness average: 110.5
2015-12-06_16:34:43 du_brightness average: 110
2015-12-06_16:41:01 du_brightness average: 101.5
2015-12-06_16:46:47 du_brightness average: 83.5
2015-12-06_16:52:03 du_brightness average: 73
2015-12-06_16:56:47 du_brightness average: 69


Ich finde den Fehler nicht.

FunkOdyssey

#4
Ich stehe mit "waitsame" irgendwie auf Kriegsfuß.

Egal wie trivial meine DOIFs sind, das Attribut waitsame wird bei mir nie berücksichtigt.

Ein anderes Code-Beispiel:

DOIF:


Internals:
   CFGFN
   DEF        (
[du_brightness:average] < 220
)
(
{Log 3, "di_test: Wert 220 unterschritten."}
)

   NAME       di_test
   NR         2257
   NTFY_ORDER 50-di_test
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-03-14 12:36:34   Device          du_brightness
     2016-03-14 12:36:34   cmd_event       du_brightness
     2016-03-14 12:36:34   cmd_nr          1
     2016-03-14 12:36:34   e_du_brightness_average 217.5
     2016-03-14 12:36:34   state           cmd_1
   Condition:
     0          ReadingValDoIf($hash,'du_brightness','average','','',AttrVal($hash->{NAME},'notexist',undef)) < 220
   Devices:
     0           du_brightness
     all         du_brightness
   Do:
     0:
       0          {Log 3, "di_test: Wert 220 unterschritten."}
   Helper:
     event      lampe: aus
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   du_brightness
     timerevent lampe: aus
     triggerDev du_brightness
     timerevents:
       lampe: aus
     triggerEvents:
       lampe: aus
   Internals:
   Itimer:
   Readings:
     0           du_brightness:average
     all         du_brightness:average
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   do         always
   icon       time_timer
   timerWithWait 1
   waitsame   900


DOIF-Log:

2016-03-14_12:29:18 di_test waitsame: cmd_1
2016-03-14_12:29:18 di_test cmd_nr: 1
2016-03-14_12:29:18 di_test cmd_event: du_brightness
2016-03-14_12:29:18 di_test cmd_1
2016-03-14_12:29:18 di_test waitsame: cmd_1
2016-03-14_12:29:18 di_test cmd_nr: 1
2016-03-14_12:29:18 di_test cmd_event: du_brightness
2016-03-14_12:29:18 di_test cmd_1
2016-03-14_12:29:18 di_test waitsame: cmd_1
2016-03-14_12:29:18 di_test cmd_nr: 1
2016-03-14_12:29:18 di_test cmd_event: du_brightness
2016-03-14_12:29:18 di_test cmd_1
2016-03-14_12:36:01 di_test waitsame: cmd_1
2016-03-14_12:36:01 di_test cmd_nr: 1
2016-03-14_12:36:01 di_test cmd_event: du_brightness
2016-03-14_12:36:01 di_test cmd_1
2016-03-14_12:36:01 di_test waitsame: cmd_1
2016-03-14_12:36:01 di_test cmd_nr: 1
2016-03-14_12:36:01 di_test cmd_event: du_brightness
2016-03-14_12:36:01 di_test cmd_1
2016-03-14_12:36:01 di_test waitsame: cmd_1
2016-03-14_12:36:01 di_test cmd_nr: 1
2016-03-14_12:36:01 di_test cmd_event: du_brightness
2016-03-14_12:36:01 di_test cmd_1
2016-03-14_12:36:34 di_test waitsame: cmd_1
2016-03-14_12:36:34 di_test cmd_nr: 1
2016-03-14_12:36:34 di_test cmd_event: du_brightness
2016-03-14_12:36:34 di_test cmd_1
2016-03-14_12:36:34 di_test waitsame: cmd_1
2016-03-14_12:36:34 di_test cmd_nr: 1
2016-03-14_12:36:34 di_test cmd_event: du_brightness
2016-03-14_12:36:34 di_test cmd_1
2016-03-14_12:36:34 di_test waitsame: cmd_1
2016-03-14_12:36:34 di_test cmd_nr: 1
2016-03-14_12:36:34 di_test cmd_event: du_brightness
2016-03-14_12:36:34 di_test cmd_1

Damian

Ich kann keinen Fehler bei mir feststellen.

Teste erst mal:


DOIF ([mydummy])({Log 3, "di_test"})


attr waitsame 5
attr do always


trigger mydummy

Der Befehl darf nur dann ausgeführt werden, wenn du innerhalb von 5 Sekunden noch mal trigger mydummy ausführst, sonst nicht.

Gruß

Damian


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

FunkOdyssey

#6
Das habe ich ausprobiert. Hier konnte ich jetzt auch (erstmals) erkennen, dass das DOIF wirklich auf eine zweite Bestätigung wartet. Das hat alles funktioniert.




Gelöst.
Beim Ausprobieren habe ich den/meinen Fehler endlich gefunden.
Ich generiere die Readings in du_brightness per DOIF. In diesem weiteren DOIF nutze ich mehrfach "setreading". Und aus diesem Grund wird innerhalb der gleichen Sekunde das Event mehrfach ausgelöst. Der Bewegungsmelder trigger alle 5min. Aber mein DOIF dazwischen halt mehrmals durch das "setreading".

Beispiel

(
[bm1:?brightness]
)
(
setreading du_brightness wert1[bm1:brightness],
setreading du_brightness wert2 [bm2:brightness],
setreading du_brightness average {([bm1:brightness]+[bm2:brightness])/2}
)


Ich habe mein Problem nun hier mal zum Thema gemacht. Hat ja nichts mit DOIF zu tun.

Danke für die Hilfe.