Autor Thema: Wait-Timer ist der so richtig geschrieben??  (Gelesen 652 mal)

Offline Wasserwerk33

  • Sr. Member
  • ****
  • Beiträge: 605
Wait-Timer ist der so richtig geschrieben??
« am: 12 Juni 2022, 12:14:19 »
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.

Offline Per

  • Hero Member
  • *****
  • Beiträge: 1723
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #1 am: 13 Juni 2022, 08:59:46 »
Sieht zwar syntaktisch richtig aus, aber ergibt das nicht einen negativen Wert? Sprich es müsste schon vor dem Ereignis auslösen..

Offline Wasserwerk33

  • Sr. Member
  • ****
  • Beiträge: 605
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #2 am: 13 Juni 2022, 13:23:48 »
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

Offline Sany

  • Full Member
  • ***
  • Beiträge: 383
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #3 am: 13 Juni 2022, 14:36:59 »
Zitat
Vielleicht 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 deConz(ZigBee), MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Offline Per

  • Hero Member
  • *****
  • Beiträge: 1723
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #4 am: 13 Juni 2022, 19:07:01 »
kommt ja irgendwas zwischen -300 und 300 heraus.
Nicht zwischen -900 und -300?

Online Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9750
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #5 am: 13 Juni 2022, 19:49:38 »
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

Offline Sany

  • Full Member
  • ***
  • Beiträge: 383
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #6 am: 13 Juni 2022, 22:24:49 »
Zitat
Nicht 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 deConz(ZigBee), MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Online xenos1984

  • Developer
  • Full Member
  • ****
  • Beiträge: 473
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #7 am: 14 Juni 2022, 06:41:11 »
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
Gefällt mir Gefällt mir x 1 Liste anzeigen

Online Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9750
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #8 am: 14 Juni 2022, 08:33:51 »
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

Offline Wasserwerk33

  • Sr. Member
  • ****
  • Beiträge: 605
Antw:Wait-Timer ist der so richtig geschrieben??
« Antwort #9 am: 15 Juni 2022, 19:01:48 »
Danke. Habe es ohne - gebaut und es schaltet. Mit Zufall.

Mit dem anderen muss ich nochmal probieren.

Danke