FHEM Forum

FHEM => Frontends => FHEMWEB => Thema gestartet von: dirk.k am 03 Januar 2020, 17:41:58

Titel: Wunsch: erweiterung der Optionen für Command "list"
Beitrag von: dirk.k am 03 Januar 2020, 17:41:58
Hallo,
besteht die Möglichkeit das Command "list" mit ein paar Optionen zu erweitern?
Ich verwende es häufig, um per telegram listen von readings zu versenden.
Dort wäre es schön, den Alias hinzufügen zu können.
Sprechende Gerätenamen wären sicher toll, aber der Alias ist in einer lebenden Umgebung flexibler. 
Der zweite Wunsch wäre eine Abschaltmöglichkeit für den reading-Timestamp. Die Ausgabe auf Mobilen Geräten ist sonst oft zu lang.
Hier ein stark gekürztes Beispiel:
list  .* activ
SD_WS07_TH_3         2020-01-02 12:03:44    1
SD_WS_38_T_1         2020-01-02 12:03:44    dead
SD_WS_38_T_2         2020-01-02 12:03:44    dead
WeMos_S2             2020-01-02 12:03:44    1
sysmonPi             2020-01-02 12:03:44    1

Wünschenswert wäre z.B.: "Th-Kühlschrank dead" oder  "SD_WS_38_T_2 (Th-Kühlschrank) dead"

Übrigens...
die Diskussion wurde vor langer Zeit hier mal begonnen und ich habe als ich mich dranhängte nicht darauf geachtet, dass es der komplett falsche Bereich ist...
FHEM Forum » CUL - Entwicklung » Wunschliste »  "list" erweitern, Darstellung  Name+Alias nebeneinander"
https://forum.fhem.de/index.php/topic,14537.msg92650.html



 
Titel: Antw:Wunsch: erweiterung der Optionen für Command "list"
Beitrag von: CoolTux am 03 Januar 2020, 17:46:53
Das kannst Du doch alles mittels Perl selber regeln. Je nach Anforderung statt list devspec2array verwenden und filtern.
Titel: Antw:Wunsch: erweiterung der Optionen für Command "list"
Beitrag von: dirk.k am 03 Januar 2020, 19:28:17
devspec2array scheint ein gewaltiges Tool zu sein.
Aber meine Perl Kenntnisse reichen nicht, um es sinnvoll einzusetzen.
Verwende ich {devspec2array(".*:FILTER=activ=dead|1")} bekomme ich 4 angezeigt, was vielversprechend ist, da es 4 Devices trifft.
Das kann ich in ein array tun glaube ich ... {@myArray = devspec2array(".*:FILTER=activ=dead|1")}
und dann?
wie bekomme ich aus dem Array mit allen details der 4 geräte eine Liste, welche den Gerätenamen/Alias und den wert eines readings enthält eine Liste, welche ich mit telegram abrufen/versenden kann?
Derzeit habe ich z.B. einen Favoriten im telebot "/[liste ACTIV-STATUS ] = list .* activ;"
Titel: Antw:Wunsch: erweiterung der Optionen für Command "list"
Beitrag von: CoolTux am 03 Januar 2020, 19:33:25
Du hast die Namen der Devices welche Deinem Filter betrifft.
Nun kannst Du mit ReadingsVal bestimmte Readings abfragen, also den Wert für ein Reading oder mit AttrVal Attribute abfragen. Zum Beispiel alias
Titel: Antw:Wunsch: erweiterung der Optionen für Command "list"
Beitrag von: dirk.k am 03 Januar 2020, 21:46:17
Danke für die Tips.
Hier die laufende Variante. Der Einsatz der Übergabe-Variablen kommt später, diese sind vorerst Platzhalter.
sub myList($$$$$)
{
   my $reading="";
   my $returnValue="";
   my $alias;
   my @myArray = devspec2array(".*:FILTER=activ=dead|1");
foreach my $device (@myArray) {
$reading = ReadingsVal($device,"activ","nA");
$alias = AttrVal($device,"alias","kein Alias");
$returnValue=$returnValue. $device . " (" . $alias . ") -- " .$reading."\n" ; 
    };
    return $returnValue;
}


Das kann ich jetzt als "myList" in FHEM verwenden.
defmod ca_myList cmdalias myList .* AS {myList("activ","activ","activ","activ","activ")}

Verbesserungsvorschläge?
Titel: Antw:Wunsch: erweiterung der Optionen für Command "list"
Beitrag von: CoolTux am 04 Januar 2020, 04:05:46
sub myList($@)
{
   my $reading="";
   my $returnValue="";
   my $alias;

foreach my $device (devspec2array(".*:FILTER=activ=dead|1")) {
$reading = ReadingsVal($device,"activ","nA");
$alias = AttrVal($device,"alias",$device);
$returnValue .= $device . " (" . $alias . ") -- " .$reading."\n" ;
    };
    return $returnValue;
}


Ohne Test.
Funktional nicht besser, aber vielleicht schöner  :)
Titel: Antw:Wunsch: erweiterung der Optionen für Command "list"
Beitrag von: dirk.k am 04 Januar 2020, 17:18:44
deutlich eleganter ... !
Das meiste verstehe ich auch.
Nur was bewirkt das $@ in "sub myList($@)"
Danke
Titel: Antw:Wunsch: erweiterung der Optionen für Command "list"
Beitrag von: CoolTux am 04 Januar 2020, 17:32:15
Das selbe wie Deine $$$$$
Nur das nur der erste Wert als Skalar kommt und der Rest als Array. Sieht besser aus und es ist nicht schlimm wenn Du weniger oder mehr Werte als Übergabe machst.