Autor Thema: [Gelöst] Hilfe bei Perl-Ausdruck (enthält nicht xyz am Ende) im DOIF  (Gelesen 420 mal)

Offline meier81

  • Full Member
  • ***
  • Beiträge: 341
Hallo euch allen,

ich habe hier ein kleines Problem mit einem Perl-Ausdruck im einem DOIF. Ich habe hier ein DOIF mit dem ich meine geöffneten bzw. gekippten Fenster erfasse. Hier mal die Definition:

define di_Monitoring_Fenster_Tueren DOIF ([#".*TK.*":state:"open|tilted"] > 0)
(
  set $SELF openWindowsCount [#".*TK.*":state:"open|tilted"],
  set $SELF openWindowsState open
)
DOELSE
(
  set $SELF openWindowsCount 0,
  set $SELF openWindowsState closed
)
attr di_Monitoring_Fenster_Tueren do always
attr di_Monitoring_Fenster_Tueren readingList openWindowsCount  openWindowsState
attr di_Monitoring_Fenster_Tueren stateFormat openWindowsState (openWindowsCount)

Meine Fensterkontakt-Devices tragen als Beispiel diese Namensgebung: EG_wz_TK_Fenster_links
Das funktioniert auch alles einwandfrei soweit. Nun habe ich mir aber noch drei structure angelegt, da ich diese für mein ASC-Modul brauche. Diese Haben die folgende Namensgebung: EG_wz_TK_Fenster_group
Hier ist nun das Problem das z.B. bei diesem Fensterkontakt zwei gezählt wird, einmal der Fensterkontakt und einmal der structure.
Wie wäre denn hier der richtige REGEX damit "group" am Ende nicht beachtet wird?

Bin für jede Hilfe dankbar, hab hier echt noch nichts gefunden was funktioniert.

Gruß Markus
« Letzte Änderung: 19 Januar 2022, 22:47:40 von meier81 »
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb und Grafana || HB-RF-ETH || SIGNALduino 433MHz (V4.2.0-dev210628) || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus KM100 || div. Tasmota-Devices

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9449
Antw:Hilfe bei Perl-Ausdruck (enthält nicht xyz am Ende) im DOIF
« Antwort #1 am: 18 Januar 2022, 22:11:28 »
[#"TK_Fenster_[^(group)]":state:"open|tilted"]
.* kann weg
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline meier81

  • Full Member
  • ***
  • Beiträge: 341
Antw:Hilfe bei Perl-Ausdruck (enthält nicht xyz am Ende) im DOIF
« Antwort #2 am: 19 Januar 2022, 08:30:34 »
Hallo Damian,

vielen Dank für die schnelle Antwort. Leider funktioniert das so nicht.

Hab gestern auch noch ganz vergessen es gibt folgende Namen für Türkontakte für die die Bedingung erfüllt sein soll (Beispiele):

DG_az_TK_Fenster_links
EG_wz_TK_Fenster_mitte
EG_ku_TK_Fenster
EG_wz_TK_Tuer

Logischerweise hatte ich deinen Code am Device EG_wz_TK_Fenster_mitte getestet, an der Tür z.B. wäre er ja nicht gegangen.

Hab auch eben nochmal geschaut, die folgenden Devices sollen ausgeschlossen werden:

DG_az_TK_Fenster_group
EG_wz_TK_Fenster_group
OG_bz_TK_Fenster_group

Deswegen ja am einfachsten über das "_group" am Ende.

Vielleicht hast du da ja noch eine Idee, ich werde irgendwie mit dem regex kein Freund mehr  ;)
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb und Grafana || HB-RF-ETH || SIGNALduino 433MHz (V4.2.0-dev210628) || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus KM100 || div. Tasmota-Devices

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9449
Antw:Hilfe bei Perl-Ausdruck (enthält nicht xyz am Ende) im DOIF
« Antwort #3 am: 19 Januar 2022, 10:45:24 »
Hallo Damian,

vielen Dank für die schnelle Antwort. Leider funktioniert das so nicht.

Hab gestern auch noch ganz vergessen es gibt folgende Namen für Türkontakte für die die Bedingung erfüllt sein soll (Beispiele):

DG_az_TK_Fenster_links
EG_wz_TK_Fenster_mitte
EG_ku_TK_Fenster
EG_wz_TK_Tuer

Logischerweise hatte ich deinen Code am Device EG_wz_TK_Fenster_mitte getestet, an der Tür z.B. wäre er ja nicht gegangen.

Hab auch eben nochmal geschaut, die folgenden Devices sollen ausgeschlossen werden:

DG_az_TK_Fenster_group
EG_wz_TK_Fenster_group
OG_bz_TK_Fenster_group

Deswegen ja am einfachsten über das "_group" am Ende.

Vielleicht hast du da ja noch eine Idee, ich werde irgendwie mit dem regex kein Freund mehr  ;)

Regex kann beliebig kompliziert sein, daher ist es sinnvoll sich vorher über die Vergabe der Devicenamens Gedanken zu machen - man kann sie auch im nachhinein noch anpassen.

Ansonsten hilft oft nur ausprobieren und Regex "studieren".

Vielleicht funktioniert das schon:

[#"TK_(Fenster|Tuer).?[^(group)]":state:"open|tilted"]
« Letzte Änderung: 19 Januar 2022, 10:47:04 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Offline meier81

  • Full Member
  • ***
  • Beiträge: 341
Antw:Hilfe bei Perl-Ausdruck (enthält nicht xyz am Ende) im DOIF
« Antwort #4 am: 19 Januar 2022, 21:58:42 »
Vielleicht funktioniert das schon:

[#"TK_(Fenster|Tuer).?[^(group)]":state:"open|tilted"]

Hallo Damian,

leider immer noch keinen Erfolg damit. Habe bestimmt 2 Stunden damit verbracht hin und her zu testen und umzustellen, kein Erfolg.

Was ich mal probiert habe, was auch geht, aber leider genau das falsche abfragt ist:

([#"TK.*(group)":state:"open|tilted"] > 0)
(
  set $SELF openWindowsCount [#"TK.*(group)":state:"open|tilted"],
  set $SELF openWindowsState open
)
DOELSE
(
  set $SELF openWindowsCount 0,
  set $SELF openWindowsState closed
)

So wird ja explizit abgefragt ob die structure sich ändert, die eigentlichen Rollo-Devices sind so außen vor. Ich habe aber schon etliches probiert um das (group) zu negieren, es funktioniert nichts.
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb und Grafana || HB-RF-ETH || SIGNALduino 433MHz (V4.2.0-dev210628) || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus KM100 || div. Tasmota-Devices

Offline meier81

  • Full Member
  • ***
  • Beiträge: 341
Antw:Hilfe bei Perl-Ausdruck (enthält nicht xyz am Ende) im DOIF
« Antwort #5 am: 19 Januar 2022, 22:26:22 »
Hab´s anscheinend gepackt, so scheint es zu funktionieren:

([#"TK(?!.*group)":state:"open|tilted"] > 0)
(
  set $SELF openWindowsCount [#"TK(?!.*group)":state:"open|tilted"],
  set $SELF openWindowsState open
)
DOELSE
(
  set $SELF openWindowsCount 0,
  set $SELF openWindowsState closed
)

Nach langer Suche gefunden.
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb und Grafana || HB-RF-ETH || SIGNALduino 433MHz (V4.2.0-dev210628) || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus KM100 || div. Tasmota-Devices

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 9449
Antw:Hilfe bei Perl-Ausdruck (enthält nicht xyz am Ende) im DOIF
« Antwort #6 am: 19 Januar 2022, 22:44:18 »
Hab´s anscheinend gepackt, so scheint es zu funktionieren:

([#"TK(?!.*group)":state:"open|tilted"] > 0)
(
  set $SELF openWindowsCount [#"TK(?!.*group)":state:"open|tilted"],
  set $SELF openWindowsState open
)
DOELSE
(
  set $SELF openWindowsCount 0,
  set $SELF openWindowsState closed
)

Nach langer Suche gefunden.

schön, wenn es funktioniert, an den Regex kann man sich die Zähne ausbeißen :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

 

decade-submarginal