Perlanfängerproblem mit If elsif else

Begonnen von Fuchsbau, 16 November 2019, 13:13:17

Vorheriges Thema - Nächstes Thema

Fuchsbau

Hallo

versuche für meinen Windsensor die Windgeschwindigkeit(in m/s) als Windstärke (Beaufort) auszugeben.
Dafür habe ich die Funktion sub GetBeaufort($) in die 99_myUtils.pm eingefügt.

sub GetBeaufort($) {
  my ($Speed) = @_;
  my $ret=99;
     if ($Speed < 0.5) {
  $ret=0;
  } elsif ($Speed >= 0.51 or $Speed < 2.06){
  $ret=1;
  } elsif ($Speed >= 2.06 or $Speed < 3.6){
  $ret=2;
  } elsif ($Speed >= 3.6 or $Speed < 5.66){
  $ret=3;
  } elsif ($Speed >= 5.66 or $Speed < 8.23){
  $ret=4;
  } elsif ($Speed >= 8.23 or $Speed < 11.23){
  $ret=5;
  } elsif ($Speed >= 11.23 or $Speed < 14.4){
  $ret=6;
  } elsif ($Speed >= 14.4 or $Speed < 17.49){
  $ret=7;
  } elsif ($Speed >= 17.49 or $Speed < 21.09){
  $ret=8;
  } elsif ($Speed >= 21.09 or $Speed < 24.69){
  $ret=9;
  } elsif ($Speed >= 24.69 or $Speed < 28.81){
  $ret=10;
  } elsif ($Speed >= 28.81 or $Speed < 32.92){
  $ret=11;
  } else {
  $ret=12;
  }
return $ret;
}


Leider funktioniert es nicht so wie ich es erwarte. Es soll, je nach Windgeschwindigkeit, die Windstärke zurückgegeben werden. Unter 0.5 Windgeschwindigkeit  wird "0" richtig zurückgegeben. Über 0.5 wird "1" zurückgegeben. Egal wie hoch der Wert über 0.5 m/s Windgeschwindigkeit ist es wird immer "1" zurückgegeben.

Was mache ich falsch?
RPI4/4GB / 120Gb SSD (boot)
Conbee 2 / Tasmota (div SONOFF und Eigenbau ESP8266) / Shellys (3EM, 1PM, 1, 2.5) / nanoCUL (Homematic Fensterkontakte)

CoolTux

Auf die schnelle geschaut.

Mach mal aus Deinen or ein and
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Fuchsbau

RPI4/4GB / 120Gb SSD (boot)
Conbee 2 / Tasmota (div SONOFF und Eigenbau ESP8266) / Shellys (3EM, 1PM, 1, 2.5) / nanoCUL (Homematic Fensterkontakte)