Aus Luminance "123 lux" "123" machen mit Regex

Begonnen von Hi2Helmi, 31 März 2017, 21:07:56

Vorheriges Thema - Nächstes Thema

Hi2Helmi

Hallo,
ich habe einen Fibaro Motion Sensor, der liefert mir die Helligkeit in dem Reading Luminance mit dem Wert und dem "Zusatz" lux. Nun habe ich versucht daraus einen eigenes Reading zu mache, der mir nur die Zahl anzeigt.
lux {(ReadingsVal($name,"luminance","")  =~ /[0-9]+/)}
Funktioniert leider nicht, es kommt nur die "1". Habe auch schon etwas rum experimentiert aber keine Lösung gefunden. Ich finde quasi den Fehler nicht.
MfG
Florian

KernSani

Zitat von: Hi2Helmi am 31 März 2017, 21:07:56
Hallo,
ich habe einen Fibaro Motion Sensor, der liefert mir die Helligkeit in dem Reading Luminance mit dem Wert und dem "Zusatz" lux. Nun habe ich versucht daraus einen eigenes Reading zu mache, der mir nur die Zahl anzeigt.
lux {(ReadingsVal($name,"luminance","")  =~ /[0-9]+/)}
Funktioniert leider nicht, es kommt nur die "1". Habe auch schon etwas rum experimentiert aber keine Lösung gefunden. Ich finde quasi den Fehler nicht.
Probier mal ReadingsNum
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Hi2Helmi

Ach so der Code oben steht im Attribut userReadings
MfG
Florian

dev0

Zitat von: Hi2Helmi am 31 März 2017, 21:16:14
Ach so der Code oben steht im Attribut userReadings
Probier mal ReadingsNum

Hi2Helmi

Danke, mit readingsNum funktioniert es. Vielleicht kann mir trotzdem den Fehler in der Regex sagen, nur zum lernen für mich.
MfG
Florian

dev0

Um einen "Treffer" zurück zu geben könnte man bspw. eine matching group benutzen: https://perldoc.perl.org/perlretut.html

derthom

ich hab auch das Problem mit dem Fibaro Multisensor

luminance 0 Lux 2023-09-22 18:20:57
lux 1 2023-09-22 18:20:57

userReadings lux {(ReadingsNum($name,"luminance","") =~ /[0-9]+/)}

noch jemand eine Idee ?

Torxgewinde

defmod derthom dummy
attr derthom readingList luminance
attr derthom setList luminance
attr derthom userReadings lux { ReadingsNum($name,"luminance","") =~ /[0-9]+/ },\
lux2 { ReadingsNum($name, "luminance", "") =~ /([0-9]+)/ ? $1 : "nix gefunden";; }

betateilchen

Wenn man mit ReadingsNum() arbeitet, sollte man tunlichst darauf verzichten, einen alphanumerischen default-Wert anzugeben. Selbst wenn es sich "nur" um einen Leerstring "" handelt.

Auf den restlichen Blödsinn, der da als Lösung vorgeschlagen wurde, gehe ich jetzt bewusst nicht ein.
-----------------------
Mach es möglichst simpel und mach es richtig,
dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: derthom am 22 September 2023, 18:23:17userReadings lux {(ReadingsNum($name,"luminance","") =~ /[0-9]+/)}

noch jemand eine Idee ?

Mehrere...

1. Falsche Klammersetzung
2. ReadingsNum() liefert schon den numerischen Wert ohne Einheit aus dem reading, das weitere regexen einer Zahl auf Ziffern ist ziemlich sinnlos.
3. Du solltest einen sinnvollen Trigger für das userReading angeben

-----------------------
Mach es möglichst simpel und mach es richtig,
dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!