Hallo zusammen,
ich möchte bestimmte Readings unterdrücken.
Ich wiki steht:
Falls ein Reading namens "unwanted" KEINE Events erzeugen soll, lässt sich das mit
attr <device> event-on-change-reading (?!unwanted).*
unterdrücken
Ich habe nun folgendes Reading:
Aussentemperatur:0.2,(?!Warmwassertemperatur.*),.*
jedoch wird das Reading immer noch geschrieben.
Was mache ich falsch ?
VG Klaus
Hallo Klaus,
event-on-change-reading unterdrückt die events, nicht das schreiben des Readings.
Gruß Otto
und wenn ganz am Ende ",.*" steht, ist das möglicherweise auch nicht im Sinne des Erfinders...
Wie immer: Ohne kompletten Input und sinnvolle Beschreibung des eigentlichen Schmerzes kann man schlecht beurteilen, wie der Schmerz beseitigt werden könnte.
Zitat von: Otto123 am 13 Dezember 2022, 11:29:40
event-on-change-reading unterdrückt die events nicht das schreiben des Readings.
und wenn Otto jetzt auch noch ein Komma an die richtige Stelle gesetzt hätte, wäre sein Text erheblich einfacher zu verstehen 8)
Zitat von: betateilchen am 13 Dezember 2022, 11:37:23
und wenn Otto jetzt auch noch ein Komma an die richtige Stelle gesetzt hätte, wäre sein Text erheblich einfacher zu verstehen 8)
Meine große Schwäche ;D
Zitat von: Otto123 am 13 Dezember 2022, 11:29:40
Hallo Klaus,
event-on-change-reading unterdrückt die events, nicht das schreiben des Readings.
Gruß Otto
Hi Otto,
ja sorry, war etwas schwammig beschrieben...
Das Reading Warmwassertemperatur wird immer verändert, das will und kann ich auch nicht unterbinden.
Jedoch möchte ich den einen Event "Warmwassertemperatur" unterdrücken. Alle anderen Readings sollen Events erzeugen, deswegen, ".*" am Schluss.
Gruß Klaus
Sorry aber ich verstehe Dich nicht ..
ZitatDas Reading Warmwassertemperatur wird immer verändert, das will und kann ich auch nicht unterbinden.
Jedoch möchte ich den einen Event "Warmwassertemperatur" unterdrücken
Willst Du jetzt Warmwassertemperatur haben (erster Satz) oder nicht (zweiter Satz)?
Zitat von: Wernieman am 13 Dezember 2022, 11:57:53
Sorry aber ich verstehe Dich nicht ..
Willst Du jetzt Warmwassertemperatur haben (erster Satz) oder nicht (zweiter Satz)?
So, wie Otto bereits geschrieben hat, die Readingsaktualisierung kann nicht verhindert werden.
Mit dem event-on-change-reading wird bestimmt ob man für bestimmte Readings auch Events bei Veränderung erzeugen will.
Von daher möchte ich das Event unterdrücken..
...ist es denn sooooo schwer?
Aussentemperatur:0.2,(?!Warmwassertemperatur).*
EDIT: Langform...
event-on-change-reading ist eine POSITIVLISTE, nur was dort gelistet wird, erzeugt überhaupt noch Events (es sei denn, man nimmt ergänzend (!) event-on-update-reading" zu Hilfe). ".*" bedeutet: Alles, aber nur bei Veränderung, die andere Fassung ist dann "alles, außer xy".
Und es wird der Reihe nach abgearbeitet, also die erste Angabe mit dem Threshold nur, wenn dieser überschritten ist (oder die max-Zeit überschritten wird, falls angegeben).
Wie gesagt im Wiki steht:
Falls ein Reading namens "unwanted" KEINE Events erzeugen soll, lässt sich das mit
attr <device> event-on-change-reading (?!unwanted).*
unterdrücken
Deshalb meine Frage ...
JA. ABER: ohne das Komma! Siehe die konkrete Fassung vom letzten Post. Sonst gibt es am Ende der Liste IMMER einen match, nämlich ".*"...
So, jetzt habe ich es endlich auch gecheckt..
Danke nochmal !!
Zitat von: Beta-User am 13 Dezember 2022, 12:09:15
...ist es denn sooooo schwer?
Aussentemperatur:0.2,(?!Warmwassertemperatur).*
EDIT: Langform...
event-on-change-reading ist eine POSITIVLISTE, nur was dort gelistet wird, erzeugt überhaupt noch Events (es sei denn, man nimmt ergänzend (!) event-on-update-reading" zu Hilfe). ".*" bedeutet: Alles, aber nur bei Veränderung, die andere Fassung ist dann "alles, außer xy".
Und es wird der Reihe nach abgearbeitet, also die erste Angabe mit dem Threshold nur, wenn dieser überschritten ist (oder die max-Zeit überschritten wird, falls angegeben).
Naja, eine Positivliste besagt doch nur, dass alles herangezogen wird, was auf den Regexp-matched ....
Wann zum Beispiel im Fall vom unifi-controller unmengen an Readings hat, deren Name sich unterscheidet, aber manche readings (bestimmte Suffixe) nicht will, dann geht auch sowas:
.*^((?!last_seen|uptime|snr|lastUpdate|utilization).)*$
Zitat von: bartman121 am 13 Dezember 2022, 15:34:06
Naja, eine Positivliste besagt doch nur, dass alles herangezogen wird, was auf den Regexp-matched ....
...oder eben auch, dass alles nicht herangezogen wird, was nicht matcht. Und genau das ist der Sinn der Negativ-regexp. Dass man diese erweitern kann, versteht sich eigentlich von selbst, aber da so viele daran scheitern, ist das Beispiel m.E. vielleicht hilfreich.
Würde aber über die Syntax nochmal nachdenken...
Zitat
.*^((?!last_seen|uptime|snr|lastUpdate|utilization).)*$
Wo ist der funktionale Unterschied zu dem hier:
^(?!last_seen|uptime|snr|lastUpdate|utilization).*$
nunja, merkste selbst?
bei meinem Beispiel kann die ausgeschlossene Zeichenkette irgendwo im String stehen, bei deinem Beispiel nur am Anfang.
Es geht bei mir um den Suffix an einem Reading-Namen....
2022-12-13 17:23:49 6300a13c46e0fb0018e86735 connected
2022-12-13 17:23:49 6300a13c46e0fb0018e86735_accesspoint AP-FLUR
2022-12-13 17:23:49 6300a13c46e0fb0018e86735_essid not_used_24
2022-12-13 17:23:49 6300a13c46e0fb0018e86735_hostname 192.168.2.63
2022-12-13 17:23:49 6300a13c46e0fb0018e86735_last_seen 2022-12-13 17:23:49
2022-12-13 17:23:49 6300a13c46e0fb0018e86735_snr 54
2022-12-13 17:23:49 6300a13c46e0fb0018e86735_uptime 655072
2022-12-13 17:23:49 6300a48c46e0fb0018e86800 connected
2022-12-13 17:23:49 6300a48c46e0fb0018e86800_accesspoint AP-FLUR
2022-12-13 17:23:49 6300a48c46e0fb0018e86800_essid not_used_24
2022-12-13 17:23:49 6300a48c46e0fb0018e86800_hostname 192.168.2.8
2022-12-13 17:23:49 6300a48c46e0fb0018e86800_last_seen 2022-12-13 17:23:49
2022-12-13 17:23:49 6300a48c46e0fb0018e86800_snr 29
2022-12-13 17:23:49 6300a48c46e0fb0018e86800_uptime 1484548
2022-12-13 17:23:49 6300aac846e0fb0018e869de disconnected
2022-12-13 17:23:49 6300aac846e0fb0018e869de_accesspoint unknown
2022-12-13 17:23:49 6300aac846e0fb0018e869de_essid UNDEFINED
2022-12-13 17:23:49 6300aac846e0fb0018e869de_hostname Unknown
2022-12-13 17:23:49 6300aac846e0fb0018e869de_last_seen 2022-10-17 19:29:29
2022-10-18 04:56:35 6300aac846e0fb0018e869de_snr 37
2022-10-18 04:56:35 6300aac846e0fb0018e869de_uptime 46767
2022-12-13 17:23:49 6300bfb646e0fb0018e881e0 disconnected
2022-12-13 17:23:49 6300bfb646e0fb0018e881e0_accesspoint unknown
2022-12-13 17:23:49 6300bfb646e0fb0018e881e0_essid UNDEFINED
2022-12-13 17:23:49 6300bfb646e0fb0018e881e0_hostname Unknown
2022-12-13 17:23:49 6300bfb646e0fb0018e881e0_last_seen 2022-12-12 22:51:38
2022-12-13 05:33:04 6300bfb646e0fb0018e881e0_snr 57
2022-12-13 05:33:04 6300bfb646e0fb0018e881e0_uptime 21
2022-12-13 17:23:49 6300c00046e0fb0018e8827b disconnected
2022-12-13 17:23:49 6300c00046e0fb0018e8827b_accesspoint AP-FLUR
2022-12-13 17:23:49 6300c00046e0fb0018e8827b_essid not_used_24
2022-12-13 17:23:49 6300c00046e0fb0018e8827b_hostname 192.168.2.82
2022-12-13 17:23:49 6300c00046e0fb0018e8827b_last_seen 2022-12-13 15:03:00
2022-12-13 17:23:49 6300c00046e0fb0018e8827b_snr 39
2022-12-13 17:23:49 6300c00046e0fb0018e8827b_uptime 10
2022-12-13 17:23:49 6300c03f46e0fb0018e8833b disconnected
2022-12-13 17:23:49 6300c03f46e0fb0018e8833b_accesspoint AP-FLUR
2022-12-13 17:23:49 6300c03f46e0fb0018e8833b_essid not_used_24
2022-12-13 17:23:49 6300c03f46e0fb0018e8833b_hostname 192.168.2.76
2022-12-13 17:23:49 6300c03f46e0fb0018e8833b_last_seen 2022-12-13 05:59:02
2022-12-13 17:23:49 6300c03f46e0fb0018e8833b_snr 37
2022-12-13 17:23:49 6300c03f46e0fb0018e8833b_uptime 13
2022-12-13 17:23:49 6300c06a46e0fb0018e88470 disconnected
2022-12-13 17:23:49 6300c06a46e0fb0018e88470_accesspoint unknown
2022-12-13 17:23:49 6300c06a46e0fb0018e88470_essid UNDEFINED
2022-12-13 17:23:49 6300c06a46e0fb0018e88470_hostname Unknown
2022-12-13 17:23:49 6300c06a46e0fb0018e88470_last_seen 2022-12-13 01:19:07
2022-12-13 05:33:04 6300c06a46e0fb0018e88470_snr 41
2022-12-13 05:33:04 6300c06a46e0fb0018e88470_uptime 30
Es geht auch nicht darum, dass ich es besser kann als du, ich habs nämlich zusammengeklaut und ein bisschen probiert. Ihr könnt das definitiv besser
Na ja, unabhängig von diesem etwas überraschenden Ergebnis: Das "^" zwischendrin kann eigentlich nicht stimmen, das sollte eigentlich den Anfang markieren, ist vermutlich hier nur mehr oder weniger komplett wirkungslos, weil fhem.pl da sowieso was ergänzt. Wäre mir das nicht ins Auge gestochen hätte ich dazu auch nichts geschrieben, so ist es halt einfach nur sehr "seltsam"...
Ohne diese "Garnitur" für Anfang und Ende wäre es dann:
.*(?!last_seen|uptime|snr|lastUpdate|utilization).*
Würde ich auch so sehen. Eigentlich ein "Bug", das es funktioniert mit einem ^ mittendrin ... zum Glück aktuell nur ein "Schönheitsfehler".
Nur sollte man sich so einen "Schwachsinn" nicht angewöhnen!
ich lasse mich gern belehren ....
Dann bitte doch mal die korrekte Syntax dafür empfehlen, bisher bekomme ich außer "ist unfug" nichts korrektes zu lesen, zumindest wenn ich regex101.com glauben darf.
Schaut euch doch die Screenshots an ....
Für mich jedenfalls funktioniert der Schwachsinn....
y aber eine Lösung wurde Dir schon geschrieben. Und ja .. auch regex101.com arbeitet "nur" mit fertigen Libarys, welche genau so etwas wahrscheinlich ausbügeln.
P.S. Rate mal, warum ich "Schwachsinn" in "" gesetzt habe ...
Vieles wird klar, wenn man weiß, dass Routinen vom Rudi ^ am Anfang und $ am Ende der Regex hinzufügen. DOIF macht das z. B. nicht.
wo wurde mir denn eine fertige Lösung geboten?
ich will einfach nur XXX_<auf gar keinen fall das oder dies oder ....>.... haben ...
Ich kenne die Namen von XXX nicht ....
#15
okay, regex101 zeigt mir aber, dass #15 trotzdem auf alles matched... (siehe Screenshot oben)
Kann das jetzt Jemand verifizieren?
Wirklich interessantes Thema...
Für regex101:
^(?!.*(?:last_seen|uptime|snr|lastUpdate|utilization)).*$
Im Attribut dann ohne die Anfangs-/End-Markieungen:
(?!.*(?:last_seen|uptime|snr|lastUpdate|utilization)).*
okay .... klappt nicht :/
Argument (?!.*(? for attr unificontroller event-on-change-reading is not a valid regexp: Sequence (?$...) not implemented in regex; marked by <-- HERE in m/^(?!.*(?$ <-- HERE / at fhem.pl line 3186.
Hat Jemand eine Idee?
Argh... - der Threshold-Trenner "Doppelpunkt" ist ja nochmal eine "Spezialität" in diesem Zusammenhang. Dann klappt das hier nicht mit dem Vermeiden der capture group, aber ohne akzeptiert es FHEM:
(?!.*(last_seen|uptime|snr|lastUpdate|utilization)).*