Perl - Vergleichsoperationen

Begonnen von bartman121, 30 Januar 2017, 11:12:38

Vorheriges Thema - Nächstes Thema

bartman121

Hallo,

ich habe derzeit ein kleines Probem.

Ein ReadingsVal liefert mir Werte aus folgendem Berich: "off",15,15.5, ....

Dummerweise ist "off" ein String, damit kann > oder < logischerweise nicht machen ....

Mein Notify arbeitet zwar korrekt, jedoch erhalte ich immer eine Meldung, dass der Ausdruck nicht numerisch ist.

Gibt es eine Übersicht über die Vergleichsoperatoren? Mich persönlich würde eine Art "isnumeric()" interessieren.

Grüße

betateilchen

Nimm doch einfach ReadingsNum() anstatt ReadingsVal(), das könnte vielleicht schon helfen.

perl Vergleichsoperatoren findest Du in der perl Doku. Das ist kein fhem-spezifisches Thema.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

r00t2

Ein wenig Google hätte Dir schneller weiter geholfen :)

Schau mal hier: http://perldoc.perl.org/perlop.html#Equality-Operators (oder hier http://perldoc.perl.org/perlfaq4.html)

Letztendlich gibt es einige Ansätze, wie man zum ziel kommen kann (z. B. auch per Regex).
FHEM 6.0 (Raspberry Pi 2 B | Raspberry Pi OS Lite | Perl 5.28.1 | UZB Z-WAVE.Me | Hue Bridge V1 | SIGNALDuino 433 MHz | FritzBox | Kodi | Pioneer AVR | MQTT | Node-RED | Diverse Google Dienste)

bartman121

Hallo,

vielen Dank für die schnelle Hilfe, ReadingsNum() sollte für mein Problem ausreichend sein:

ReadingsNum(<devicename>,<reading>,<defaultvalue>)
Wie ReadingsVal, löscht aber alles, was kein Zahl ist, um den Wert bei Berechnungen verwenden zu können.

betateilchen

Ansonsten die Allzweckwaffe in der 99_myUtils.pm verwenden  8)


use Scalar::Util qw(looks_like_number);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!