Auswertung: Probably associated with

Begonnen von JoWiemann, 13 Oktober 2022, 09:23:59

Vorheriges Thema - Nächstes Thema

JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

rudolfkoenig

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

JoWiemann

#2
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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

#3
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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

rudolfkoenig


JoWiemann

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
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM