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
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
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...