FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: DS_Starter am 18 August 2019, 08:22:17

Titel: Frage zu "Probably associated with"
Beitrag von: DS_Starter 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
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: rudolfkoenig am 18 August 2019, 10:51:05
ZitatNun 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.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter am 18 August 2019, 11:49:03
Danke Rudi,

ZitatWenn 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
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: rudolfkoenig am 18 August 2019, 12:25:46
Wenn das in mehreren Modulen benoetigt wird, dann baue ich das ein.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter 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.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: rudolfkoenig am 24 August 2019, 14:51:41
Zitatallerdings 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.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter 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
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: herrmannj am 24 August 2019, 16:06:31
ich bin mal direkt der Auffassung dass dies kein Reading sondern (bestenfalls) ein internal ist.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: rudolfkoenig am 24 August 2019, 17:46:15
ZitatSolltest 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.

Zitatich 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).
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter am 25 August 2019, 09:47:55
Guten Morgen Rudi,

ZitatPatch 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
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: rudolfkoenig 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?
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter am 25 August 2019, 11:58:41
ZitatWas 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.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: rudolfkoenig am 25 August 2019, 12:08:16
ZitatSetzen 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.

ZitatWürdest du denn mitgehen, ein verstecktes ".associatedWith" mit zu rüfen ?
Soweit ich sehe, ist damit dein Ziel:
ZitatIch 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.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter am 25 August 2019, 12:47:00
Zitatdamit 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 ...
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter 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
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: rudolfkoenig am 25 August 2019, 16:47:14
ZitatUnd zerstört nicht die Ansicht bei entsprechendem Umfang.
Waere es schlimm, wenn es tut?
Will mehrfache Definitionen, soweit moeglich, vermeiden.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter am 25 August 2019, 17:01:56
ZitatWaere es schlimm, wenn es tut?
Naja, kann wirklich sehr umfangreich werden je nach der Selektionsbedingung des Users die nicht vorauszusehen sind.
Ein "schlimm" ist ja wie immer auch Ansichtssache des Users und abhängig von seinen persönlichen Einstellungen, Nutzungsverhalten und Ansichten.
Dann kommt dann wohl recht schnell die Frage ob man es denn nicht verstecken könnte.

Ich hatte in meinem Vorschlag extra das versteckte Reading genauso genannt wie das "öffentliche". Damit wäre m.M. die Assoziation zum Verwendungszweck gewahrt.
Ich verstehe deine Ansicht, finde es andererseits auch nicht so dramatisch das .associatedWith zusätzlich zu verwenden, da ein Blick in die Sub ja genügt um die Möglichkeiten zu erkennen.

Würde mich wirklich freuen, wenn du die Erweiterung wohlwollend übernehmen könntest.  :)

Titel: Antw:Frage zu "Probably associated with"
Beitrag von: rudolfkoenig am 27 August 2019, 09:47:47
Habs mit leichter Aenderung uebernommen, bitte pruefen.
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter am 27 August 2019, 09:54:30
Herzlichen Dank Rudi.
Mache ich heute Abend wenn ich wieder zu Hause bin.

Grüße,
Heiko
Titel: Antw:Frage zu "Probably associated with"
Beitrag von: DS_Starter am 27 August 2019, 18:19:00
Habe es getestet und funktioniert wunderbar. Jetzt kann ich die Assoziationen implementieren.
Danke !

Grüße,
Heiko