Hi!
Danke für die Antworten. Ich habe das Auslesen der Parameter beim Kopieren versehentlich weggelassen ... ;o)
Also somit stimmt der erste Hinweis. Ich habe nun noch Mal geändert: Zum Testen der Sunroutine wurde at durch notify ersetzt.
Das hat folgendes ergeben:
Fhem.cfg:
define n_Taster4 notify Taster4 {\
my $Ergebnis = {Offset('sunset','00:10:00','17:00:00','21:00:00')};;\
Log 1, "$Ergebnis";;\
}
myUtils.pm:
sub
Offset($$$$){
my ($Methode,$Summand,$Zeit_min,$Zeit_max) = @_;
my $Zeitstring = ReadingsVal("Local_Wetter",$Methode,"nv");
if ($Zeitstring eq "nv") {Log 1, "Fehler bei der Wetterabfrage...$Zeitstring"};
Log 1, ("uebergebene Parameter sind Methode: $Methode, Summand: $Summand, Zeit_min: $Zeit_min, Zeit_max: $Zeit_max");
Log 1, "Von Yahoo ermittelter Wert: $Zeitstring";
my @Summand = split(/:/, $Summand);
my @Array_wetter = split(/:/, $Zeitstring);
my $Sekunden_wetter = pop(@Array_wetter) + pop(@Summand);
my $Minuten_wetter = pop(@Array_wetter) + pop(@Summand);
my $Stunden_wetter = pop(@Array_wetter) + pop(@Summand);
Log 3, "Stunden: $Stunden_wetter, Minuten: $Minuten_wetter, Sekunden: $Sekunden_wetter";
$Zeitstring = sprintf("%02d:%02d:%02d", $Stunden_wetter, $Minuten_wetter, $Sekunden_wetter);
Log 3, "daraus erstellter Zeitstring: $Zeitstring";
if ($Zeitstring lt $Zeit_min) {$Zeitstring = $Zeit_min}
if ($Zeitstring gt $Zeit_max) {$Zeitstring = $Zeit_max}
Log 3,"Offset-Routine liefert: $Zeitstring";
return "$Zeitstring";
}
FileLog:
2013.03.04 21:49:07 1: uebergebene Parameter sind Methode: sunset, Summand: 00:10:00, Zeit_min: 17:00:00, Zeit_max: 21:00:00
2013.03.04 21:49:07 1: Von Yahoo ermittelter Wert: 17:52:59
2013.03.04 21:49:07 3: Stunden: 17, Minuten: 62, Sekunden: 59
2013.03.04 21:49:07 3: daraus erstellter Zeitstring: 17:62:59
2013.03.04 21:49:07 3: Offset-Routine liefert: 17:62:59
Odd number of elements in anonymous hash at (eval 505) line 1.
2013.03.04 21:49:07 1: HASH(0x7a7858)
MfG, MisterEltako.