Wait-Timer ist der so richtig geschrieben??

Begonnen von Wasserwerk33, 12 Juni 2022, 12:14:19

Vorheriges Thema - Nächstes Thema

Wasserwerk33

Hallo Leute,

Ich versuche mir einen Verzögerungstimer zu bauen mittel "wait", ich habe es erst versucht direkt hinter meiner Zeitangabe zu schreiben wie ich es auch bei meine Jalousien mittel Twiliight gemacht habe, dieses habe ich aber nicht hinbekommen, habe immer eine Fehlermeldung erhalten.

nun bin ich auf Wait umgestiegen. Vielleicht kann mir einer sagen ob dieses so richtig geschrieben ist und funktionieren würde. 

Internals:
   DEF        ([?6:40-20:15] and [Lichtsensor:lux:d]<=20 and ([ZWave_SENSOR_NOTIFICATION_23:motion_state:] eq "motion" or [LOGOLichtsensor] eq "off"))
(set HUEDevice5 on)

DOELSEIF

([?20:16-00:00] and [Lichtsensor:lux:d]< 19 and [Pioneer_Anlage:input] =~ "PS_4|TV" and [Residents:state] eq "home")
(set HUEDevice5 off)

DOELSEIF


(([22:15|So|Mo|Di|Mi|Do] or [23:00|Fr|Sa]) and [Residents:state] =~ "absent|gone")
(set HUEDevice5 off)

DOELSEIF

(([?22:15] and [Pioneer_Anlage:power] eq "off") or [Lichtsensor:lux:d]> 21)
(set HUEDevice5 off)
   FUUID      6085b12d-f33f-87a8-7f82-342a2fbae8249367
   MODEL      FHEM
   NAME       EsszimmerLicht
   NOTIFYDEV  Residents,global,Pioneer_Anlage,ZWave_SENSOR_NOTIFICATION_23,LOGOLichtsensor,Lichtsensor
   NR         97
   NTFY_ORDER 50-EsszimmerLicht
   STATE      cmd_4
   TYPE       DOIF
   VERSION    26020 2022-05-03 16:28:02
   eventCount 67
   READINGS:
     2022-06-12 12:08:24   Device          Pioneer_Anlage
     2022-06-12 09:47:26   cmd             4
     2022-06-12 09:47:26   cmd_event       Pioneer_Anlage
     2022-06-12 09:47:26   cmd_nr          4
     2022-06-12 12:08:10   e_Lichtsensor_lux 158
     2022-06-12 12:08:24   e_Pioneer_Anlage_input NET
     2022-06-12 12:08:24   e_Pioneer_Anlage_power on
     2022-06-12 12:08:10   e_Residents_state home
     2022-06-12 09:47:17   mode            enabled
     2022-06-12 09:47:26   state           cmd_4
     2022-06-12 09:47:17   timer_01_c01    13.06.2022 06:40:00
     2022-06-12 09:47:17   timer_02_c01    12.06.2022 20:15:00
     2022-06-12 09:47:17   timer_03_c02    12.06.2022 20:16:00
     2022-06-12 09:47:17   timer_04_c02    13.06.2022 00:00:00
     2022-06-12 09:47:17   timer_05_c03    12.06.2022 22:15:00|So
     2022-06-12 09:47:17   timer_06_c03    12.06.2022 23:00:00|Fr
     2022-06-12 09:47:17   timer_07_c04    12.06.2022 22:15:00
   Regex:
     accu:
     collect:
     cond:
       LOGOLichtsensor:
         0:
           &STATE     ^LOGOLichtsensor$
       Lichtsensor:
         0:
           lux        ^Lichtsensor$:^lux:
         1:
           lux        ^Lichtsensor$:^lux:
         3:
           lux        ^Lichtsensor$:^lux:
       Pioneer_Anlage:
         1:
           input      ^Pioneer_Anlage$:^input:
         3:
           power      ^Pioneer_Anlage$:^power:
       Residents:
         1:
           state      ^Residents$:^state:
         2:
           state      ^Residents$:^state:
       ZWave_SENSOR_NOTIFICATION_23:
         0:
           motion_state ^ZWave_SENSOR_NOTIFICATION_23$:^motion_state:
   attr:
     cmdState:
     wait:
       0:
         0
       1:
         0
       2:
         -900+int(rand(600))
         -900+int(rand(600))
       3:
         0
     waitdel:
   condition:
     0          ::DOIF_time($hash,0,1,$wday,$hms) and ::ReadingValDoIf($hash,'Lichtsensor','lux','','d')<=20 and (::ReadingValDoIf($hash,'ZWave_SENSOR_NOTIFICATION_23','motion_state') eq "motion" or ::InternalDoIf($hash,'LOGOLichtsensor','STATE') eq "off")
     1          ::DOIF_time($hash,2,3,$wday,$hms) and ::ReadingValDoIf($hash,'Lichtsensor','lux','','d')< 19 and ::ReadingValDoIf($hash,'Pioneer_Anlage','input') =~ "PS_4|TV" and ::ReadingValDoIf($hash,'Residents','state') eq "home"
     2          (::DOIF_time_once($hash,4,$wday,"So") or ::DOIF_time_once($hash,5,$wday,"Fr")) and ::ReadingValDoIf($hash,'Residents','state') =~ "absent|gone"
     3          (::DOIF_time_once($hash,6,$wday) and ::ReadingValDoIf($hash,'Pioneer_Anlage','power') eq "off") or ::ReadingValDoIf($hash,'Lichtsensor','lux','','d')> 21
   days:
     4          So
     5          Fr
   do:
     0:
       0          set HUEDevice5 on
     1:
       0          set HUEDevice5 off
     2:
       0          set HUEDevice5 off
     3:
       0          set HUEDevice5 off
     4:
   helper:
     NOTIFYDEV  Residents,global,Pioneer_Anlage,ZWave_SENSOR_NOTIFICATION_23,LOGOLichtsensor,Lichtsensor
     event      currentTrackPosition: 03:34:50
     globalinit 1
     last_timer 7
     sleeptimer -1
     timerdev   Pioneer_Anlage
     timerevent currentTrackPosition: 03:34:50
     triggerDev Pioneer_Anlage
     timerevents:
       currentTrackPosition: 03:34:50
     timereventsState:
       currentTrackPosition: 03:34:50
     triggerEvents:
       currentTrackPosition: 03:34:50
     triggerEventsState:
       currentTrackPosition: 03:34:50
   internals:
     all         LOGOLichtsensor:STATE
   interval:
     0          -1
     1          0
     2          -1
     3          2
   intervalfunc:
   localtime:
     0          1655095200
     1          1655057700
     2          1655057760
     3          1655071200
     4          1655064900
     5          1655067600
     6          1655064900
   readings:
     all         Lichtsensor:lux ZWave_SENSOR_NOTIFICATION_23:motion_state Pioneer_Anlage:input Residents:state Pioneer_Anlage:power
   realtime:
     0          06:40:00
     1          20:15:00
     2          20:16:00
     3          00:00:00
     4          22:15:00
     5          23:00:00
     6          22:15:00
   time:
     0          6:40
     1          20:15:00
     2          20:16:00
     3          00:00:00
     4          22:15:00
     5          23:00:00
     6          22:15:00
   timeCond:
     0          0
     1          0
     2          1
     3          1
     4          2
     5          2
     6          3
   timer:
     0          0
     1          0
     2          0
     3          0
     4          0
     5          0
     6          0
   timers:
     2           4  5
   trigger:
   triggertime:
     1655057700:
       localtime  1655057700
       hash:
     1655057760:
       localtime  1655057760
       hash:
     1655064900:
       localtime  1655064900
       hash:
     1655067600:
       localtime  1655067600
       hash:
     1655071200:
       localtime  1655071200
       hash:
     1655095200:
       localtime  1655095200
       hash:
   uiState:
   uiTable:
Attributes:
   checkReadingEvent 0
   room       Steckdosen
   wait       0:0:-900+int(rand(600)),-900+int(rand(600)):0


Haupt ist ja dieses wait:
wait       0:0:-900+int(rand(600)),-900+int(rand(600)):0

Danke schon mal für eure Hilfe.

Per

Sieht zwar syntaktisch richtig aus, aber ergibt das nicht einen negativen Wert? Sprich es müsste schon vor dem Ereignis auslösen..

Wasserwerk33

Ja wollte es noch ein bisschen mehr Verschiebung im Licht haben.

Dann schau ich mir mal an ob es klappt sonst melde ich mich nochmal

Danke schon im Voraus

Sany

ZitatVielleicht kann mir einer sagen ob dieses so richtig geschrieben ist und funktionieren würde

man darf das gerne auch ausprobieren. Wenn man nicht sicher ist, einfach ein/das DOIF mit "Spieldaten" definieren und mittel list und event-Monitor zusehen, was passiert.

Zitat-900+int(rand(600))
rand(600) gibt ja ein float zwischen 0 und 600, welches Du per int() zur Ganzzahl umwandelst. "Falls" die Rechnung an der Stelle funktioniert kommt ja irgendwas zwischen -300 und 300 heraus. Details, wie man im wait rechnet und welche Werte aktzeptabel sind siehe commandref.
Auch hier: wenn Du nicht sicher bist und die commandref evtl. den Fall nicht beschreibt und im Forum nix zu finden ist: mach ein DOIF mit einem wait und trage dort einen negativen wert ein. Dann muss der Zweig einmal getriggert werden und schon siehst Du in der Detailbeschreibung/list ob da ein timer erzeugt wurde oder nicht. Es reicht ein DOIF mit einem Zeittrigger, nichts in der Ausführung und eben das attr wait.

Versuch macht kluch!


Sany
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Per

Zitat von: Sany am 13 Juni 2022, 14:36:59
kommt ja irgendwas zwischen -300 und 300 heraus.
Nicht zwischen -900 und -300?

Damian

Also, ein negativer Wait-Wert wird ignoriert und führt zur sofortigen Ausführung. Es ist also nicht sinnvoll ein negatives Wait zu definieren.

Und woher weiß ich das? Nicht weil ich es noch wusste - die Programmierung liegt schon Jahre zurück, sondern weil ich es schnell ausprobiert habe und weil alles andere keinen Sinn ergäbe - man kann die Zeit nun mal nicht zurückdrehen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sany

ZitatNicht zwischen -900 und -300?
stimmt. habe irgendwie die 600 2 mal dazugezählt. Am Ursprungsproblem ändert sich dadurch ja nix.
fhem auf Zotac ZBox nano als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

xenos1984

Zitat von: Damian am 13 Juni 2022, 19:49:38
Und woher weiß ich das? Nicht weil ich es noch wusste - die Programmierung liegt schon Jahre zurück, sondern weil ich es schnell ausprobiert habe und weil alles andere keinen Sinn ergäbe - man kann die Zeit nun mal nicht zurückdrehen.

D.h. ein DOIF mit negativem Wait eignet sich nicht, um eine Warnung zu generieren, bevor dem DeLorean das Plutonium ausgeht? :D

Damian

Zitat von: xenos1984 am 14 Juni 2022, 06:41:11
D.h. ein DOIF mit negativem Wait eignet sich nicht, um eine Warnung zu generieren, bevor dem DeLorean das Plutonium ausgeht? :D

Das könnte man durchaus, wenn Wait in Kombination mit einer Zeitangabe bei der Bestimmung des nächsten Trigger-Zeitpunktes verrechnet worden wäre.

Das passiert aber nicht, die Berechnung der Wait-Verzögerung findet erst dann statt, wenn der eigentliche Event/Zeit-Trigger zuschlägt und deswegen kann man keine negative Verzögerung sinnvoll nutzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Wasserwerk33

Danke. Habe es ohne - gebaut und es schaltet. Mit Zufall.

Mit dem anderen muss ich nochmal probieren.

Danke