Regex "und nicht"

Begonnen von Icebear, 18 Januar 2017, 08:54:58

Vorheriges Thema - Nächstes Thema

Icebear

Hallo,
Wie bau ich einen Regex in einem Notify um :
Regex "FHT_.*:desired-temp"
Der triggerd .. Wunderbar.
Aber der Triggered auch bei jedem Addlog ...
Wie bau ich den das der Nicht Triggered wenn noch das Wort AddLog vorkommt
Also trigger bei desired-temp aber nicht wenn noch AddLog dahinter steht ...

Hoff mir kann wer helfen
Gruss
Holger

Gesendet von meinem E39 mit Tapatalk

Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

Loredo

Schreib noch ein $ ans Ende, dann wird dort aufgehört nach Übereinstimmungen zu suchen.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Icebear

Das wuerde aber nicht passen glaub ich.
Der triggernde eintrag lauter zb "FHT_Wohnzimmer:desired-temp 22.0"
Der soll triggern ...
Der eintrag "FHT_Wohnzimmer:desired-temp:22.0  <<<AddLog"
Soll nicht triggern .....
Hoffe das war verstaendlich

Gesendet von meinem E39 mit Tapatalk

Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

CoolTux

FHT_.*:desired-temp

Bei dieser Regex sollte das Notify überhaupt nicht triggern wenn der Event noch Daten hinter desired-temp enthält. Meines Wissens macht fhem nach temp eh ein $ automatisch.

FHT_.*:desired-temp.*

Hier wiederum wird alles nach temp mit getriggert. Man könnte das RegEx erweitern und ihm sagen das hinter desired-temp nur noch auf Zahlen geprüft werden soll. Das könnte gehen.
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

rudolfkoenig

Auf "nicht" per Regexp zu pruefen ist nicht Standrad und da wo moeglich, nicht sehr lesbar/verstaendlich.
Einfacher ist, wie Loredo/CoolTux schreibt, das Positive genauer zu fassen. Mein Vorschlag:
FHT_Wohnzimmer:desired-temp:[\d\.]+
$ sollte nicht notwendig sein, da notify das angegebene Regexp ($re) mit
($NAME =~ m/^$re$/ || "$NAME:$EVENT" =~ m/^$re$/)

prueft.

Zitat
Regex "FHT_.*:desired-temp"
Der triggerd .. Wunderbar.
Aber der Triggered auch bei jedem Addlog ...
Das wundert mich gerade, laut meine Hypothese von oben duerfte das nie zutreffen.

JoeALLb

Oder mit diesem, wenn Du den Raum noch als Wildcard belassen möchtest.
FHT_[^:]+:desired-temp:[\d\.]+
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Icebear

Stimmt da .* hatte ich vergessen ....
Ich teste das mal mit den numerischen Werten. Vielen Dank ....

Gesendet von meinem E39 mit Tapatalk

Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

JoeALLb

Oder eben
FHT_[^:]+:desired-temp:[\d\.]+\s?$
wenn dahinter absolut nichts (ausser ebventuell noch ein Leerzeichen) stehen darf ;-)
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

CoolTux

Zitat von: JoeALLb am 18 Januar 2017, 18:01:24
Oder eben
FHT_[^:]+:desired-temp:[\d\.]+\s?$
wenn dahinter absolut nichts (ausser ebventuell noch ein Leerzeichen) stehen darf ;-)
Wie von Rudi gezeigt ist das $ am Ende unnötig. Das macht die Routine vom Notify alleine.
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

Icebear

#9
Hallo,

jetzt mal am Lappi weil einfacher :)

2017-01-19 00:36:35 FHT FHT_Buero desired-temp: 22.0
so sieht der Eintrag aus der triggern soll.

Der Raum sollte mit * sein also FHT_.*

Aktuelles DEF des Notifys
FHT_*:desired-temp.*[\d\.]+\s? set Icebearbot msg @@Icebear74 $NAME $EVENT

es Triggered leider nicht :(
Any Ideas ?
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

rudolfkoenig

FHT_* passt aber nicht zu FHT_Wohnzimmer.
Merke: Regexp ist nicht gleich glob (so heisst das, was man im Shell verwendet).

Markus Bloch

Bei FHT fehlt der Punkt:

FHT_.*:desired-temp.*[\d\.]+ set Icebearbot msg @@Icebear74 $NAME $EVENT
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Icebear

Hallo,

danke für die Hilfe ..
Es funktioniert nun wie gewünscht.

Aber die Grundfrage bleibt .. gibt es ein "und nicht" und wie sähe das entsprechend umformuliert aus.
Angenommen ich möchte alle Readings per Nachricht ausser der addlog einträge .. da könnte man es schwer genauer definieren ...

Grüße aus Dinslaken
Icebear
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

JoeALLb

Zitat von: Icebear am 22 Januar 2017, 22:37:09
Aber die Grundfrage bleibt .. gibt es ein "und nicht" und wie sähe das entsprechend umformuliert aus.
Angenommen ich möchte alle Readings per Nachricht ausser der addlog einträge .. da könnte man es schwer genauer definieren ...

Du solltest es testen. Wenn Rudis aussage stimmt und FHEM automatisch hinten ein $ anhängt, matcht "AddLog" hier nicht! (wie gewünscht!)

WenN Du auch die Zeile mit AddLog matchen willst, müsstest Du den Regexp anpassen
FHT_.*:desired-temp.*[\d\.]+.*

Das andere geht schon auch, würd ich Dir aber nicht empfehlen: nennt sich "negative loockbehind"
und wird hier genauer erklärt:
http://www.rexegg.com/regex-lookarounds.html
FHT_.*:desired-temp.*[\d\.]+.*(?<!<<<AddLog)

Das funktioniert nicht sonderlich "stabil", da regex schlau ist und sämtliche Varianten durchprobiert.
In diesem Fall Kann .* einfach so weit matchen, dass hinten im String "<<<AddLog" nicht mehr platz hat. Daher ist am Ende
das $ Zeichen wichtig (das FHEM ja automatisch ergänzt), und daher funktioniert es in genau diesem Fall! Wenn aber nur hinten am String ein Leerzeichen zusätzlich
gesendet wird, Trifft der Regex wieder! Versuch daher ohne dies auszukommen!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270