[Gelöst]Mittagsschlaftimer {perlfunc()}

Begonnen von Darkmozart, 28 Dezember 2017, 20:20:11

Vorheriges Thema - Nächstes Thema

Darkmozart

Hallo zusammen.

Problemstellung:
Ich möchte einen einstellbaren Timer realisieren, der mir folgende Aufgabe erledigt:
- Fahre Rollos zu Beginn auf 85%
- Warte entweder eine vorgegebene oder einstellbare Zeit und öffne die Rollos dann wieder.

Realisieren würde ich das ganze gern über ein DOIF, das mit den webCmds start und dauer (ein Slider) ausgestattet ist.
Der fest eingestellte Teil über start funktioniert auch einwandfrei, Probleme mach die über den Slider einstellbare Dauer. Die wird in einer selbstgebasteleten Perlfunc ausgewertet, was, wenn ich die Perlfunc in der Eingabezeile eingebe auch funktioniert. Nur im DOIF, automatisiert bekomme ich einen syntax error:
Zitatdefmod Time1 at +{dimToTime(time_switch:dauer)} (set tahoma_2912919 open,set tahoma_1884512 open): the function "dimToTime(time_switch:dauer)" must return a timespec and not syntax error at (eval 3827558) line 1, near "time_switch:" .
Egal ob ich das denSlider des webCmd verwende oder set time_switch dauer XX mache.

Hier mal meine Code:
(Raw) DOIF:
defmod time_switch DOIF ((["$SELF:dauer"] >0))\
(set tahoma_2912919 dim 85,set tahoma_1884512 dim 85)(defmod Time1 at +{dimToTime($SELF:dauer)} (set tahoma_2912919 open,set tahoma_1884512 open))\
DOELSEIF (["$SELF:start"])\
(set tahoma_2912919 dim 85,set tahoma_1884512 dim 85")(defmod Time1 at +00:50 (set tahoma_2912919 open,set tahoma_1884512 open))\

attr time_switch do always
attr time_switch readingList dauer
attr time_switch room Schlafzimmer
attr time_switch setList start dauer:slider,0,1,100
attr time_switch webCmd start:dauer

und die Perlffunc:
sub dimToTime($){
my ($duration)=@_;
if ($duration<10){
   return "00:0$duration";
}
if ($duration<60){
   return "00:$duration";
}
if ($duration>59){
   my $min=$duration%60;
   my $hour=int($duration/60);

   if ($min<10){
    $min="0$min";
   }
   if ($hour<10){
    $hour="0$hour";
    }

   return "$hour:$min";
}

}

Die Programmierung der Perlfunc geht sicher eleganter, das ist aber nicht das Thema - in der Eingabezeile funktioniert sie ja und ich bekomme einen String im "HH:MM"-Format.

Kann mir jemand einen Tip geben, wie ich den Syntax-Error im DOIF (entstehend durch: {dimToTime($SELF:dauer)} ) beseitigen kann?
RasPi3 mit aktuellem FHEM
CUL 433MHZ
Ne Menge Somfy Rollläden
Aktuelles Projekt: Sensoren (MySensors) für Helligkeit und Temperatur zur Rollladensteuerung
Diverse Spielereien...

Damian

defmod time_switch DOIF (([$SELF:dauer] >0))\
(set tahoma_2912919 dim 85,set tahoma_1884512 dim 85)(defmod Time1 at +{dimToTime([$SELF:dauer])} (set tahoma_2912919 open,set tahoma_1884512 open))\
DOELSEIF ([$SELF:start])\
(set tahoma_2912919 dim 85,set tahoma_1884512 dim 85")(defmod Time1 at +00:50 (set tahoma_2912919 open,set tahoma_1884512 open))\
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Darkmozart

RasPi3 mit aktuellem FHEM
CUL 433MHZ
Ne Menge Somfy Rollläden
Aktuelles Projekt: Sensoren (MySensors) für Helligkeit und Temperatur zur Rollladensteuerung
Diverse Spielereien...