Lieber ein großes oder viele kleine Notify

Begonnen von Wernieman, 05 März 2021, 20:39:48

Vorheriges Thema - Nächstes Thema

Wernieman

Hallo Freunde,

jetzt nicht gerade eine Anfängerfrage, aber hier passt es eigentlich am besten rein.

Hintergrund:
Habe hier ein lirc, welches nicht mit dem FHEM-Lirc Modul arbeitet, sondern pr irexec werden die Befehle zu FHEM reingepustet, in ein LIRC-Dummy. Der Dummy kann also viele Stati annehmen, z.B. 1. wenn die 1 gedrückt wurde (oder 2,3,play,stop ...)
In FHEM möchte ich jetzt die Werte verarbeiten, wozu man natürlich notify nimmt. Aktuell wird es in einem Script verarbeitet, was aber eigentlich redudant ist, warum extern + FHEM wenn es FHEM gibt  ;D

Jetzt die Frage:
Es gibt 2 Lösungen für dieses Problem:

a) Merere notify, wie z.B.

define LIRC_notify_1 notify LIRC:1 set....
define LIRC_notify_2 notify LIRC:2 set ....
......
define LIRC_notify_X notify LIRC:X set ....


b) Ein notify und Verarbeitung im notify

define LIRC_notify notify LIRC:.* {
  if $EVTPART1 eq 1 {}
  elsif $EVTPART1 eq 2 {}
  ....
  elsif $EVTPART1 eq X {}
}


a) hat den Scharm, einfach kleine notify zu haben. Dafür braucht man viele und ich weiß nicht, ob FHEM mit einfach so vielen notifys bearbeitet werden sollte. Eine Infrarotfernbedienung kann leicht >28 Tasten haben und ich verarbeite 3.
(Weshalb die Events auch eigentlich Fernbedienung_X_X heißen)
b) hat den Vorteil, das bei einer allgemeinen Eventverarbeitung eben nur ein notify geprüft werden muß. Die Detailpüfung dann eben auch nur in dem Falle. Dafür wird es einfach Riesig ... und ist das noch beherrschbar?

Wenn jetzt jemand kommt mit Übersichtlichkeit, es gibt Räume in FHEM. Also durch die Definition des Raums IRC bekomme man es schon Übersichtlicher hin. Das ist so also nicht der Vorteil von b) zu vielen a)

Was denkt Ihr so? Bin mir selber aktuell Unschlüssig .... und brauche einen Fingerzeig und mich zu entscheiden...

Hinweis und Disclaimer:
Die Befehle oben sind aus dem Kopf geschrieben und nicht getestet. Schreib-, Definitions-- und Syntax-Fehler sind also durchaus möglich. Mir geht es hier eher ums Prinzip ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

Ich habe sowas ähnliches bei mir umgesetzt: EIN notify für alle Homematic-Fernbedienungen.

defmod n_remote_HomeMatic notify .*_Btn_...(Short|Long).* {myRemote($NAME,$EVTPART0)}

Die Auswertung habe ich komplett in eine eigene Datei 99_remoteUtils.pm ausgelagert.


sub myRemote($$) {
   my ($dev,$evt,$button) = @_;
   ($dev,$button) = split (/_Btn_/,$dev);
   $button //= -1;
#Debug "d:$dev b:$button e:$evt";

   given ($dev) {

      when ('HM_4987D5') {
    # 20 Kanal Wohnzimmer
        CommandSet(undef,'wz_Licht_Regal toggle')  if ($button == 1 && $evt eq "Short");

        CommandSet(undef,'wz_Licht_Bild on')  if ($button == 3 && $evt eq "Short");
        CommandSet(undef,'wz_Licht_Bild off') if ($button == 3 && $evt eq "Long");

        break;
      }

      when ('ku_PIR1') {
        CommandSet(undef,'ku_TV on')  if ($button eq '01' && $evt eq "Short");
        CommandSet(undef,'ku_TV off') if ($button eq '01' && $evt eq "Long");
break;
  }
...


Es läßt sich einfach viel einfacher warten, wenn der Ausführungscode in einer ausgelagerten Datei steht.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

Aber es giebt kein Systemgrund, es in viele kleine zu Teilen?

Aber Du hast insofern recht, das mit vielen kleinen notifys man sich viele notify-Namen ausdenken muß ... selbst wenn man nach Schema vorgeht, wie ich es im Beispiel tat ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

TomLee

Ich bin ganz leicht stolz auf meine Lösung.

Dazu hab ich ein notify:

defmod not_MQTT2_Sensorkrake notify MQTT2_Sensorkrake:NEC_32:.* {Nec32RemoteCodesHandler("MQTT2_WLED_TV","ls_wz_dl","Jalousie_Siro1","TV_Wohnzimmer","str_MQTT2_zigbee_gu10","MQTT2_Mi_Wec
klicht","Sonos_Wohnzimmer","du_remote",$EVTPART1)}



Wernieman

Wobei ich diese Lösung irgendwie nicht verstehe ... Sorry
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

betateilchen

Zitat von: Wernieman am 05 März 2021, 20:54:45
Aber es giebt kein Systemgrund, es in viele kleine zu Teilen?

Doch, für mich schon.

Die Menge der devices (vom Type notify) wird unnötig aufgebläht und bei jedem auftretenden Event muss FHEM ermitteln, welche notify über den event informiert werden müssen.
Außerdem muss bei jedem FHEM Start jedes notify erstmal per define angelegt werden, das dauert halt auch alles seine Zeit. Liegt zwar pro device im Millisekundenbereich, aber das kann sich durchaus summieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

ZitatDie Menge der devices (vom Type notify) wird unnötig aufgebläht und bei jedem auftretenden Event muss FHEM ermitteln, welche notify über den event informiert werden müssen.
Genau das dachte ich mir auch. Vor allem weil FHEM jedes mal eine RegEx für jedes notify verarbeiten muß. Aber FHEM sollte doch eigentlich für so viele notify ausgelegt sein .. oder?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

TomLee

Zitat von: Wernieman am 05 März 2021, 21:05:15
Wobei ich diese Lösung irgendwie nicht verstehe ... Sorry

Und wenn du dir die 1 1/2 Seiten mal durchliest ? Hatte anfangs (beim ersten Post im Thread) auch keinen blassen Schimmer davon.
Mir fällt das schwer zusammenfassend zu erklären und würde ewig dazu brauchen, wenn du aber Fragen dazu hast helf ich gerne.

Wernieman

#8
Habe es mir durchgelesen bevor ich schrieb "hab es nicht verstanden", wahrscheinlich bin ich heute nur zu "müde" ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html