Hallo Allerseits,
Ich wünsche mir, dass das sortby Attribut auch Perl Code auswerten kann.
Grüße
igami
*push*
Baut doch einfach mal einen patch für 01_FHEMWEB.pm und schlagt das im richtigen Unterforum vor.
Die wenigen zu ändernden Stellen sind doch leicht zu finden.
Ich kann es leider nicht.
Bin, was Fhem und Programmieren angeht, noch ein blutiger Anfänger :(
Na dann bist du ja auch noch lange nicht beim Sortieren mit Perl angelangt.
@marvin78: ich hatte mich nicht getraut, das zu schreiben :P
ich sag da mal nix dazu außer: danke für eure Unterstützung *daumenhoch*
wie wäre es damit?
Index: FHEM/01_FHEMWEB.pm
===================================================================
--- FHEM/01_FHEMWEB.pm (Revision 13354)
+++ FHEM/01_FHEMWEB.pm (Arbeitskopie)
@@ -1717,7 +1717,9 @@
if($modules{$defs{$dev}{TYPE}}{FW_atPageEnd}) {
$usuallyAtEnd{$dev} = 1;
if(!AttrVal($dev, "group", undef)) {
- $sortIndex{$dev} = lc(AttrVal($dev,"sortby",FW_alias($dev)));
+ my $i = lc(AttrVal($dev,"sortby",FW_alias($dev)));
+ $i = eval $i if($i =~ m/^{.*}$/s); # Forum #59883
+ $sortIndex{$dev} = $i;
push @atEnds, $dev;
next;
}
@@ -1725,7 +1727,9 @@
next if(!$FW_types{$dev}); # FHEMWEB connection, missed due to caching
foreach my $grp (split(",", AttrVal($dev, "group", $FW_types{$dev}))) {
next if($FW_hiddengroup{$grp});
- $sortIndex{$dev} = lc(AttrVal($dev,"sortby",FW_alias($dev)));
+ my $i = lc(AttrVal($dev,"sortby",FW_alias($dev)));
+ $i = eval $i if($i =~ m/^{.*}$/s); # Forum #59883
+ $sortIndex{$dev} = $i;
$group{$grp}{$dev} = 1;
}
}
- $i = eval $i if($i =~ m/^{.*}$/s); # Forum #59883
+ $i = AnalyzePerlCommand($i); # Forum #59883
Zitat von: betateilchen am 07 Februar 2017, 21:36:26
- $i = eval $i if($i =~ m/^{.*}$/s); # Forum #59883
+ $i = AnalyzePerlCommand($i); # Forum #59883
Warum kann die Überprüfung auf die Spitzen Klammern entfallen? Zudem fordert AnalyzePerlCommand doch zwei Argumente, den client hash und den Befehl.
Zitat von: igami am 08 Februar 2017, 06:00:29
Warum kann die Überprüfung auf die Spitzen Klammern entfallen?
Damit man es in der Anwendung einfacher hat. Es geht außerdem nicht um spitze Klammern, sondern um geschweifte ;)
Zitat von: igami am 08 Februar 2017, 06:00:29
Zudem fordert AnalyzePerlCommand doch zwei Argumente, den client hash und den Befehl.
Stimmt, mein Fehler. Also so:
+ $i = AnalyzePerlCommand(undef,$i); # Forum #59883
Anwendungsbeispiele findest Du z.B. in 02_RSS.pm und 55_InfoPanel.pm, wenn es um die Auswertung von bestimmten Layoutkomponenten geht.
dann also der ganze Patch:
Index: FHEM/01_FHEMWEB.pm
===================================================================
--- FHEM/01_FHEMWEB.pm (Revision 13354)
+++ FHEM/01_FHEMWEB.pm (Arbeitskopie)
@@ -1717,7 +1717,9 @@
if($modules{$defs{$dev}{TYPE}}{FW_atPageEnd}) {
$usuallyAtEnd{$dev} = 1;
if(!AttrVal($dev, "group", undef)) {
- $sortIndex{$dev} = lc(AttrVal($dev,"sortby",FW_alias($dev)));
+ my $i = lc(AttrVal($dev,"sortby",FW_alias($dev)));
+ $i = AnalyzePerlCommand(undef, $i); # Forum #59883
+ $sortIndex{$dev} = $i;
push @atEnds, $dev;
next;
}
@@ -1725,7 +1727,9 @@
next if(!$FW_types{$dev}); # FHEMWEB connection, missed due to caching
foreach my $grp (split(",", AttrVal($dev, "group", $FW_types{$dev}))) {
next if($FW_hiddengroup{$grp});
- $sortIndex{$dev} = lc(AttrVal($dev,"sortby",FW_alias($dev)));
+ my $i = lc(AttrVal($dev,"sortby",FW_alias($dev)));
+ $i = AnalyzePerlCommand(undef, $i); # Forum #59883
+ $sortIndex{$dev} = $i;
$group{$grp}{$dev} = 1;
}
}
Muss ich ja nur noch Rudi darauf aufmerksam machen, oder liest er hier mit?
Die Wunschliste liest er ganz bewusst nicht 8)
Mich würde mal ein konkretes Beispiel interessieren, wofür man die hier gewünschte Erweiterung tatsächlich nutzen kann.
Für Automatiken nutze ich oft ein Tripel aus Dummy für die Parameter, Weekdaytimer um das UZSU Widget auszuwerten und DOIF für die Automatik ansich.
Da ich die devices gerne in der Reihenfolge angezeigt bekommen möchte verwende ich als sortby 100, 110, 120, was in der Übersicht everything jedoch nicht hilfreich ist.
Hmm, aber eigentlich weiß ich gar nicht mehr warum ich das damals für so sinnvoll gehalten habe. Ich hatte den Thread auch total verdrängt :D
Wenn es mir wieder einfällt werde ich es mitteilen. Es hatte irgendwas mit meinem archetype Modul zu tun.
ZitatWenn es mir wieder einfällt werde ich es mitteilen.
Ok, danach werde ich den Patch anschauen.
Nicht verwendeten Code will ich eher entfernen, und nicht einbauen.
Ich habe eine UDF in der 99_myUtils.pm, die meinen Googlekalender nach Terminen durchsucht.
Es werden 4 Dummies befüllt mit der Anzahl der Tage, wann der Termin wieder eintritt.
Beim Attribut sortby hätte ich gerne per ReadingsVal den Wert ausgelesen, damit danach sortiert wird.
Hab den Patch angeschaut:
- AnalyzePerlCommand wird immer aufgerufen, d.h. der Patch fuehrt in 99.9% aller FHEM-Installationen zu Perl-Fehler. Ausnahme: wenn jemand fuer jedes Geraet ein numerisches sortby oder alias vergeben hat.
- falls das Perl Expression in sortby Grossbuchstaben enthaelt (wie ReadingsVal), dann wird es mit lc() kaputtgemacht
- als erster Parameter wird AnalyzePerlCommand undef uebergegeben, damit wird die Rechtepruefung ausgehebelt.
- falls jemand ein alias mit {} definiert hat, dann wird das alias fuer sortieren ausgefuehrt, bei der Anzeige aber nicht.
- keine Doku
Ich habe jetzt meine Variante eingecheckt: Evaluirt wird nur sortby, und auch nur, wenn es in {} eingeschlossen ist. $NAME wird dabei gesetzt.
Achtung: da es beim Aufbau _jeder_ Raum-Uebersichtsseite das Attribut fuer _alle_ Geraete berechnet wird, kann das Setzen des Attributes bei sehr vielen Geraeten zu merkbaren Performance-Einbussen fuehren.
Zitat von: igami am 08 Februar 2017, 20:10:11
Für Automatiken nutze ich oft ein Tripel aus Dummy für die Parameter, Weekdaytimer um das UZSU Widget auszuwerten und DOIF für die Automatik ansich.
Du weißt dass Du Dummy, UZSU Widget und DOIF (meist) zu einem DOIF zusammenfassen kannst?
Ja, weiß ich, aber ich lasse das UZSU ja durch WeekdayTimer auswerten und das macht dann eben "set <device> einabled" was bei einem DOIF irgendwie blöd wäre. Außerdem hab ihc keine lust alles umzubauen. Es funktioniert ja :)