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
Das kannst Du doch alles mittels Perl selber regeln. Je nach Anforderung statt list devspec2array verwenden und filtern.
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;"
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
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?
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 :)
deutlich eleganter ... !
Das meiste verstehe ich auch.
Nur was bewirkt das $@ in "sub myList($@)"
Danke
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.