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
Versuch's mal so (ungetestet):
userReadings ZugVerspaetung {my $compare = Value("ZugNr");; ReadingsVal($name,"Bahnhof",0) =~ $compare,\".*?\",\"(.*?)\"";;$1}
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"]]
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}
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}
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.
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?
Da ist wohl auch noch ein " zu viel (am Ende).
userReadings ZugVerspaetung {my $regex = Value("ZugNr").',\".*?\",\"(.*?)\"';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;$1}
liefert das gleiche Ergebnis, es wird nichts in die ZugVerspaetung geschrieben.
Wie gesagt, der Wert ZugNr ist im Bahnhof vorhanden.
...einen habe ich noch...:
userReadings ZugVerspaetung {my $regex = Value("ZugNr").'\",\".*?\",\"(.*?)\"';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;$1}
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.
selber herausgefunden, Lösung
ZugVerspaetung {my $regex = Value("ZugNr").'\",\".*?\",\"(.*?)\"';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;($1-17)}
Danke nocheinmal für Eure Hilfe!!!!