Wunsch: erweiterung der Optionen für Command "list"

Begonnen von dirk.k, 03 Januar 2020, 17:41:58

Vorheriges Thema - Nächstes Thema

dirk.k

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



 

CoolTux

Das kannst Du doch alles mittels Perl selber regeln. Je nach Anforderung statt list devspec2array verwenden und filtern.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

dirk.k

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;"

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

dirk.k

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?

CoolTux

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  :)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

dirk.k

deutlich eleganter ... !
Das meiste verstehe ich auch.
Nur was bewirkt das $@ in "sub myList($@)"
Danke

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net