[gelöst] DOIF Perl: $month und [device:reading] funktionieren nicht in subs-Block

Begonnen von All-Ex, 12 April 2024, 09:40:37

Vorheriges Thema - Nächstes Thema

All-Ex

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

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

All-Ex