FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: FHEMAN am 07 Juni 2020, 10:49:50

Titel: Sortierung von devspec2array
Beitrag von: FHEMAN am 07 Juni 2020, 10:49:50
Hallo,

gibt es evtl. eine fertige Möglichkeit, ein via devspec2array erzeugtes Array nach bspw. einem Attributwert zu sortieren?
Mir schwebt so etwas in der Art vor:
Zitat
my @Kreise = devspec2array("NAME=Schaltaktor.Bewaesserung.*Kreis.*:FILTER=a:AutoWatering!=0:SORTBY=a:WateringOrder);
In dem Beispiel habe ich eine Reihenfolge im Attribut WateringOrder hinterlegt. Sortiert wird aber nur noch Device Name, egal wie ich filtere.
Übersehe ich hier etwas? Hat evtl. jemand einen Perl Codeschnipsel?

Danke für eure Tipps!

Ronny
Titel: Antw:Sortierung von devspec2array
Beitrag von: FHEMAN am 07 Juni 2020, 14:28:49
Ich habe mir jetzt folgende Krücke gebastelt:

my @kreise = devspec2array("NAME=Schaltaktor.Bewaesserung.*Kreis.*:FILTER=AutoWatering!=0");
@kreise = sortArrayByAttr(\@kreise, "WateringOrder");


sub sortArrayByAttr($$) {
my ($arrName,$attr)  = @_;
my @arr = @$arrName;
my @tmpArr;
foreach my $d (@arr) {
my $o=AttrVal($d,$attr,$d);
push (@tmpArr,[$d,$o]);
}
if (@tmpArr > 0) {
my @tmpArr_sort=sort{$a->[1] cmp $b->[1]}@tmpArr;
return map $_->[0], @tmpArr_sort;
} else {
return @arr;
}
}


Wenn es OTB etwas eleganteres gibt, freue ich mich über Vorschläge.

Viele Grüße
Ronny