<gelöst> ReadingsVal mit Regex - KS300 Regen Tageswert raus filtern

Begonnen von Schiltkamp, 12 Juni 2016, 21:05:40

Vorheriges Thema - Nächstes Thema

Schiltkamp

Hallo zusammen,

ich denke ich habe mein möglichstes getan, aber nach fast 10 Stunden Forum und unzählige try and error wände ich mich jetzt an euch.

folgendes Reading von KS300:

avg_day T: 15.5 H: 87 W: 1.1 R: 10.2

und ich möchte gerne die 10 raus filtern.

Ich habe mich auch intensiv mit regulären Ausdrücken beschäftigt, aber bei folgendem ist mein Latein stehen geblieben:

(R: )[0-9]+

damit bekomme ich R: 13

Leider konnte ich mit dem Regular Expression Tester keine Lookbehinds testen.

Ziel des ganzen ist es, wenn der Tageswert vom Regen über 5 liegt, die Rasenspränger nicht arbeiten zu lassen.

Grüße aus der Oberpfalz

Christian

chris1284

nutz einfach das rain modul und lies den wert direkt aus dem reading (wobei er meine ich auch so das reading rain hat)

Schiltkamp

rain habe ich, aber das ist leider ein Wert der über den Monat hoch zählt, dann müsste ich auch wieder rechnen

justme1968

ich weiss nicht was du genau gemacht hast, aber das das ergebniss wirklich  R: 13 ist kommt mir sehr unwahrscheinlich vor.

du hast eine capture group in deiner regex. und die extrahiert nur R: und das leerzecihen.

das einfachste ist wenn du das ganze rückwärts angehst und die die zahl am ende des wertes extrahierst: if( ReadinsgVal('device', 'avg_day'. '' ) =~ m/([0-9.]+)$/ ) {
  my $val = $1;
}
 

oder wenn du am R: aufhängen willst: /R:\s([0-9.]+)/

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968