FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Icebear am 18 Januar 2017, 08:54:58

Titel: Regex "und nicht"
Beitrag von: Icebear am 18 Januar 2017, 08:54:58
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

Titel: Antw:Regex "und nicht"
Beitrag von: Loredo am 18 Januar 2017, 08:58:18
Schreib noch ein $ ans Ende, dann wird dort aufgehört nach Übereinstimmungen zu suchen.
Titel: Antw:Regex "und nicht"
Beitrag von: Icebear am 18 Januar 2017, 09:50:56
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

Titel: Antw:Regex "und nicht"
Beitrag von: CoolTux am 18 Januar 2017, 10:07:22
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.
Titel: Antw:Regex "und nicht"
Beitrag von: rudolfkoenig am 18 Januar 2017, 10:12:24
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.
Titel: Antw:Regex "und nicht"
Beitrag von: JoeALLb am 18 Januar 2017, 10:34:37
Oder mit diesem, wenn Du den Raum noch als Wildcard belassen möchtest.
FHT_[^:]+:desired-temp:[\d\.]+
Titel: Antw:Regex &quot;und nicht&quot;
Beitrag von: Icebear am 18 Januar 2017, 13:38:20
Stimmt da .* hatte ich vergessen ....
Ich teste das mal mit den numerischen Werten. Vielen Dank ....

Gesendet von meinem E39 mit Tapatalk

Titel: Antw:Regex "und nicht"
Beitrag 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 ;-)
Titel: Antw:Regex "und nicht"
Beitrag von: CoolTux am 18 Januar 2017, 18:05:34
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.
Titel: Antw:Regex "und nicht"
Beitrag von: Icebear am 19 Januar 2017, 00:45:02
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 ?
Titel: Antw:Regex "und nicht"
Beitrag von: rudolfkoenig am 19 Januar 2017, 09:10:44
FHT_* passt aber nicht zu FHT_Wohnzimmer.
Merke: Regexp ist nicht gleich glob (https://en.wikipedia.org/wiki/Glob_(programming)) (so heisst das, was man im Shell verwendet).
Titel: Antw:Regex "und nicht"
Beitrag von: Markus Bloch am 19 Januar 2017, 09:12:31
Bei FHT fehlt der Punkt:

FHT_.*:desired-temp.*[\d\.]+ set Icebearbot msg @@Icebear74 $NAME $EVENT
Titel: Antw:Regex "und nicht"
Beitrag von: Icebear am 22 Januar 2017, 22:37:09
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
Titel: Antw:Regex "und nicht"
Beitrag von: JoeALLb am 23 Januar 2017, 10:29:38
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!