[PATCH] - fhem.pl - NOTIFYDEV für Regexp-Wizard basierende notify's

Begonnen von Markus Bloch, 12 Juni 2016, 14:59:10

Vorheriges Thema - Nächstes Thema

Markus Bloch

Hallo Rudi,

ich wollte gerne an deine Aussage unter https://forum.fhem.de/index.php/topic,36663.msg290532.html#msg290532 anknüpfen, wollte  den alten Thread aber nicht wieder aufwärmen.

Anbei findest Du einen Patch, der es notifyRegexpChanged() erlaubt auch NOTIFYDEV für Regexp-Wizard erzeugte Regexps zu setzen. Das ganze ist jedoch begrenzt auf max. 5 Definitionsnamen, da es sonst zumindest in FHEMWEB sehr groß wird.

Ich habe eine ganze Reihe an Regexps dazu getestet:

Für folgende notify-Regexps werden nun NOTIFYDEV erzeugt:

test1:on|test2:on
(test1:on|test2:on)
test1|test2
(test1|test2)


Der hinzugefügte Mechanismus greift nur, wenn die Regexp keinerlei Wildcards wie . + * [ ] \ ? ( ) enthält. Ausgenommen davon sind optionale runde Klammern am Anfang oder Ende der Regexp (siehe Beispiel-Regexp). Sollte die Regexp jedoch Wildcards enthalten wird wie bisher NOTIFYDEV gelöscht.

Folgende getestete Regexp haben kein NOTIFYDEV erhalten:


test[1|2]:on|test2:off
test\d?:on|off
test.*:on|off
test.*


Alle gefundenen Definitionsnamen werden dann kommasepariert in NOTIFYDEV gesetzt (siehe https://forum.fhem.de/index.php/topic,47119.msg388571.html#msg388571), sofern die Anzahl kleinergleich 5 ist. Die Schwelle ist jetzt erstmal so frei aus der Luft gegriffen um die Detail-Ansicht in FHEMWEB nicht zu sehr aufzublähen, insbesondere bei längeren Definitionsnamen.

Würde mich freuen, wenn du das einchecken könntest.

Vielen Dank

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Folgende Probleme habe ich noch mit dem Patch:
- wenn die Liste > 5 Elemente hat, sollte NOTIFYDEV geloescht werden
- wenn in @list Elemente sind, die (noch?) nicht in %defs auftauchen, auch
kannst du sie bitte adressieren?

Fragen:
- "da es sonst zumindest in FHEMWEB sehr groß wird." verstehe ich nicht, kannst mir auf die Spruenge helfen?
- Warum ist in (?::.*) das ?: noetig? Ich musste in der Doku nachschauen, was ?: macht, vmtl. muessen das auch andere :)

Markus Bloch

Zitat von: rudolfkoenig am 12 Juni 2016, 17:21:39
Folgende Probleme habe ich noch mit dem Patch:
- wenn die Liste > 5 Elemente hat, sollte NOTIFYDEV geloescht werden
- wenn in @list Elemente sind, die (noch?) nicht in %defs auftauchen, auch
kannst du sie bitte adressieren?

Hab ich geändert, Patch anbei.

Zitat von: rudolfkoenig am 12 Juni 2016, 17:21:39
Fragen:
- "da es sonst zumindest in FHEMWEB sehr groß wird." verstehe ich nicht, kannst mir auf die Spruenge helfen?

Würde man jetzt in einem notify bspw per Regexp-Wizard ca. 20 Geräte einfügen, würde auch NOTIFYDEV 20 Geräte umfassen, was in der Detail-Ansicht recht viel Platz in Anspruch nehmen würde.

Man kann aber auch andersherum argumentieren, dass eine Defintion mit 20 Geräten in der Regexp sowieso die Detailseite aufbläht und daher ein langes  NOTIFYDEV den Braten auch nicht mehr fett macht. Würde ich Dir überlassen, ob du das beschränken möchtest oder nicht. Wenn man Performance vor Ergonomie stellt, sollte man es rauslassen.

Zitat von: rudolfkoenig am 12 Juni 2016, 17:21:39
- Warum ist in (?::.*) das ?: noetig? Ich musste in der Doku nachschauen, was ?: macht, vmtl. muessen das auch andere :)

(?:  ... ) verhindert das Grouping dieser Klammer. Also das der Inhalt der Klammer als $2 in diesem Fall verfügbar gemacht wird. Kann man, muss man nicht. Ich brauche aber die Klammer um sie mit dem Quantifizierer ? ( 0 - 1 mal) zu erfassen, ein Grouping als $2 brauche ich aber nicht, daher habe ich ?: eingefügt um dies zu verhindern. Man kann es natürlich auch mit normaler Klammerung machen.

Neuer Patch anbei.

Gruß
Markus


Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

ZitatHab ich geändert, Patch anbei.
Nicht ganz: bei unbekannten Geraeten wird NOTIFYDEV immer noch definiert. Weiss zwar nicht, ob es Probleme bereiten kann, wir muessen den Fall im Auge behalten.
Habs kurz getestet (5+ notify Varianten) und eingecheckt.

Markus Bloch

Hallo Rudi,

vielen Dank.

Zitat von: rudolfkoenig am 12 Juni 2016, 17:21:39
- wenn in @list Elemente sind, die (noch?) nicht in %defs auftauchen, auch

Das hab ich jetzt folgendermaßen interpretiert. Es sollen auch alle Definitionsnamen die zum Zeitpunkt des Durchgangs noch NICHT in %defs existieren dennoch mit in NOTIFYDEV übernommen werden. Daher habe ich den Check mit grep { defined($defs{$_}) } wieder entfernt. Macht auch durchaus Sinn gerade bei der Initialisierung von FHEM, sonst würde NOTIFYDEV unvollständig sein, wenn ein notify zuerst definiert wird und danach erst die eventgenerierenden Definitionen (ähnlich wie wir das schonmal bei structure hatten).

Bitte korrigier mich, wenn ich das falsch interpretiert habe.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

rudolfkoenig

Korrekt. Strenggenommen duerften wir die Funktion erst nach der Initialisierung aufrufen, und nach jedem define/modify/etc. Ich schlage vor, wir sparen uns den Aufwand, bis jemand zeigt, dass es notwendig ist.