FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: australien am 11 Dezember 2019, 11:04:55

Titel: [gelöst] Regex Abrage mit einer Variablen
Beitrag von: australien am 11 Dezember 2019, 11:04:55
Hallo zusammen,

ich möchte mit einem Regex aus einem String (Abfahrtstafel des Bahnhofes) einen bestimmten Zug herausfiltern.
Bei immer dem selben Zug mache ich das so, wobei die Zugnummer 1234 ist:

userReadings  ZugVerspaetung {ReadingsVal($name,"Bahnhof",0) =~ "1234\",\".*?\",\"(.*?)\"";;$1}

Ich will jetzt aber nicht immer den Zug 1234 abrufen, sondern eine variable Zugnummer. Diese steht in einem dummy ZugNr, einfach mit set eingetragen.
Grund dafür ist, ich brauche diese Zugnummer öffters und kann somit die Nummer zentral ändern.

Diese hier funktioniert leider nicht:
userReadings  ZugVerspaetung {ReadingsVal($name,"Bahnhof",0) =~ [ZugNr],\".*?\",\"(.*?)\"";;$1}

danke für Eure Hilfe
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: Beta-User am 11 Dezember 2019, 11:55:01
Versuch's mal so (ungetestet):
userReadings  ZugVerspaetung {my $compare = Value("ZugNr");; ReadingsVal($name,"Bahnhof",0) =~ $compare,\".*?\",\"(.*?)\"";;$1}
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: australien am 11 Dezember 2019, 12:17:26
klingt gut, leider bekomme ich damit folgende Fehler im log:

2019.12.11 12:15:00 1: PERL WARNING: Useless use of a constant (SCALAR(0x93bcd10)) in void context at (eval 2781051) line 1.
2019.12.11 12:15:00 3: eval: {my $compare = Value("ZugNr");; ReadingsVal($name,"Bahnhof",0) =~ $compare,\",\".*?\",\"(.*?)\"";;$1}
2019.12.11 12:15:00 1: PERL WARNING: Use of uninitialized value $1 in subtraction (-) at (eval 2781051) line 1.
2019.12.11 12:15:00 3: eval: {my $compare = Value("ZugNr");; ReadingsVal($name,"Bahnhof",0) =~ $compare,\",\".*?\",\"(.*?)\"";;$1}


wobei direkt in FHEM eingegeben
{my $compare = Value("ZugNr")}
den richtigen Wert aus ZugNr liefert.

gesucht wird daraus, vielleicht hilft das:
Bahnhof

[["2634","Hbf","19"],["2635","Wulkaprodersdorf Bahnhof","54"],["2638","Hbf","79"],["2639","Wulkaprodersdorf Bahnhof","114"],["2642","Hbf","139"],["7844","Bruck/Leitha Bahnhof","164"],["2643","Wulkaprodersdorf Bahnhof","174"],["2646","Hbf","199"],["7845","Wulkaprodersdorf Bahnhof","208"],["7848","Bruck/Leitha Bahnhof","224"]]
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: Beta-User am 11 Dezember 2019, 12:24:32
Pack' erst mal die regex in ein eher übliches Format (immer noch ungetestet):
userReadings  ZugVerspaetung {my $compare = Value("ZugNr");; ReadingsVal($name,"Bahnhof",0) =~ m/$compare,\".*?\",\"(.*?)\""/g;;$1}
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: australien am 11 Dezember 2019, 12:36:45
leider immer noch die gleiche Meldung
2019.12.11 12:31:20 1: PERL WARNING: Use of uninitialized value $1 in subtraction (-) at (eval 2788563) line 1.
2019.12.11 12:31:20 3: eval: {my $compare = Value("ZugNr");; ReadingsVal($name,"Bahnhof",0)  =~ m/$compare,\".*?\",\"(.*?)\""/g;;$1}
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: CoolTux am 11 Dezember 2019, 12:41:05
userReadings  ZugVerspaetung {my $regex = Value("ZugNr").',\".*?\",\"(.*?)\""';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;$1}

Sollte das nicht gehen muss m/ und am Ende /g auch noch mit in die Variable. Aber probier erstmal so.
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: australien am 11 Dezember 2019, 12:46:32
Fehlermeldungen bekomme ich bei beiden nicht mehr, aber es wird auch kein Readings beschrieben, bleibt leer.
Die ZugNr ist aber mit einer vorhanden Nummer bestückt, oder reicht es nicht wenn ich diese mit
set ZugNr 2634 zuordne?
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: Beta-User am 11 Dezember 2019, 12:47:45
Da ist wohl auch noch ein " zu viel (am Ende).
userReadings  ZugVerspaetung {my $regex = Value("ZugNr").',\".*?\",\"(.*?)\"';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;$1}
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: australien am 11 Dezember 2019, 12:53:08
liefert das gleiche Ergebnis, es wird nichts in die ZugVerspaetung geschrieben.
Wie gesagt, der Wert ZugNr ist im Bahnhof vorhanden.
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: Beta-User am 11 Dezember 2019, 13:05:39
...einen habe ich noch...:
userReadings  ZugVerspaetung {my $regex = Value("ZugNr").'\",\".*?\",\"(.*?)\"';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;$1}
Titel: Antw:Regex Abrage mit einer Variablen
Beitrag von: australien am 11 Dezember 2019, 13:14:15
Bingo!!! Ihr seit super, ich habe leider von diesen RegEx überhaupt keine Ahung.

Eine Kleinigkeit hätte ich da noch dazu, von diesem Wert will ich nun noch 17 abziehen.
Titel: [gelöst] Regex Abrage mit einer Variablen
Beitrag von: australien am 11 Dezember 2019, 13:18:48
selber herausgefunden, Lösung

ZugVerspaetung {my $regex = Value("ZugNr").'\",\".*?\",\"(.*?)\"';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;($1-17)}


Danke nocheinmal für Eure Hilfe!!!!