setDisableNotifyFn löscht auch NotifyDev

Begonnen von jayjay, 26 Februar 2022, 18:37:21

Vorheriges Thema - Nächstes Thema

jayjay

Ich wollte die neue setDisableNotifyFn Funktion verwenden um Notify während der Verarbeitung eines Codesegmemts abzuschalten um Wechselwirkungen durch einen Notify Aufruf zu verhindern. Ich habe dann aber festgestellt, das setDisableNotifyFn nicht nur disableNotifyFn setzt und löscht, sondern auch die NotifyDev beim setzen löscht. Wieso ist das Löschen der NotifyDev notwendig? Nach dem Aufheben von disableNotifyFn  muss man nun noch die NotifyDev neu setzen.
FHEM in virtueller Maschine (Ubuntu) auf Intel Serverboard
HM-TC-IT-WM-W-EU, HM-CC-RT-DN, Vitodens 200 Gastherme Anbindung über vcontrol ( leider nur lesend) und Eigenbau Interface als Emulation eines abgesetzten Raumthermostaten (Soll-Temperatur Steuerung)

Beta-User

Tendenziell sollte man solche internen Funktionen als User nicht verwenden, wie gesehen sind die Nebenwirkungen nicht so einfach zu überblicken.

Vermutlich liese sich das Ziel mit "disabledForIntervals" oder "disabledAfterTrigger" erreichen. Da das erste nicht selbsterklärend ist: Du könntest einen (Reading-) Marker setzen, wenn das notify nicht ausgeführt werden soll und dann entweder 00:00-24:00 oder 24:00-24:00 zurückgeben.

Einfacher ist es wahrscheinlich, eine "if"-Abfrage zu Beginn des Codes einzubauen, die die Rahmenbedingungen checkt und sonst einfach aussteigt...
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

jayjay

Hallo Beta-User,

ich habe mich nicht richtig ausgedrückt und es ist vieleicht auch nicht die richtige Forumgruppe. Es geht um die Verwendung von setDisableNotifyFn in einem selbst geschriebnenen FHEM Module und den Aufruf von X_Notify. Ich verwende jetzt als Alternative eine Internal das in x_Notify nochmal geprüft wird und den eigentliche Aufruf der Aktionen freigibt oder sperrt.
FHEM in virtueller Maschine (Ubuntu) auf Intel Serverboard
HM-TC-IT-WM-W-EU, HM-CC-RT-DN, Vitodens 200 Gastherme Anbindung über vcontrol ( leider nur lesend) und Eigenbau Interface als Emulation eines abgesetzten Raumthermostaten (Soll-Temperatur Steuerung)

Beta-User

Hi jayjay,

die Frage ist in "Anfängerfragen" dann auch nicht wirklich gut aufgehoben, und die Beschreibung des "Drumrum" könnte auch etwas umfangreicher sein. Vielleicht magst du es nach "Perl für FHEM-User" verschieben und dann noch etwas mehr "Fleisch" liefern?

Allgemein:
Wenn du innerhalb eines Moduls bist, weißt du ja, wie und wann NOTIFYDEV gesetzt und NotifyFn() aktiviert werden muss. Das ist jedes Mal relativ "teuer" (weil die internen Strukturen für alle Event-Handler neu aufgebaut werden müssen) , von daher würde ich das nicht "ständig" machen, aber wenn es nur "gelegentlich" ist, ist es _vermutlich_ die bessere Lösung gg. dem "if"-Konstrukt.
NOTIFYDEV solltest du übrigens auch nicht direkt setzen, sondern ggf. den/die fhem.pl-call/s (notifyRegexpChanged/setNotifyDev) dafür nutzen.
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

jayjay

Es handelt sich um ein Hilfsmodul für das Zusammenspiel mit einem Tablet-UI basierenden User Interface. Es bereitet Daten von mehreren Devices, die bei der Definition als Argument übergeben werden, auf für die Darstellung im UI und empfängt Eingaben vom UI (über ein Popup) die dann wieder die Devices steuern. Über Notify reagiert es auf Änderungen der Devices. Bei den Devices handelt es sich um den Home Status der einzelnen Bewohner.
Während das Popup zur Eingabe aktiv ist soll es aber nicht auf diese Änderungen reagieren. Dafür wollte ich DisableNotifyFn verwenden. Aus der Beschreibung von DisableNotifyFn in DevelopmentModuleAPI war aber nicht klar, dass dabei auch die NotifyDev Liste gelöscht wird. Da diese dynamsich bei der Definition erstellt wird müsste ich diese speichern und jeweils neu setzten. Wie oben beschrieben verwende ich jetzt ein Internal, das aktiv ist wenn das Popup geöffnet ist, und in der X_Notify Funktion die Auswertung von Änderungen abschaltet.
FHEM in virtueller Maschine (Ubuntu) auf Intel Serverboard
HM-TC-IT-WM-W-EU, HM-CC-RT-DN, Vitodens 200 Gastherme Anbindung über vcontrol ( leider nur lesend) und Eigenbau Interface als Emulation eines abgesetzten Raumthermostaten (Soll-Temperatur Steuerung)

Beta-User

Danke für die Erläuterungen. Unter den geschilderten Rahmenbedingungen erscheint mir das Setzen eines Internals für die temporäre Deaktivierung der eigentlichen Funktionalität in NotifyFn() auch als effizienteste Lösung für dein Problem.
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