Ermittlung von devices für NOTIFYDEV mittels notifyRegexpChanged

Begonnen von fruemmel, 12 Januar 2022, 13:07:41

Vorheriges Thema - Nächstes Thema

rudolfkoenig

ZitatUnd wenn schon "undef" als Argument möglich sein soll, warum dann zwingend?
Weil meiner Ansicht nach setNotifyDev($hash, undef) verstaendlicher ist, als setNotifyDev($hash).
Ich habe aus diesem Grund einen separaten setDisableNotifyFn($hash, 1) hinzugefuegt.

Beta-User

Danke, auch für die Erläuterung.
Bin zwar nicht sicher, ob es eine separate Funktion gebraucht hätte, aber so kann man es ggf. einfacher erklären.

Habe ein paar entsprechende Ergänzungen in https://wiki.fhem.de/wiki/DevelopmentModuleAPI bzw. https://wiki.fhem.de/wiki/DevelopmentModuleIntro reingenommen, dass das da nicht verloren geht.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Damian

Ich habe jetzt bei mir setDisableNotifyFn eingebaut, für den Fall, dass im DOIF-Device das Attribut disable gesetzt bzw. gelöscht wird.

Es scheint zu funktionieren. Irritierend finde ich allerdings die Kleinschreibung im Internal.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

rudolfkoenig

ZitatKönnte es sein, dass setNotifyDev mit FHEM2FHEM nicht funktioniert?
Bei bestimmten Kombinationen ist das richtig.

NOTIFYDEV spezifiziert die Liste der lokalen FHEM-Geraete, deren Events zu einem NotifyFn Aufruf fuehren sollten.
Bei FHEM2FHEM:Log kann es vorkommen, dass ein Geraet lokal nicht vorhanden ist, und von FHEM2FHEM fuer die Event-Behandlung temporaer angelegt wird, und die relativ teure Neuerstellung der der Warteschlangen via createNtfyHash nicht durchgefuehrt wird.

Solche Faelle koennen auch notify verwirren: wenn lokal DEV1 existiert, DEV2 nur remote, das notify-Regexp auf DEV.* angelegt wird, dann wird notify fuer die DEV2-Events nicht aufgerufen. Fuer solche Faelle muss man entweder einen lokalen DEV2 (z.Bsp. als dummy) anlegen, oder den Regexp als (DEV1|DEV2) spezifizieren.

Die korrekte Loesung waere in FHEM2FHEM:Log vor und nach der Eventbehandlung solcher Geraete createNtfyHash aufzurufen.
Bin noch leicht unsicher, was wichtiger ist: ein in Sonderfaellen korrektes Verhalten, oder Geschwindigkeit.

Damian

ja, das habe ich mir schon gedacht, daher habe ich dem TE bereits geraten, ein entsprechendes Device im Hostsystem manuell anzulegen: siehe https://forum.fhem.de/index.php/topic,103401.msg1209300.html#msg1209300

Da bin ich mal gespannt, wie viele noch mit diesem Problemchen kommen, da es zuvor mit dem eigenen Filter (ohne NOTIFYDEV) im DOIF ohne Device-Kopie funktionierte.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Damian

nächstes Problem kommt dann gleich um die Ecke: https://forum.fhem.de/index.php/topic,126321.msg1209412.html#msg1209412

Diese Regex hat wohl ohne NOTIFYDEV im DOIF funktioniert: Licht[.].*(?<!till)

mit NOTIFYDEV wohl nicht mehr
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF