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
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
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
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.
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
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
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 (https://forum.fhem.de/index.php?topic=50843.msg424662) mal zum Thema gemacht. Hat ja nichts mit DOIF zu tun.
Danke für die Hilfe.