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
Schreib noch ein $ ans Ende, dann wird dort aufgehört nach Übereinstimmungen zu suchen.
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
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.
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.
Oder mit diesem, wenn Du den Raum noch als Wildcard belassen möchtest.
FHT_[^:]+:desired-temp:[\d\.]+
Stimmt da .* hatte ich vergessen ....
Ich teste das mal mit den numerischen Werten. Vielen Dank ....
Gesendet von meinem E39 mit Tapatalk
Oder eben
FHT_[^:]+:desired-temp:[\d\.]+\s?$
wenn dahinter absolut nichts (ausser ebventuell noch ein Leerzeichen) stehen darf ;-)
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.
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 ?
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).
Bei FHT fehlt der Punkt:
FHT_.*:desired-temp.*[\d\.]+ set Icebearbot msg @@Icebear74 $NAME $EVENT
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
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!