FHEM Forum

FHEM => Sonstiges => Thema gestartet von: ujaudio am 24 Januar 2019, 18:03:11

Titel: [gelöst] regexp in 99_myutils
Beitrag von: ujaudio am 24 Januar 2019, 18:03:11
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 (http://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
Titel: Antw:regexp in 99_myutils
Beitrag von: CoolTux am 24 Januar 2019, 18:23:51
Du übergibst den Namen mydummy? Aber im String mydummy ist doch gar keine Zahl. Du musst schon den state Wert von mydummy übergeben.
Titel: Antw:regexp in 99_myutils
Beitrag von: JoWiemann am 24 Januar 2019, 20:00:29
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
Titel: Antw:regexp in 99_myutils
Beitrag von: ujaudio am 24 Januar 2019, 20:08:36
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
Titel: Antw:regexp in 99_myutils
Beitrag von: CoolTux am 24 Januar 2019, 20:16:01
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.
Titel: Antw:regexp in 99_myutils
Beitrag von: ujaudio am 25 Januar 2019, 08:20:30
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
Titel: Antw:regexp in 99_myutils
Beitrag von: betateilchen am 25 Januar 2019, 20:35:28
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...
Titel: Antw:[gelöst] regexp in 99_myutils
Beitrag von: betateilchen am 25 Januar 2019, 21:29:35
if ( $wo =~ /\*([0-9]\w+)\#/ ) {Debug $1}