Sorry, ist vermutlich tatsächlich eine ziemliche Anfängerfrage, aber ich hänge fest und finde nichts im Forum. Mein Problem ist eigentlich recht einfach: Ich habe viele Fenstersensoren, die alle einem Namensschema folgen und entsprechend (bis auf das Prefix) unterschiedlich benannte KNX-Switches. Ich möchte den Status der Sensoren mit den den KNX-Switches jetzt mit einem einzelnen notify lösen, statt für jeden Sensor einen separaten zu machen. Das habe ich hierfür:
EnO_Sensor_([0-9a-zA-Z_]*).(open|closed) IF ([$NAME] eq "closed") (set KNX_$1 off) ELSE (set KNX_$1 on)
Er löst sauber aus, bringt dann aber einen Fehler. Ich hätte gedacht, dass ich mit $1 auf das Ergebnis der Regex zugreifen kann. Geht das hier im notify gar nicht oder habe ich einen Syntaxfehler?
ZitatIch hätte gedacht, dass ich mit $1 auf das Ergebnis der Regex zugreifen kann.
Ich meine das geht nicht.
So könnte man es angehen (ungetestet), nicht auszuschliessen das ich was übersehe:
EnO_Sensor_([0-9a-zA-Z_].*):open|closed {
$NAME=~m,EnO_Sensor_([0-9a-zA-Z_].*),;
return fhem("set KNX_$1 off") if $EVTPART0 eq 'closed';
return fhem("set KNX_$1 on");}
Ich würde behaupten das die RegEx nicht geht.
EnO_Sensor_([0-9a-zA-Z_]*).(open|closed)
So sollte es aber gehen
EnO_Sensor_([0-9a-zA-Z_].*).(open|closed)
Stimmt, etwas hatte ich zuvor schon getestet, aber nur mit einem Zeichen nach EnO_Sensor_ ::)
Habs bei meinem Vorschlag korrigiert.
Danke ihr beiden, das war der richtige Hinweis, @TomLee. :)
Es geht aber auch ohne Punkt, die Sensoren heißen bei mir z.B. EnO_Sensor_UG_WC_Fenster. Ich wollte kein .*, damit er nicht auf alles matcht und habe deshalb nur die Zeichen als Gruppe zusammengefasst, die da benutzt werden. Der Stern sorgt aber ja dafür, dass sie beliebig oft hintereinander stehen dürfen.