FHEM Forum

FHEM => Sonstiges => Thema gestartet von: JoWiemann am 13 Oktober 2022, 09:23:59

Titel: Auswertung: Probably associated with
Beitrag von: JoWiemann am 13 Oktober 2022, 09:23:59
Hallo,

ich habe weder bei list noch bei JsonList2 die Möglichkeit gefunden "Probably associated with" ausgeben zu können. Bevor ich anfange etwas zu programmieren, hat von Euch schonmal einer etwas gebastelt?

Danke und Grüße

Jörg
Titel: Antw:Auswertung: Probably associated with
Beitrag von: rudolfkoenig am 13 Oktober 2022, 09:50:47
Die perl Funktion heisst getPawList($device).
list liefert das mit der -R Option
In der Doku ist das erwaehnt, ganz unten: https://fhem.de/commandref_modular.html#list
Titel: Antw:Auswertung: Probably associated with
Beitrag von: JoWiemann am 13 Oktober 2022, 10:53:31
Hallo Rudi,

danke für den Hinweis. Habe aber dann doch mal etwas für meine 99_myUtils.pm gebastelt.

Works for me:

#---------------------------------------------------------------------------
# all devices with their associated devices of a given devspec
#---------------------------------------------------------------------------
sub MakeAssociatedDiagramm($) {
  my ($devspec) = @_;
  my @devlist = devspec2array($devspec);
  my $dev = "";
  my $alias = "";
  my $detail = "Associated list:\n";
 
  if (@devlist > 0) {
    foreach (sort @devlist) {
      $dev = $_;
      my @obj = getPawList($dev);
      if (@obj > 0) {
        $detail .= "$dev\n";
        foreach (sort @obj) {
      $alias = AttrVal($_, "alias", $_);
      $detail .= "   |---- ";
      $detail .= $alias eq $_ ? $_ : $alias;
      $detail .= "\n";
    }
    $detail .= "\n";
  }
}
return $detail;
  }
}


Hier noch mit Rekursion bis maximale Tiefe 4

#---------------------------------------------------------------------------
# all devices with their associated devices of a given devspec
# MakeAssociatedDiagramm(<devspec>, [deeps of recursion <1..4>])
#---------------------------------------------------------------------------
sub MakeAssociatedDiagramm($;$;$) {
  my ($devspec, $rdeeps, $offset) = @_;
 
  $rdeeps = 1 if(!defined($rdeeps));
  $rdeeps = 4 if($rdeeps > 4);
  $offset = "" if(!defined($offset));
  return "" if($rdeeps == 0);
 
  my @devlist = devspec2array($devspec);
  my $dev = "";
  my $alias = "";
  my $detail = "";
  $detail = "Associated list:\n" if ($offset eq "");
 
  if (@devlist > 0) {
    $rdeeps -= 1;
    foreach (sort @devlist) {
      $dev = $_;
      $detail .= "$dev\n" if ($offset eq "");
      my @obj = getPawList($dev);
      if (@obj > 0) {
        foreach (sort @obj) {
      $alias = AttrVal($_, "alias", $_);
      $detail .= $offset;
  $detail .= "   |---- ";
      $detail .= $alias eq $_ ? $_ : $alias;
      $detail .= "\n";
      $detail .= MakeAssociatedDiagramm($_, $rdeeps, $offset . "         ");
    }
    $detail .= "\n";
  } else {
    $detail .= "   |---- \n";
  }
}
return $detail;
  }
}


Sieht dann z.B. so aus:

Associated list:
TT_HM_Badezimmer
   |---- FC_HM_ACT_ON
            |---- Alarmanlage_Status
                     |---- FC_HM_ACT_ON
                              |---- Alarmanlage_Status
                              |---- BlinkSys
                              |---- BlinkSys_Dummy
                              |---- FC_HM_Alarmanlage_Ausloesung
                              |---- FC_HM_Alarmanlage_Status
                              |---- FC_HM_HZ_Wintergarten
                              |---- FC_HM_Nachtspeicher
                              |---- RPi_CCU
                              |---- Sound_Alarm_An
                              |---- Sound_Alarm_Aus
                              |---- Sound_Sirene
                              |---- TT_HM_Badezimmer
                              |---- act_TK_HM_GH

                     |---- Treppenhaus_On_Morgens
                              |---- Alarmanlage_Status
                              |---- Beleuchtung_Status
                              |---- BlinkSys
                              |---- BlinkSys_Dummy
                              |---- Lichterbaum
                              |---- Dachgeschoss
                              |---- Krippe_Duino
                              |---- LS_HM_OUTDOOR
                              |---- OBI_01
                              |---- Tannenbaum_Duino
                              |---- Treppenhaus
                              |---- irblaster
Titel: Antw:Auswertung: Probably associated with
Beitrag von: JoWiemann am 13 Oktober 2022, 16:33:39
Hier meine Lösung für eine JSON Ausgabe:


#---------------------------------------------------------------------------
# all devices with their associated devices of a given devspec
# MakeAssociatedJson(<devspec>, [deeps of recursion <1..4>])
#---------------------------------------------------------------------------
sub MakeAssociatedJSON($;$;$) {
   my ($devspec, $rdeeps, $offset) = @_;
 
   $rdeeps = 1 if(!defined($rdeeps));
   $rdeeps = 4 if($rdeeps > 4);
   $offset = "" if(!defined($offset));
   return "" if($rdeeps == 0);
 
   my @devlist = devspec2array($devspec);
   my $dev = "";
   my $alias = "";
   my $detail = "";
 
   if (@devlist > 0) {
      $rdeeps -= 1;
      $detail = '{"Fhem": [' if ($offset eq "");  # JSON start
      foreach (sort @devlist) {
         $dev = $_;
         $detail .= '{"device": "' . $dev . '"';
         my @obj = getPawList($dev);
         if (@obj > 0) {
            $detail .= ',"associated": [';
            foreach (sort @obj) {
       $alias = AttrVal($_, "alias", $_);
       $detail .= '{"device": "';
       $detail .= $alias eq $_ ? $_ : $alias;
       $detail .= '"';
       if ($rdeeps > 0) {
          $detail .= ',"associated": [';
          $detail .= MakeAssociatedJSON($_, $rdeeps, "off");
          $detail .= ']';
       }
       $detail .= "},";
            }
            $detail = substr($detail, 0, length($detail) - 1);
            $detail .= "]";
         }
         $detail .= "},"
      }
      $detail = substr($detail, 0, length($detail) - 1);
      $detail .= "]}" if ($offset eq "");  # JSON start
      return $detail;
   }
}


Grüße Jörg
Titel: Antw:Auswertung: Probably associated with
Beitrag von: rudolfkoenig am 13 Oktober 2022, 17:15:47
Das gleiche Thema wird auch von "weblink associatedWith" behandelt, siehe https://forum.fhem.de/index.php/topic,114960.msg1125012.html#msg1125012
Titel: Antw:Auswertung: Probably associated with
Beitrag von: JoWiemann am 13 Oktober 2022, 17:48:49
Zitat von: rudolfkoenig am 13 Oktober 2022, 17:15:47
Das gleiche Thema wird auch von "weblink associatedWith" behandelt, siehe

Hallo Rudi,
danke für den Hinweis. Da sucht man mit allen möglichen "associated" Variationen und dieser Thread wird nicht gefunden. Eine schöne Lösung. Aber Gehirn jogging tut auch gut.

Grüße Jörg