[gelöst]my PERL kaputt? ;-)

Begonnen von matze1999, 21 Mai 2023, 15:03:04

Vorheriges Thema - Nächstes Thema

matze1999

Hallo,

ich finde den Fehler nicht, hier das log:

2023.05.21 14:59:52 4: Beregnung_notify_2 exec {
return if $EVTPART1 eq "0";
my $segment;

my $read = $EVTPART0;
    chop $read;
    if ( $read eq "1" ) {
           $segment = "MQTT2_DVES_FFF554";
    } elsif ( $read eq "2" ) {
           $segment = "MQTT2_DVES_FFF554_CH2";
    } elsif ( $read eq "3" ) {
           $segment = "MQTT2_DVES_FFF554_CH3";
    } elsif ( $read eq "4" ) {
           $segment = "MQTT2_DVES_FFF554_CH4";
    } elsif ( $read eq "5" ) {
           $segment = "MQTT2_DVES_57F4E8";
    } elsif ( $read eq "6" ) {
           $segment = "MQTT2_DVES_57F4E8_CH2";
    } elsif ( $read eq "7" ) {
           $segment = "MQTT2_DVES_57F4E8_CH3";
    } elsif ( $read eq "8" ) {
           $segment = "MQTT2_DVES_57F4E8_CH4";
    }
fhem ("set MQTT2_DVES_207234 on;sleep 5 MQTT2_DVES_207234 quiet;set $segment on-for-timer $EVTPART1*60;setreading $NAME $read 0");
}


2023.05.21 14:59:52 3: Beregnung_notify_2 return value: Unknown command {
return, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command chop, try help.
IF: no left bracket:  {           $segment = "MQTT2_DVES_FFF554"
Unknown command }, try help.
Unknown command }, try help.
Unknown command }, try help.
Unknown command }, try help.
Unknown command }, try help.
Unknown command }, try help.
Unknown command }, try help.
Unknown command }
fhem, try help.

und hier das notify dazu:

defmod Beregnung_notify_2 notify Beregnung.manuell:.* {\
return if $EVTPART1 eq "0";;\
my $segment;;\
\
my $read = $EVTPART0;;\
    chop $read;;\
    if ( $read eq "1" ) {\
           $segment = "MQTT2_DVES_FFF554";;\
    } elsif ( $read eq "2" ) {\
           $segment = "MQTT2_DVES_FFF554_CH2";;\
    } elsif ( $read eq "3" ) {\
           $segment = "MQTT2_DVES_FFF554_CH3";;\
    } elsif ( $read eq "4" ) {\
           $segment = "MQTT2_DVES_FFF554_CH4";;\
    } elsif ( $read eq "5" ) {\
           $segment = "MQTT2_DVES_57F4E8";;\
    } elsif ( $read eq "6" ) {\
           $segment = "MQTT2_DVES_57F4E8_CH2";;\
    } elsif ( $read eq "7" ) {\
           $segment = "MQTT2_DVES_57F4E8_CH3";;\
    } elsif ( $read eq "8" ) {\
           $segment = "MQTT2_DVES_57F4E8_CH4";;\
    }\
fhem ("set MQTT2_DVES_207234 on;;sleep 5 MQTT2_DVES_207234 quiet;;set $segment on-for-timer $EVTPART1*60;;setreading $NAME $read 0");;\
}\

matze1999

matze1999

damit geht es jetzt

defmod Beregnung_notify_2 notify Beregnung.manuell:.* {\
return if $EVTPART1 eq "0";;\
my $segment;;\
my $time = $EVTPART1*60;;\
\
my $read = $EVTPART0;;\
    chop $read;;\
    if ( $read eq "1" ) {\
           $segment = "MQTT2_DVES_FFF554";;\
    } elsif ( $read eq "2" ) {\
           $segment = "MQTT2_DVES_FFF554_CH2";;\
    } elsif ( $read eq "3" ) {\
           $segment = "MQTT2_DVES_FFF554_CH3";;\
    } elsif ( $read eq "4" ) {\
           $segment = "MQTT2_DVES_FFF554_CH4";;\
    } elsif ( $read eq "5" ) {\
           $segment = "MQTT2_DVES_57F4E8";;\
    } elsif ( $read eq "6" ) {\
           $segment = "MQTT2_DVES_57F4E8_CH2";;\
    } elsif ( $read eq "7" ) {\
           $segment = "MQTT2_DVES_57F4E8_CH3";;\
    } elsif ( $read eq "8" ) {\
           $segment = "MQTT2_DVES_57F4E8_CH4";;\
    }\
fhem ("set MQTT2_DVES_207234 on;;sleep 5 quiet;;set $segment on-for-timer $time;;setreading $NAME $read 0");;\
}\

matze1999

Beta-User

Diese "elsif-Bandwürmer" tun mir in den Augen weh...

Wenn du eine Zuordnungstabelle haben willst, nimmst du besser einen Hash.

So sollte das in etwa (besser und lesbarer*) funktionieren (ungetestet):
 defmod Beregnung_notify_2 notify Beregnung.manuell:.* {\
return if !$EVTPART1 || !looks_like_number($EVTPART1);;\ #undef-Fall und 0 werden abgefangen sowie unzulässige Eingaben
my $time = $EVTPART1*60;;\
\
my $segments = {1=>"MQTT2_DVES_FFF554", 2=>"MQTT2_DVES_FFF554_CH2", 3=>"MQTT2_DVES_FFF554_CH3", 4=>"MQTT2_DVES_FFF554_CH4", 5=>"MQTT2_DVES_57F4E8", 6=>"MQTT2_DVES_57F4E8_CH2", 7=>"MQTT2_DVES_57F4E8_CH3", 8=>"MQTT2_DVES_57F4E8_CH4"};;\
\
chop $EVTPART0;;\
my $segment = $segments->{$EVTPART0} // return;;\ #Perl-defined-or-operator
fhem ("set MQTT2_DVES_207234 on;;sleep 5 quiet;;set $segment on-for-timer $time;;setreading $NAME $read 0");;\
}
* noch lesbarer wird es, wenn man das in myUtils auslagert und/oder den Hash aufgedröselter notiert; das war mir hier aber zu umständlich...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors