[gelöst] Regex Abrage mit einer Variablen

Begonnen von australien, 11 Dezember 2019, 11:04:55

Vorheriges Thema - Nächstes Thema

australien

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
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

Beta-User

Versuch's mal so (ungetestet):
userReadings  ZugVerspaetung {my $compare = Value("ZugNr");; ReadingsVal($name,"Bahnhof",0) =~ $compare,\".*?\",\"(.*?)\"";;$1}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

australien

#2
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"]]
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

Beta-User

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}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

australien

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}
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

CoolTux

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.
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

australien

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?
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

Beta-User

Da ist wohl auch noch ein " zu viel (am Ende).
userReadings  ZugVerspaetung {my $regex = Value("ZugNr").',\".*?\",\"(.*?)\"';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;$1}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

australien

liefert das gleiche Ergebnis, es wird nichts in die ZugVerspaetung geschrieben.
Wie gesagt, der Wert ZugNr ist im Bahnhof vorhanden.
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

Beta-User

...einen habe ich noch...:
userReadings  ZugVerspaetung {my $regex = Value("ZugNr").'\",\".*?\",\"(.*?)\"';; ReadingsVal($name,"Bahnhof",0) =~ m/$regex/g;;$1}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

australien

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.
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"

australien

selber herausgefunden, Lösung

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


Danke nocheinmal für Eure Hilfe!!!!
raspberry pi3
signalduino, Shelly1, Shelly2, Sonos, Unifi
Amazon Fire Tablet 7 | Noname Android Tablet 10"