[gelöst] regexp in 99_myutils

Begonnen von ujaudio, 24 Januar 2019, 18:03:11

Vorheriges Thema - Nächstes Thema

ujaudio

Hallo,

ich komme bei einem Problem nicht weiter: in einem Dummy steht bei mir ein Wert *123# (anstelle 123 jede x-beliebige Zahl). Ich möchte nun in diesem dummy nur noch die Zahl stehen haben.
Laut regexr.com lautet die regexp ([0-9])\w+
Ich habe nun folgende Routine geschrieben:
sub Zahlextrahieren($)
{
  my ($wo) = @_;
  if ( $wo =~ /[0-9]\w+/ ) {fhem("set $wo $1")}
  else {fhem("set $wo humbug")}
}

Aufgerufen wird die Funktion aus FHEM mit
Zahlextrahieren("mydummy")
Bei erfolgreichem Match sollte der erste Treffer in $1 stehen - das habe ich der perl-Doku entnommen. Dort stand auch, dass man das if nutzen sollte, sonst könnte $1 noch von einer früheren Auswertung einen Wert haben, der bei einem "Missmatch" unverändert bestehen bleibt. Auch ohne das if funktioniert es nicht, die Auswertung ergibt immer keinen Treffer.

Kann mir jemand bitte etwas Nachhilfe geben?

Danke
Jürgen
Einen lieben Gruß
Jürgen

CoolTux

Du übergibst den Namen mydummy? Aber im String mydummy ist doch gar keine Zahl. Du musst schon den state Wert von mydummy übergeben.
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

JoWiemann

Zitat von: ujaudio am 24 Januar 2019, 18:03:11
...in einem Dummy steht bei mir ein Wert *123# (anstelle 123 jede x-beliebige Zahl)...
Kann mir jemand bitte etwas Nachhilfe geben?

Wo kommt den *123# her. Wenn Du es mit ReadingsVal holst dann könnte ReadingsNum die Lösung sein.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

ujaudio

Der Wert in dem Dummy ist gegeben: er beginnt mit dem Sternchen, es folgen Ziffern und es endet mit dem Lattenzaun - das ergibt sich aus meiner Anwendung.

Die Funktion in 99_myUtils.pm ist nun wie folgt:
sub Zahlextrahieren($)
{
  my ($var) = @_;
  my $wert = Value($var);
  if ( $wert =~ /[0-9]\w+/ ) {fhem("set $var $1")}
  else {fhem("set $var humbug")}
}

und wird aus einem notify (Macro) aufgerufen:
al_auswertung {
  Zahlextrahieren ("al_eingabe");
#da kommt noch mehr Code...
}


Leider funktioniert das auch nicht: es findet wohl ein Match statt, den der Klammerausdruck nach dem if ist wahr und so wird nun der Originalwert (also *123#) wieder zurückgegeben. Wenn ich es nicht hinbekomme - ich werde mich morgen nochmals mit meinem Perlbuch beschäftigen - dann muss ich es halt über substring machen. Was mich nur wundert ist, dass es mit dem o.g. Tool funktioniert.

Einen schönen Abend
Jürgen
Einen lieben Gruß
Jürgen

CoolTux

Bisschen viel Aufwand wie ich finde


{fhem("set $var " . ReadingsNum($var,'state',-1))}

Den Rest kannste alles löschen. Kannst das ganze auch gleich im Notify machen.
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

ujaudio

Toll, an was die FHEM-Entwicler schon alles gedacht haben! readingsNum ist eine einfache Lösung. Jetzt kann ich mal weiter programmieren - aber mit den regexp werde ich mich dennoch nochmals auseinandersetzen.

Einen lieben Gruß
Jürgen
Einen lieben Gruß
Jürgen

betateilchen

Zitat von: ujaudio am 25 Januar 2019, 08:20:30
Toll, an was die FHEM-Entwicler schon alles gedacht haben!

nützt nur nix, solange die Anwender nicht auf die Idee kommen, Doku zu lesen, sondern stattdessen lieber versuchen, das Rad zum 3459. Mal neu zu erfinden...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

if ( $wo =~ /\*([0-9]\w+)\#/ ) {Debug $1}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!