Patch 01_FHEMWEB: sort groups by column spec

Begonnen von Happy Fhem User, 04 Mai 2014, 11:09:59

Vorheriges Thema - Nächstes Thema

Happy Fhem User

Weil ich gerade Oberflächen-Spielereien mache, bin ich darüber gestolpert, dass sich die Groups nicht innerhalb einer Zeile sortieren lassen. Mittels dem Attribut "column" in der Fhemweb-Instanz kann man schön die Gruppen nacheinander sortieren, aber halt nicht in der selben "Zeile".

Hier der Patch gegen die frische FHEMWEB aus dem SVN der diese Sortierung mit berücksichtigt:


--- 01_FHEMWEB.pm 2014-05-04 11:00:13.990874429 +0200
+++ patched/01_FHEMWEB.pm 2014-05-04 11:02:13.437675801 +0200
@@ -1232,7 +1232,7 @@
     FW_pO "<td><table class=\"column tblcol_$col\">" if($maxc != -1);

     # iterate over the distinct groups 
-    foreach my $g (sort keys %group) {
+    foreach my $g (sort { ($maxc==-1)?($a cmp $b):( ($columns->{$a}?$columns->{$a}:99) <=> ($columns->{$b}?$columns->{$b}:99) ) } keys %group) {

       next if($maxc != -1 && (!$columns->{$g} || $columns->{$g} != $col));



Wäre schön, wenn dieser den Weg in die offizielle Version findet ;-)

mi.ke

mal ne Frage dazu . . . .

Ich habs in meine 01_FHEMWEB.pm eingebaut. Und es wird auch sortiert.
Allerdings nicht nach Reihenfolge, sondern . . . eher willkürlich...

Vielleicht hab ich's ja auch falsch verstanden...

attr web column Raumname:gruppe1,Gruppe2,Gruppe3,Gruppe1
ergibt vor dem Patch:
      Gruppe1 
      Gruppe2
      Gruppe3
      gruppe1

Nach dem Patch:
attr web column Raumname:Gruppe1,Gruppe2,Gruppe3,gruppe1
ist die Ausgabe durcheinander.....


Ich hatte gehofft, das die Änderung folgendes bewirken würde.
attr web column Raumname:gruppe1,Gruppe2,Gruppe3,Gruppe1
Ausgabe:
          gruppe1
          Gruppe2
          Gruppe3
          Gruppe1

Cheers

FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

rudolfkoenig

Ich warte dann solange, bis hier Klarheit herrscht :)

Happy Fhem User

Mea Culpa, das brauchte doch ein paar Zeilen mehr. Die Sub-Routine "FW_parseColumns" muss geändert werden und leider ändert sich auch das Rückgabe-Format der Funktion (von Hash of Integer zu Hash of Array[0..1] of Integer). Ein Grep nach der Funktion hat keine weiteren Fundstellen bei mir im Sourcecode gefunden - bei mir wird sie also nur lokal in der 01_FHEMWEB genutzt.

Hier der zumindestens bei mir funktionierende Patch:


--- 01_FHEMWEB.pm 2014-05-04 11:00:13.990874429 +0200
+++ patched/01_FHEMWEB.pm 2014-05-06 19:44:29.250754096 +0200
@@ -1232,9 +1232,9 @@
     FW_pO "<td><table class=\"column tblcol_$col\">" if($maxc != -1);

     # iterate over the distinct groups 
-    foreach my $g (sort keys %group) {
+    foreach my $g (sort { ($maxc==-1)?($a cmp $b):( ($columns->{$a}?$columns->{$a}->[0]:99) <=> ($columns->{$b}?$columns->{$b}->[0]:99) ) } keys %group) {

-      next if($maxc != -1 && (!$columns->{$g} || $columns->{$g} != $col));
+      next if($maxc != -1 && (!$columns->{$g} or $columns->{$g}->[1] != $col));

       #################
       # Check if there is a device of this type in the room
@@ -1325,8 +1325,9 @@
     next if($room ne $FW_room);
     $colNo = 1;
     foreach my $groups (split(/\|/,$groupcolumn)) {
+      my $lineNo=1;
       foreach my $group (split(",",$groups)) {
-        $columns{$group} = $colNo;
+        $columns{$group} = [$lineNo,$colNo];
       }
       $colNo++;
     }

KernSani

Hi,

ist zwar alt aber immernoch aktuell... Ich habe den patch gerade ausprobiert (01_FHEMWEB.pm 8058 2015-02-21 19:55:09Z rudolfkoenig ) funktioniert mit einer kleinen Anpassung in der Sub FW_ParseColumns:

   foreach my $groups (split(/\|/,$groupcolumn)) {
+   my $lineNo=1;
      foreach my $group (split(",",$groups)) {
        $group =~ s/%20/ /g; # Forum #33612
-        $columns{$group} = $colNo;
+ $columns{$group} = [$lineNo,$colNo];
+ $lineNo++;
      }
      $colNo++;
    }


Noch lieber wäre mir allerdings eine sortGroups attribut :-)

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Andi291

Hallo zusammen,

habe den Patch auch übernommen. Funktioniert im Prinzip, ABER:

1. Räume mit Leerzeichen werden nicht erkannt (der Workaround mit "Flur.EG" funktioniert leider nicht).
2. Auch Gruppen mit Sonderzeichen werden einfach nicht übernommen. Auch hier helfen keine Wildcards.

Ich habe schon selbst einige Versuche unternommen, kriege das Problem aber nicht gelöst. Kann mir bitte jemand helfen?

Zweite Frage: Hat der Patch Chancen, eingecheckt zu werden?

Loredo

Hi,


inzwischen hat Rudi ja bereits einen Patch für die Nutzung von Leerzeichen in Gruppennamen eingecheckt (einfach Leerzeichen durch %20 ersetzen).
Wie sieht es mit diesem Patch aus, könnten wir den leicht angepasst nun übernehmen, damit auch die Reihenfolge stimmt?




Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

rudolfkoenig

Hab den Patch getestet und eingecheckt.
Weiterhin in der Doku erwaeht, dass man mit diesem Attribut die Gruppen auch dann sortieren kann, wenn man nur eine Spalte hat.

FunkOdyssey


KernSani

Vielen Dank.

Nun wäre es noch schön, wenn auch Leerzeichen in Raumnamen verwendet werden könnten. %20 scheint da keinen Effekt zu haben.

Danke,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Loredo

Danke, Rudi!


@KernSani: Wir sprechen hier ja von der Sortierung der Gruppen durch das Attribut "column" und dort funktioniert %20 für Leerzeichen. Räume sind ein ganz anderes Thema, dafür ist das Attribut sortRooms da. Dort funktionieren keine Leerzeichen. Soweit ich mich erinnere machen Leerzeichen aber auch woanders immer mal Ärger. Glaube deshalb gilt noch immer die Empfehlung keine Leerzeichen in Räumen zu verwenden.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

KernSani

Hi Julian,
ich weiss, das Leerzeichen böae sind, aber Kind, Brunnen usw... Ich meine hier konkret die Verwendung von rooms mit Leerzeichen innerhalb des column attributs. 
SortRooms funktioniert wunderbar mit regex (KG.',EG.',OG.',DG.' sortiert mir meine Räume wunderbar). Sowas in der Art wäre für column auch cool.
Grüße,
Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

rudolfkoenig

Danke fuer den Hinweis auf regexp in sortRooms, habs ganz vergessen, aber jetzt dokumentiert.
Da Regexp fuer column aufwendiger waere, habe ich hier nur %20 durch das Leerzeichen ersetzt, und dokumentiert.

Andi291

Guten Morgen,

danke fürs Einbauen des %20.

Könnten Sie bitte den o.g. Patch auch übernehmen? Ist bei mir seit ein paar Wochen im Einsatz (ohne Probleme). Auch die aktuelle Version in Verbindung mit dem o.g. Patch scheint sauber zu funktionieren.

Wäre eine nette Hilfe :-P

Danke!!

KernSani

Danke Rudi,
%20 funktioniert jetzt auch wunderbar in Räumen. Damit kann ich zumindest auf dem WaF-Web was machen ;-)
Richtig glücklich wäre ich aber glaube ich erst, wenn es ein sortGroups-Attribut gäbe (nach dem Motto: Licht und Rollladen kommen in jedem Raum ganz oben, danach der ganze Rest)

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...