FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: All-Ex am 12 April 2024, 09:40:37

Titel: [gelöst] DOIF Perl: $month und [device:reading] funktionieren nicht in subs-Block
Beitrag von: All-Ex am 12 April 2024, 09:40:37
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
Titel: Aw: DOIF Perl: $month und [device:reading] funktionieren nicht in subs-Block
Beitrag von: MadMax-FHEM am 12 April 2024, 12:49:49
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
Titel: Aw: DOIF Perl: $month und [device:reading] funktionieren nicht in subs-Block
Beitrag von: Damian am 12 April 2024, 13:32:52
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.
Titel: Aw: DOIF Perl: $month und [device:reading] funktionieren nicht in subs-Block
Beitrag von: All-Ex am 13 April 2024, 00:14:47
Danke, hat funktioniert!