[gelöst] regex auf event-min-interval "ALLE AUSSER x y"

Begonnen von holle75, 17 März 2025, 11:34:25

Vorheriges Thema - Nächstes Thema

holle75

Der Versuch ALLE Readings AUSSER "sensor_dry_contact_1" und "sensor_dry_contact_2" in einem event-min-interval mit 900 Sekunden zu belegen

attr MQTT2_JK_BMS event-min-interval ^(?:(?!sensor_dry_contact_1|sensor_dry_contact_2).)*$:900
wird mir mit

Zitatattr MQTT2_JK_BMS event-min-interval ^(?:(?!sensor_dry_contact_1|sensor_dry_contact_2).)*$:900: argument is not a number

quittiert. Was ist falsch? Dazu sei gesagt, dass das Regex zusammengeklaubt ist und ich es nur grob verstehe.

betateilchen

#1
Zitat von: holle75 am 17 März 2025, 11:34:25Was ist falsch?

Der erste Doppelpunkt im Attributwert führt dazu, dass der Wert an dieser Stelle getrennt wird und der Teil (?!sensor_dry_contact_1|sensor_dry_contact_2).)*$:900 keine gültige (numerische) Intervallangabe darstellt.

Zitat von: holle75 am 17 März 2025, 11:34:25Dazu sei gesagt, dass das Regex zusammengeklaubt ist und ich es nur grob verstehe.

Dann solltest Du bitte zuerst versuchen zu verstehen, wie regex funktionieren, bevor Du solche recht komplexen Aufgaben damit lösen möchtest.

Ungetestet:
^(?!sensor_dry_contact_[12]).*
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

holle75

jetzt hats mir mal wieder meine Antwort gelöscht. Das ist einfach blöde gelöst wenn die Standard-Login-Zeit eine Stunde ist, du den Browser offen hast, deine Antwort schreibst und beim Senden diese dann verloren geht. MMh

Anyway, Danke .... das RegEx funktioniert an sich. Warum in fhem nicht, hast du beschrieben, trotzdem bringt mich das in der Lösung nicht weiter, weil ich nicht weiss, wie ich es anders formulieren muss. Hab recht lange für diesen Erguss gebastelt und probiert.

Ich finde die Frage aber prinzipiell gar nicht so kompliziert oder ungewöhnlich (abgesehen von der Umsetzung). Kommt bei mir häufig vor, dass ich bestimmte Readings ausklammern möchte. Wenn das Device dir aber 50 generiert und du nur ein/zwei ausnehmen möchtest, ist das Konzept ALLE AUSSER, das richtige. Habe mich aber auch gewundert, dass ich die Antwort nicht hier im Forum gefunden habe.

betateilchen

Zitat von: holle75 am 17 März 2025, 12:45:41trotzdem bringt mich das in der Lösung nicht weiter, weil ich nicht weiss, wie ich es anders formulieren muss.

???

Hast Du denn mal die regex probiert, die ich oben vorgeschlagen habe?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

holle75

#4
Komplett übersehen! (vielleicht der beschriebene BrowserRefresh?) Danke!

EDIT: damit ich es auch in Zukunft verstehe und weitere Readings einbauen könnte ist bei mir ein

^(?!.*sensor_dry_contact_1.*|.*sensor_dry_contact_2.*).*:900
draus geworden. Weniger grazil, aber ...

betateilchen

Deine regex ist aber in dieser Ausgestaltung ziemlich sinnfrei...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

holle75

... kommt da jetzt noch was nach, oder soll ich Fragen: warum? ;)