sortby Perl Code

Begonnen von igami, 30 Oktober 2016, 07:37:51

Vorheriges Thema - Nächstes Thema

igami

Hallo Allerseits,

Ich wünsche mir, dass das sortby Attribut auch Perl Code auswerten kann.

Grüße
igami
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Lazgar


betateilchen

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.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Lazgar

Ich kann es leider nicht.
Bin, was Fhem und Programmieren angeht, noch ein blutiger Anfänger :(

marvin78

Na dann bist du ja auch noch lange nicht beim Sortieren mit Perl angelangt.

betateilchen

@marvin78: ich hatte mich nicht getraut, das zu schreiben  :P
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Lazgar

ich sag da mal nix dazu außer: danke für eure Unterstützung *daumenhoch*

igami

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;
     }
   }
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

betateilchen


- $i = eval $i if($i =~ m/^{.*}$/s); # Forum #59883
+ $i = AnalyzePerlCommand($i); # Forum #59883
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

igami

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?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

betateilchen

Die Wunschliste liest er ganz bewusst nicht  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Mich würde mal ein konkretes Beispiel interessieren, wofür man die hier gewünschte Erweiterung tatsächlich nutzen kann.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

rudolfkoenig

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.

Lazgar

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.

rudolfkoenig

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.


JoeALLb

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?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

igami

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 :)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED