Sortierung von devspec2array

Begonnen von FHEMAN, 07 Juni 2020, 10:49:50

Vorheriges Thema - Nächstes Thema

FHEMAN

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
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

FHEMAN

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
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB