Autor Thema: Frage zu "Probably associated with"  (Gelesen 942 mal)

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4267
Frage zu "Probably associated with"
« am: 18 August 2019, 08:22:17 »
Guten Morgen,

meine Frage bezieht sich auf folgende Aufgabenstellung.
Wenn ich ein DbRep-Device erstelle, wird es mit dem assozierten DbLog-Device verbunden (DEF) und es erscheint auch die Relation in "Probably associated with". Soweit so gut.

Welches Device mit dem DbRep anhand von Datensätzen in der DB auswerte, wird innerhalb des DbRep mit einem Attribut festegelegt, z.B. "MySTP5000".
Ich möchte nun erreichen, dass in "Probably associated with" des _ausgewerteten_ Devices (im Beispiel "MySTP5000") das DbRep mit erscheint.

Wie in der sub "getPawList" in fhem.pl zu sehen ist, könnte man explizit in dem _ausgewerteten_ Device ein Reading "associatedWith" erstellen um dieses Ziel zu erreichen.

Nun ist die eigentliche Frage, ob es denn eigentlich gewünscht ist in fremden Devices Readings zu erstellen ?
Da es diese Funktion in fhem.pl gibt, gehe ich mal davon aus.
Aber gesehen hatte ich es bisher noch nicht, glaube ich zumindest.


Danke und euch einen schönen Sonntag,
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20891
Antw:Frage zu "Probably associated with"
« Antwort #1 am: 18 August 2019, 10:51:05 »
Zitat
Nun ist die eigentliche Frage, ob es denn eigentlich gewünscht ist in fremden Devices Readings zu erstellen ?
Erwuenscht suggeriert was Falsches, aber manche Module wie statistics, dewpoint muessen das machen.
Wenn Du das machst, dan achte darauf, das es richtig gemacht wird, also hinzugefuegen und entfernen, und nicht einfach ueberschreiben.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4267
Antw:Frage zu "Probably associated with"
« Antwort #2 am: 18 August 2019, 11:49:03 »
Danke Rudi,

Zitat
Wenn Du das machst, dan achte darauf, das es richtig gemacht wird, also hinzugefuegen und entfernen, und nicht einfach ueberschreiben.
Ja, das ist mir bewusst.
Weiß nicht wie du es siehst, aber es wäre m.M. nach sinnvoll perspektivisch zwei zentrale Subs zu haben um dieses Reading konsistent modifizieren zu können, z.B. SetAssociatedWith und ModifyAssociatedWith.

Wenn mehrere Modulautoren diese Möglichkeit nutzen, kann es sonst vllt. doch mal Fehler geben. Dann weiß man nicht woher das Problem kommt und kann schlecht supporten.... nobody is perfect  :)

LG,
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20891
Antw:Frage zu "Probably associated with"
« Antwort #3 am: 18 August 2019, 12:25:46 »
Wenn das in mehreren Modulen benoetigt wird, dann baue ich das ein.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4267
Antw:Frage zu "Probably associated with"
« Antwort #4 am: 24 August 2019, 08:16:21 »
Habe das Setzen des Readings versuchsweise umgesetzt. Klappt soweit gut, allerdings ist mir gleich zu Beginn mit dem sysmon-Modul untergekommen, dass z.B. dieses Modul die Readings regelmäßg löscht, zumindest verschwindet das Reading bei dem sysmon-Zyklus. Das kann bei anderen Modulen auch möglich sein. Im DbRep mache ich es technisch bedingt ebenfalls so.
D.h. ein Reading "associatedWith" zu nutzen ist vermutlich nicht optimal. Da werde ich mir etwas anderes ausdenken müssen. Nur mal als kurze Rückinfo zu diesem Thema.
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20891
Antw:Frage zu "Probably associated with"
« Antwort #5 am: 24 August 2019, 14:51:41 »
Zitat
allerdings ist mir gleich zu Beginn mit dem sysmon-Modul untergekommen, dass z.B. dieses Modul die Readings regelmäßg löscht
Das ist etwas kurzsichtig vom Modul, da es verhindert, dass Helfermodule ihre Arbeit verrichten.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4267
Antw:Frage zu "Probably associated with"
« Antwort #6 am: 24 August 2019, 15:50:00 »
Habe jetzt im DEF von DbRep einen Zusatz eingefügt, den ich je nach gesetzten Attribut im DbRep steuere. Damit habe ich es selbst in Hand und klappt auch einwandfrei.
Unschön ist, dass nun DEF je nach den Selektionseinstellungen des Users sehr umfangreich werden kann.
Schön wäre es, wenn die sub getPawList um die Auswertung eines {HELPER}{DEF} erweitert werden könnte.
Solltest du dafür offen sein, würde ich morgen mal einen Patch erstellen, bin zur Zeit unterwegs.

LG,
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5074
Antw:Frage zu "Probably associated with"
« Antwort #7 am: 24 August 2019, 16:06:31 »
ich bin mal direkt der Auffassung dass dies kein Reading sondern (bestenfalls) ein internal ist.
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20891
Antw:Frage zu "Probably associated with"
« Antwort #8 am: 24 August 2019, 17:46:15 »
Zitat
Solltest du dafür offen sein, würde ich morgen mal einen Patch erstellen, bin zur Zeit unterwegs.
Patch brauche ich nicht, aber ich verstehe auch nicht, was gewuenscht ist.

Zitat
ich bin mal direkt der Auffassung dass dies kein Reading sondern (bestenfalls) ein internal ist.
Was genau meinst du mit "dies"?
associatedWidth ist schon lange ein Reading, manche Module (z.Bsp MQTT2_DEVICE) kann das aus define/attr Parameter nicht ableiten, sonder nur aus der Entstehungsgeschichte (device wurde aus bridgeregexp abgeleitet).

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4267
Antw:Frage zu "Probably associated with"
« Antwort #9 am: 25 August 2019, 09:47:55 »
Guten Morgen Rudi,

Zitat
Patch brauche ich nicht, aber ich verstehe auch nicht, was gewuenscht ist.
Was ich meinte ist eine kleine unten mit ++ gekennzeichnete Erweiterung der sub getPawList.


sub
getPawList($)
{
  my ($d) = @_;
  my $h = $defs{$d};
  my @dob;
  foreach my $dn (sort keys %defs) {
    next if(!$dn || $dn eq $d);
    my $dh = $defs{$dn};
    if(($dh->{DEF} && $dh->{DEF} =~ m/\b$d\b/) ||
       ($h->{DEF}  && $h->{DEF}  =~ m/\b$dn\b/)) {
       push(@dob, $dn);
    }
++    if(($dh->{HELPER}{PAW} && $dh->{HELPER}{PAW} =~ m/\b$d\b/) ||
++      ($h->{HELPER}{PAW} && $h->{HELPER}{PAW} =~ m/\b$dn\b/)) {
++      push(@dob, $dn);
++    }
  }
  my $aw = ReadingsVal($d, "associatedWith", ""); # Explicit link
  push(@dob, grep { $defs{$_} } split("[ ,]",$aw)) if($aw);
  return @dob;
}

Dadurch hat man die Gestaltung im eigenen Modul in der Hand, braucht nichts in anderen Devices zu setzen, muss nicht das eigene DEF "missbrauchen" und es stört auch nirgends wenn die Liste sehr lang werden wird.

Habe es bei mir getestet. Funktioniert einwandfrei so wie ich es mir vorstelle und ich würde mich freuen wenn du es übernehmen würdest.

Danke und einen schönen Sonntag,
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20891
Antw:Frage zu "Probably associated with"
« Antwort #10 am: 25 August 2019, 11:22:26 »
Ich will nicht mit {HELPER} in fhem.pl anfangen, fand die Idee schon immer merkwuerdig.
Was spricht gegen das Pruefen der associatedWith Reading?

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4267
Antw:Frage zu "Probably associated with"
« Antwort #11 am: 25 August 2019, 11:58:41 »
Zitat
Was spricht gegen das Pruefen der associatedWith Reading?
Setzen in dem assoziierten Device ist aus den schon beschriebenen Gründen ungünstig. Man hat es nicht wirklich in der Hand.

Im eigenen Device wäre es kein Problem, wobei die Usability wegen dem u.U. zu erwartenden Umfang nicht gut ist.
Würdest du denn mitgehen, ein verstecktes ".associatedWith" mit zu rüfen ?

Die sub wäre dann z.B.:

sub
getPawList($)
{
  my ($d) = @_;
  my $h = $defs{$d};
  my @dob;
  foreach my $dn (sort keys %defs) {
    next if(!$dn || $dn eq $d);
    my $dh = $defs{$dn};
    if(($dh->{DEF} && $dh->{DEF} =~ m/\b$d\b/) ||
       ($h->{DEF}  && $h->{DEF}  =~ m/\b$dn\b/)) {
       push(@dob, $dn);
    }
  }
  my $aw = ReadingsVal($d, "associatedWith", ""); # Explicit link
  push(@dob, grep { $defs{$_} } split("[ ,]",$aw)) if($aw);
++  $aw = ReadingsVal($d, ".associatedWith", "");   # Explicit link
++  push(@dob, grep { $defs{$_} } split("[ ,]",$aw)) if($aw);
  return @dob;
}
Damit wäre das Ziel ebenfalls erreicht denke ich.
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20891
Antw:Frage zu "Probably associated with"
« Antwort #12 am: 25 August 2019, 12:08:16 »
Zitat
Setzen in dem assoziierten Device ist aus den schon beschriebenen Gründen ungünstig. Man hat es nicht wirklich in der Hand.
Aus dem gleichen Grund ist ein {HELPER} auch nicht besser.

Zitat
Würdest du denn mitgehen, ein verstecktes ".associatedWith" mit zu rüfen ?
Soweit ich sehe, ist damit dein Ziel:
Zitat
Ich möchte nun erreichen, dass in "Probably associated with" des _ausgewerteten_ Devices (im Beispiel "MySTP5000") das DbRep mit erscheint.
damit aber nicht erreicht, es verkuerzt hoechstens die DBRep Detailansicht.
Dieser Wert muss in der Schleife geprueft werden.

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4267
Antw:Frage zu "Probably associated with"
« Antwort #13 am: 25 August 2019, 12:47:00 »
Zitat
damit aber nicht erreicht, es verkuerzt hoechstens die DBRep Detailansicht.
Dieser Wert muss in der Schleife geprueft werden.
Ah ja, stimmt natürlich  :)
Ich gehe nochmal in mich und teste etwas ...
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4267
Antw:Frage zu "Probably associated with"
« Antwort #14 am: 25 August 2019, 14:57:39 »
Jetzt habe ich es, denke ich. Nach einigem Testen und suchen der besten Variante ist es wohl am einfachsten die if-Bedingung in der Schleife so zu erweitern:

sub
getPawList($)
{
  my ($d) = @_;
  my $h = $defs{$d};
  my @dob;
  my $aw;
  foreach my $dn (sort keys %defs) {
    next if(!$dn || $dn eq $d);
    my $dh = $defs{$dn};
    if(($dh->{DEF} && $dh->{DEF} =~ m/\b$d\b/) ||
++       ($dh && ReadingsVal($dn, ".associatedWith", "") =~ m/\b$d\b/) ||
       ($h->{DEF}  && $h->{DEF}  =~ m/\b$dn\b/) ||
++       ($h && ReadingsVal($d, ".associatedWith", "") =~ m/\b$dn\b/)) {
       push(@dob, $dn);
    }
  }
  $aw = ReadingsVal($d, "associatedWith", ""); # Explicit link
  push(@dob, grep { $defs{$_} } split("[ ,]",$aw)) if($aw);
  return @dob;
}

Habe es bei mir durchgetestet und klappt wie gewünscht. Und zerstört nicht die Ansicht bei entsprechendem Umfang.  :D
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter