Hallo zusammen,
ich habe ein DOIF im Perl-Modus mit einem sub definiert:
subs {
sub min_haus_verbrauch()
{
## Wärmer als 10 Grad oder Sommer
if ([sen.outdoor.underground:temperature] > 10 or
($month >= 4 and $month <= 10)) {
return 100; ## Heizungspumpe aus
} else {
return 170; ## Heizungspumpe ein
}
}
}
Das gibt folgende Fehler:
error in defs block: Bareword "sen" not allowed while "strict subs" in use at (eval 6501739) line 17.
syntax error at (eval 6501739) line 17, near "underground:"
Global symbol "$month" requires explicit package name (did you forget to declare "my $month"?) at (eval 6501739) line 18.
Global symbol "$month" requires explicit package name (did you forget to declare "my $month"?) at (eval 6501739) line 18.
Offenbar stehen [device:reading] und FHEM-Variablen im subs-Block nicht zur Verfügung.
Statt [device:reading] kann ich ReadingsVal(...) nutzen. Gibt es auch einen Workaround für $month?
Ist geplant, diese Funktionen auch im subs-Block zu implementieren?
Alex
Ob es in DOIF noch andere Möglichkeiten gibt: keine Ahnung.
Aus anderen Perl-Subs raus geht:
my $my_OffTime = AnalyzeCommand(0, '{return $we}');
Gruß, Joachim
Die Datumsvariablen werden vor dem Aufruf eines DOIF-Blocks definiert, außer beim subs-Block. Du kannst $month als Übergabeparameter definieren, dann sollte es klappen, wenn du deine Subroutine aus einem regulären DOIF-Block aufrufst.
Danke, hat funktioniert!