Hallo,
ich habe mal eine blöde Anfängerfrage. Dieses Wochenende wurde das ZWAVE Modul aktualisiert. Das hier hat bis irgendwann kürzlich funktioniert:
define Sensor.ZisterneOK notify Sensor.Zisterne:alarm:.Water:.Event.cleared:.unknown.event.0 { ZisterneOK() }
Nun ist es:
define Sensor.ZisterneOK notify Sensor.Zisterne:alarm:.Water:.Event.cleared:.State.idle { ZisterneOK() }
Es hat sich also der Teil "unknown.event.0" in "State.idle" geändert. Unschön bis ich drauf gekommen bin, aber sei's drum. Da es ein wirklich wichtiger Sensor ist (prüft, ob die Zisterne voll ist und pumpt sie ab, bevor die halbe Einfahrt unter Wasser steht), möchte ich da kein Test-Risiko eingehen, dahe die Frage:
Kann ich hier ein Wildcard einbauen? Quasi
define Sensor.ZisterneOK notify Sensor.Zisterne:alarm:.Water:.Event.cleared* { ZisterneOK() }
Wieso? Falls das "Ist Voll" Event geändert wird und ich es nicht mitbekomme, wäre das echt blöd:
define Sensor.ZisterneVoll notify Sensor.Zisterne:alarm:.Water:.Leak.detected.-.Unknown.Location { ZisterneVoll() }
Warum sollte das nicht gehen? Allerdings willst du vermutlich keine beliebige Anzahl von "d" haben ("d*"), sondern irgendwas beliebiges nach dem "cleared", und das wäre dann ".*".
Allerdings solltest du dann sicherstellen, dass sich der Effekt des notify durch so eine Wildcard nicht ändert, weil auf zu viele Events reagiert wird.
Also quasi:
define Sensor.ZisterneOK notify Sensor.Zisterne:alarm:.Water:.Event.cleared:.* { ZisterneOK() }
define Sensor.ZisterneVoll notify Sensor.Zisterne:alarm:.Water:.Leak.detected.* { ZisterneVoll() }
Sorry, aber bei den Notify's steige ich nie so ganz durch und bin eher froh, wenn sie laufen und packe sie anschließend, wenn möglich, auch nie wieder an.
So in der Art, auch wenn mich wundert, dass du einmal den ":" rauswirfst und einmal drinläßt.
Ansonsten ist das nichts notify-spezifisches, sondern regex, und das sollte man im FHEM-Kontext halt schlicht und ergreifend lernen, weil man es überall braucht...
(Ich persönlich finde es übersichtlicher, ein notify statt zweien zu verwenden und dann in der aufgerufenen Funktion (durch Auswertung des übergebenen $EVENT) zu unterscheiden, was eigentlich passieren soll. Ist aber auf der Perl-Seite etwas aufwändiger.)
Zitat von: Beta-User am 15 Juni 2020, 11:51:38
So in der Art, auch wenn mich wundert, dass du einmal den ":" rauswirfst und einmal drinläßt.
So kommen die Meldungen rein, also mit und ohne :
Nun ja, im Prinzip auch egal...
Das .* würde jedenfalls auch den einen ":" "verschlucken", mit ist es allerdings "eindeutiger". Ansonsten zum regex-Üben noch zwei Links:
regexr.com/
https://regex101.com/
Da findest du auch Erläuterungen, welche Kürzel jeweils was zu bedeuten haben.