FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: rhoffm34 am 03 Juni 2018, 00:02:30

Titel: DOIF
Beitrag von: rhoffm34 am 03 Juni 2018, 00:02:30
Nabend,

jetzt habe ich genug gefummelt und frage in die Runde...

   
([RolllDown] == "1")
{
my $time1 = Value("P_time_RollDirection_05");
my $time2 = Value("P_time_RollPower_Global");
fhem("set HM_Rolll_ActuatorDirection_Sw_05 on-for-timer " .$time1 );fhem("set HM_Rolll_AktuatorPower_Sw_05 on-for-timer " .$time2 )
}

... soll bewirken das bei RolllDown == 1 die beiden nachfolgenden Befehle ausgeführt werden. Funktioniert auch bestens nur das Wait Attr. 2,17 wird ignoriert.

Ich vermute ich habe die beiden Befehle nicht richtig zueinander gebracht... Komma oder Semikolon.... Runde Klammer, 2 runde Klammern.....????

Ich weiß, zu wenig Ahnung von Perl .....

Wer weiß Rat?

Gruß.
Titel: Antw:DOIF
Beitrag von: amenomade am 03 Juni 2018, 00:21:26
Zeig mal ein "list" von deinem DOIF. Einfach "list <DOIFNAME>" im Kommandofeld von der Weboberfläsche eingeben, und das Ergebnis  in Code Tags (das # im Edit Menü) hier posten.

Was soll das "wait" Attribut machen? Wenn Du nur eine branche im Doif hast, kann nur ein Wert "wait" (hier die 2) benutzt werden.

{...} = ein einziger Befehl.
Titel: Antw:DOIF
Beitrag von: rhoffm34 am 03 Juni 2018, 09:39:08
Internals:
   DEF        ([RolllDown] == "1")
{
my $time1 = Value("P_time_RollDirection_05");
my $time2 = Value("P_time_RollPower_Global");
fhem("set HM_Rolll_ActuatorDirection_Sw_05 on-for-timer " .$time1 );fhem("set HM_Rolll_AktuatorPower_Sw_05 on-for-timer " .$time2 )
}
   MODEL      FHEM
   NAME       Rolll_Buero_Down
   NR         345
   NTFY_ORDER 50-Rolll_Buero_Down
   STATE      cmd_2
   TYPE       DOIF
   READINGS:
     2018-06-03 07:00:00   Device          RolllDown
     2018-06-03 07:00:00   cmd             2
     2018-06-03 07:00:00   cmd_event       RolllDown
     2018-06-03 07:00:00   cmd_nr          2
     2018-06-03 07:00:00   e_RolllDown_STATE 0
     2018-06-02 23:55:05   mode            enabled
     2018-06-03 07:00:00   state           cmd_2
   Regex:
   condition:
     0          InternalDoIf($hash,'RolllDown','STATE') == "1"
   devices:
     0           RolllDown
     all         RolllDown
   do:
     0:
       0          {  my $time1 = Value("P_time_RollDirection_05"); my $time2 = Value("P_time_RollPower_Global"); fhem("set HM_Rolll_ActuatorDirection_Sw_05 on-for-timer " .$time1 );fhem("set HM_Rolll_AktuatorPower_Sw_05 on-for-timer " .$time2 ) }
     1:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      0
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   RolllDown
     timerevent 0
     triggerDev RolllDown
     timerevents:
       0
     timereventsState:
       state: 0
     triggerEvents:
       0
     triggerEventsState:
       state: 0
   internals:
     0           RolllDown:STATE
     all         RolllDown:STATE
   itimer:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   room       Rolladensteuerung
   wait       2,17


Ich nutze für die Rolladensteuerung zwei Aktoren. Der erste bestimmt die Richtung der zweite schaltet Power. 

Mit Wait 2,17 soll der erste Aktor um 2s und der zweite um 17s verzögert werden.
Titel: Antw:DOIF
Beitrag von: Damian am 03 Juni 2018, 09:59:23
DOIF   ([RolllDown] == "1")
(set HM_Rolll_ActuatorDirection_Sw_05 on-for-timer [P_time_RollDirection_05])
(set HM_Rolll_AktuatorPower_Sw_05 on-for-timer [P_time_RollPower_Global])


wait       2,17

Wie man einzelne Befehle im DOIF verzögert, steht ausführlich in der Commandref https://fhem.de/commandref_DE.html#DOIF_wait
Titel: Antw:DOIF
Beitrag von: rhoffm34 am 03 Juni 2018, 10:34:04
Top, Damian...

Der Tag hat sich schon gelohnt. Mehr gelernt als erwartet. Das mit dem Wait 2,17 war mir schon klar und das habe ich auch schon angewendet. Aber dann habe ich umständlich das mit den Parametern ($time1 usw) reingerödelt und stolperte.

Vielen Dank. Auch Dir vielen Dank amenomade.... kannst Du Nachts nicht schlafen?? :-)