FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: z0lt1 am 28 Juli 2021, 08:55:24

Titel: DOIF Zeitberechnung in userreading
Beitrag von: z0lt1 am 28 Juli 2021, 08:55:24
Hallo, mit folgender Definition schalte ich meinen Filter für x Stunden an
Internals:
   CFGFN     
   DEF        ([$SELF:P_mybutton] eq "on") (
set ChatBot message @Xxxxx Pool-Timer gestartet für [$SELF:P_hours] Stunden,
set pl_Switch.SFA on,
set pl_Switch.Chlorinator on
) (
set ChatBot message @Xxxxx Pool-Timer aus,
set pl_Switch.SFA off,
set pl_Switch.Chlorinator off,
set $SELF P_mybutton off
)

DOELSEIF ([$SELF:P_mybutton] eq "off") (
set pl_Switch.SFA off,
set pl_Switch.Chlorinator off
)
   FUUID      60fba0e7-f33f-d024-1e35-67bcffc41f1edcba
   MODEL      FHEM
   NAME       di_Timer.PoolFilterChlor
   NOTIFYDEV  di_Timer.PoolFilterChlor,global
   NR         12269
   NTFY_ORDER 50-di_Timer.PoolFilterChlor
   STATE      cmd_1
   TYPE       DOIF
   VERSION    24643 2021-06-16 07:26:15
   READINGS:
     2021-07-27 17:11:19   P_Ausschaltzeitpunkt (1*3600) set pl_Switch.SFA on
     2021-07-27 18:28:07   P_hours         2
     2021-07-27 20:28:09   P_mybutton      off
     2021-07-27 20:28:09   cmd             1.2
     2021-07-27 20:28:09   cmd_event       di_Timer.PoolFilterChlor
     2021-07-27 20:28:09   cmd_nr          1
     2021-07-27 20:28:09   cmd_seqnr       2
     2021-07-27 18:28:09   e_di_Timer.PoolFilterChlor_P_mybutton on
     2021-07-27 17:17:38   mode            enabled
     2021-07-27 20:28:09   state           cmd_1
     2021-07-27 20:28:09   wait_timer      no timer
   Regex:
     accu:
     collect:
     cond:
       di_Timer.PoolFilterChlor:
         0:
           P_mybutton ^di_Timer.PoolFilterChlor$:^P_mybutton:
         1:
           P_mybutton ^di_Timer.PoolFilterChlor$:^P_mybutton:
   attr:
     cmdState:
     wait:
       0:
         0
         [$SELF:P_hours]*3600
       1:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'di_Timer.PoolFilterChlor','P_mybutton') eq "on"
     1          ::ReadingValDoIf($hash,'di_Timer.PoolFilterChlor','P_mybutton') eq "off"
   do:
     0:
       0            set ChatBot message @Zoltan_Fono Pool-Timer gestartet für [di_Timer.PoolFilterChlor:P_hours] Stunden, set pl_Switch.SFA on, set pl_Switch.Chlorinator on
       1            set ChatBot message @Zoltan_Fono Pool-Timer aus, set pl_Switch.SFA off, set pl_Switch.Chlorinator off, set di_Timer.PoolFilterChlor P_mybutton off
     1:
       0            set pl_Switch.SFA off, set pl_Switch.Chlorinator off
     2:
   helper:
     DEVFILTER  ^global$|^di_Timer.PoolFilterChlor$
     NOTIFYDEV  global|di_Timer.PoolFilterChlor
     event      P_mybutton: on
     globalinit 1
     last_timer 0
     sleepdevice di_Timer.PoolFilterChlor
     sleepsubtimer -1
     sleeptimer -1
     timerdev   di_Timer.PoolFilterChlor
     timerevent P_mybutton: on
     triggerDev di_Timer.PoolFilterChlor
     timerevents:
       P_mybutton: on
       e_di_Timer.PoolFilterChlor_P_mybutton: on
       cmd_nr: 1
       cmd_seqnr: 1
       cmd: 1.1
       cmd_event: di_Timer.PoolFilterChlor
       cmd_1_1
       wait_timer: 27.07.2021 20:28:09 cmd_1_2 di_Timer.PoolFilterChlor
     timereventsState:
       P_mybutton: on
       e_di_Timer.PoolFilterChlor_P_mybutton: on
       cmd_nr: 1
       cmd_seqnr: 1
       cmd: 1.1
       cmd_event: di_Timer.PoolFilterChlor
       cmd_1_1
       wait_timer: 27.07.2021 20:28:09 cmd_1_2 di_Timer.PoolFilterChlor
     triggerEvents:
       P_mybutton: on
       e_di_Timer.PoolFilterChlor_P_mybutton: on
       cmd_nr: 1
       cmd_seqnr: 1
       cmd: 1.1
       cmd_event: di_Timer.PoolFilterChlor
       cmd_1_1
       wait_timer: 27.07.2021 20:28:09 cmd_1_2 di_Timer.PoolFilterChlor
     triggerEventsState:
       P_mybutton: on
       e_di_Timer.PoolFilterChlor_P_mybutton: on
       cmd_nr: 1
       cmd_seqnr: 1
       cmd: 1.1
       cmd_event: di_Timer.PoolFilterChlor
       cmd_1_1
       wait_timer: 27.07.2021 20:28:09 cmd_1_2 di_Timer.PoolFilterChlor
   internals:
   readings:
     all         di_Timer.PoolFilterChlor:P_mybutton
   trigger:
   uiState:
   uiTable:
Attributes:
   fhem_widget_channels []
   group      Automatismen
   icon       clock
   readingList P_mybutton P_hours
   room       02_Pool
   setList    P_mybutton:on,off P_hours:1,2,3,4,5,6,7,8,9,10
   wait       0,[$SELF:P_hours]*3600:0
   webCmd     P_hours:P_mybutton
   webCmdLabel Stunden:Aktiv


Nun würde ich gerne beim Starten ein userReadings erzeugen in welchem der Abschaltzeitpubkt drin steht. Also aktueller Zeitpunkt + x Stunden.
Titel: Antw:DOIF Zeitberechnung in userreading
Beitrag von: rabehd am 28 Juli 2021, 09:01:32
nur so als Anregung
{strftime("%H:%M", localtime([WeckerTablet:aWeckTime]+120))}
WeckerTablet:aWeckTime ist ein Reading in dem eine Unixzeit steht.
Statt 120 Sekunden musst Du Deine x stunden in Sekunden addieren.
Titel: Antw:DOIF Zeitberechnung in userreading
Beitrag von: Otto123 am 28 Juli 2021, 09:29:44
Hi,

setreading $SELF Abschaltzeitpunkt {(strftime("%H:%M:%S",localtime(time+ReadingsNum($SELF,'P_hours',99)*3600)))}
Quelle https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit

Gruß Otto
Titel: Antw:DOIF Zeitberechnung in userreading
Beitrag von: z0lt1 am 28 Juli 2021, 23:04:06
Danke euch beiden, wieder was dazu gelernt :-)

Beim $SELF in der ReadingsNum musste ich Anführungsstiche rummachen, sonst gab es eine Fehlermeldung.
setreading $SELF P_Abschaltzeitpunkt {(strftime("%H:%M:%S",localtime(time+ReadingsNum("$SELF","P_hours",99)*3600)))}
Titel: Antw:DOIF Zeitberechnung in userreading
Beitrag von: Otto123 am 28 Juli 2021, 23:21:28
richtig, habe ich nicht dran gedacht: Die Variable wird aufgelöst und dann steht der String in dem Perl Ausdruck, dann erst wird der ReadingsNum() Ausdruck ausgeführt. Damit das funktioniert muss man doppelte verwenden :)

Die DOIF Schreibweise in rabehd seinem Beispiel geht sicher auch - die verwirrt mich aber immer innerhalb eines Perlausdrucks  ::)