Moin
Brauch mal wieder eure Hilfe. :-[
Habe einen BMP085 (180) mit dem ich den Luftdruck messe.
Nur habe ich mir in der 99_myUtils.pm eine Trendanzeige eingebaut.
Der steigende und fallende Luftdruck wird richtig Angezeigt nur der gleichbleibende "+0.0" nicht.
Was mache ich hier : return $hPaText3h = "-".$leer.$hPaTrendWert if ($hPaTrendWert = /\+0(.)0/g ); mal wieder Falsch.
Hier "/\+0(.)0/g" wird der Fehler liegen, nun habe ich schon einiges Versucht.
Und muss Zugestehen das ich es nicht Verstehe. :o
Hier mal der gesamte Codeteil.
#statPressureTendency3h
sub hPaTrend()
{
my $leer = " ";
my $hPaTrendWert = substr((ReadingsVal( "Luftdruck", "statPressureTendency","")),22,4);
my $hPaText3h;
return $hPaText3h = "↓".$leer.$hPaTrendWert if ($hPaTrendWert =~ /\-/i );
return $hPaText3h = "↑".$leer.$hPaTrendWert if ($hPaTrendWert =~ /\+/i );
return $hPaText3h = "-".$leer.$hPaTrendWert if ($hPaTrendWert = /\+0(.)0/g );
}
In der letzten Zeile fehlt ein ~, = prueft auf numerische Gleichheit.
Wird aber nie erreicht, da die vorletzte Zeile auch bei "+0.0" zuschlaegt.
Das Modifier i (ignore case) ist im Zusammenhang mit + oder - sinnlos.
Tipp: "perldoc perlretut" durchlesen.
Waere nicht besser statt regexp ganz altmodisch auf "> 0", "< 0", "== 0" zu pruefen? Geht nur, falls $hPaTrendWert ein Zahl ist.
Beim letzten Ausdruck brauchst du ja eigentlich kein >if< mehr.
Wenn die ersten beiden nicht stimmen, muss ja eigentlich automatisch der letzte passen, also genügt ein
return $hPaText3h = "-".$leer.$hPaTrendWert;
lg, Ici
PS: RegExes teste ich sehr gerne mit www.regexr.com (http://www.regexr.com)
Vielen Dank euch beiden.@rudolfkoenigZitatTipp: "perldoc perlretut" durchlesen.
Werde ich tun.
ZitatWaere nicht besser statt regexp ganz altmodisch auf "> 0", "< 0", "== 0" zu pruefen? Geht nur, falls $hPaTrendWert ein Zahl ist.
Leider sind da minus und plus Werte möglich.
@IcingerZitatPS: RegExes teste ich sehr gerne mit www.regexr.com
Werde mich mal auf der Suche nach einer Deutschen HP machen.
Hier ist mein größtes Problem. :-[
ZitatWenn die ersten beiden nicht stimmen, muss ja eigentlich automatisch der letzte passen, also genügt ein return $hPaText3h = "-".$leer.$hPaTrendWert;
Das ist schon so wie
rudolfkoenig schrieb.
ZitatWird aber nie erreicht, da die vorletzte Zeile auch bei "+0.0" zuschlaegt.
Komme ich zu einer Lösung werde ich sie hier reinstellen.
Dreh den Spieß doch einfach um. Teste zuerst auf "+0.0".
Wenn das zutrifft, steigt die Sub eh aus.
Also:
#statPressureTendency3h
sub hPaTrend()
{
my $leer = " ";
my $hPaTrendWert = substr((ReadingsVal( "Luftdruck", "statPressureTendency","")),22,4);
my $hPaText3h;
return $hPaText3h = "↓".$leer.$hPaTrendWert if ($hPaTrendWert =~ /\-/i );
return $hPaText3h = "-".$leer.$hPaTrendWert if ($hPaTrendWert =~ /\+0(.)0/g );
return $hPaText3h = "↑".$leer.$hPaTrendWert; #Das hier muss nicht sein: if ($hPaTrendWert =~ /\+/i );
}
Aber wie Rudi schon gesagt hat, das könntest du auch einfacher machen ohne Regexen:
sub hPaTrend()
{
my $leer = " ";
my $hPaTrendWert = substr((ReadingsVal( "Luftdruck", "statPressureTendency","")),22,4);
my $hPaText3h;
return $hPaText3h = "↓".$leer.$hPaTrendWert if ($hPaTrendWert <0);
return $hPaText3h = "↑".$leer.$hPaTrendWert if ($hPaTrendWert >0);
return $hPaText3h = "-".$leer.$hPaTrendWert;
}
lg, Ici
PS: Deine Regex passt eh richtig auf das "+0.0"
@IcingerSuper, so klappt es!
Zitat#statPressureTendency3h
sub hPaTrend()
{
my $leer = " ";
my $hPaTrendWert = substr((ReadingsVal( "Luftdruck", "statPressureTendency","")),22,4);
my $hPaText3h;
return $hPaText3h = "↓".$leer.$hPaTrendWert if ($hPaTrendWert =~ /\-/i );
return $hPaText3h = "=".$leer.substr($hPaTrendWert,1,3) if ($hPaTrendWert =~ /\+0(.)0/g );
return $hPaText3h = "↑".$leer.$hPaTrendWert;
}
Aber mit eure Tipps
www.regexr.com und
perldoc perlretut werde ich mich noch Beschäftigen.