FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: justme1968 am 27 Dezember 2013, 13:46:56

Titel: patch zum sortieren der raum links
Beitrag von: justme1968 am 27 Dezember 2013, 13:46:56
anbei ein kleiner patch der es erlaubt die links zu den räumen auf der linken seite zu sortieren.

attr WEB sortRooms DG OG EG Keller

sortRooms gibt die reihenfolge der räume vor, alles was nicht in der liste auftaucht wird wie gehabt alphabetisch sortiert und nach den in der liste definierten eingefügt.

noch schöner wäre es wenn man räumen (und gruppen) auch attribute verpassen könnte. dann könnte man dort auch mit sortby arbeiten und z.b. auch einen alias vergeben der dann angezeigt wird und so z.b. auch einrücken.

gruss
  andre
Titel: Antw:patch zum sortieren der raum links
Beitrag von: Loredo am 27 Dezember 2013, 14:04:36
Super!  :-*


Bin dafür das ins SVN zu übernehmen.
Natürlich wäre etwas analog zu sortby nochmal deutlich schöner  ;)
Titel: Antw:patch zum sortieren der raum links
Beitrag von: hexenmeister am 27 Dezember 2013, 14:12:18
Ich schliesse mich an, super Sache!
Dann könnte ich endlich die lästigen Nummers aus den Room-Namen wegwerfen.  8)
Mit dem Attribut an Räumen wäre das natürlich sauberer, wenn es denn diese Objekte gäbe...
Titel: Antw:patch zum sortieren der raum links
Beitrag von: rudolfkoenig am 27 Dezember 2013, 15:12:10
Habs eingecheckt.
Titel: Antw:patch zum sortieren der raum links
Beitrag von: justme1968 am 27 Dezember 2013, 15:55:31
danke für das schnelle einchecken.

in dem patch oben fehlt noch eine zeile damit es auch für mehr als 9 räume funktioniert.

gruss
  andre
Titel: Antw:patch zum sortieren der raum links
Beitrag von: Loredo am 27 Dezember 2013, 16:31:34
Lässt sich das auch noch auf die Gruppen erweitern?
Titel: Antw:patch zum sortieren der raum links
Beitrag von: rudolfkoenig am 27 Dezember 2013, 17:10:08
Auch eingecheckt.
Titel: Antw:patch zum sortieren der raum links
Beitrag von: hexenmeister am 27 Dezember 2013, 22:09:23
Funktioniert gut, danke!

Gibt es eigentlich eine Regel für Listen, ob diese Space- oer Komma-separiert werden?

Titel: Antw:patch zum sortieren der raum links
Beitrag von: hexenmeister am 28 Dezember 2013, 16:50:06
Was mir jetzt noch aufgefallen ist: Wenn im Raumnamen Klammer verwendet werden (runde oder eckige, geschweifte jedoch nicht), dann wird dieser Raum immer unten einsortiert, mit oder ohne sortRooms.
Titel: Antw:patch zum sortieren der raum links
Beitrag von: justme1968 am 28 Dezember 2013, 16:51:23
das liegt daran das zum suchen eine regex verwendet wird. wenn du in der liste die klammer durch einen . ersetzt sollte es gehen.

gruss
  andre
Titel: Antw:patch zum sortieren der raum links
Beitrag von: hexenmeister am 28 Dezember 2013, 18:50:39
danke, das leuchtet ein, hilft auch ;)
Titel: Antw:patch zum sortieren der raum links
Beitrag von: Martin Fischer am 12 Januar 2014, 18:37:32
hallo andre,

vorweg: sehr gute idee. das fehlte schon lange und scheinbar ist da keiner drauf gekommen ;-)

ich habe das heute mal getestet. da ich zur zeit (schon seit längerem) sowohl privat als auch beruflich sehr stark eingebunden bin, finde ich keine zeit das ggf. selber zu ändern. daher hier mal ein feedback, bzw. eine anregung:

als ich das attribut zum testen gesetzt hatte, mussten ich feststellen, dass es bei mir nicht so funktioniert wie es gedacht ist. das liegt daran, das alle meine räume leerzeichen enthalten. also z.b. "DG Speicher", "EG Esszimmer", "EG Wohnzimmer", "KG Keller 1", "KG "Keller 2", "OG Wohnzimmer", "OG Flur", etc. um nur mal ein paar räume aufzuzählen (ings. > 20 räume, bzw. zonen wie z.b. "GR Hof", "GR Garten", usw).

anfangs hatte ich das attribut so verstanden, das ein "DG OG EG KG" usw. auf obige räume "greifen" müsste.

ein kurzer blick in den quellcode erklärt warum das nicht funktioniert:
my ($index) = grep { $arr->[$_] =~ /^$v$/ } 0..$#$arr;

ein vorschlag von mir:
my ($index) = grep { $v =~ /^$arr->[$_]/ } 0..$#$arr;
würde dafür sorgen, dass das regexp aus "sortRooms" (anders) greift. man hätte somit neben deinem beispiel "DG OG EG KG" auch nach "A S Haus DG OG EG KG" sortieren zu lassen. somit würden alle räume die mit "A", wie "AUTOCREATE" oder "AlarmControlUnit" und räume die mit "S" wie "Server" gefolgt von "Haus" und dann alle räume die mit "DG", "OG", "EG, "KG" gefolgt von der standardsortierung (%FW_rooms) gelistet werden.

allerdings bestünde bei obiger änderung noch das problem der sortierung innerhalb des jeweiigen regexp, also z.b. "OG Wohnzimmer", "OG Esszimmer", "OG Flur", etc. würde zwar richtig in der reihenfolge von "A S Haus DG OG EG KG" sortiert werden, aber innerhalb der "OG"-räume eben nicht.

hier müsste man nochmal an den "compare" dran.

meinungen dazu?

viele grüße
martin

p.s.: bitte keine diskussion lostreten ala "räume mit leerzeichen" sind problematisch. ;-)
Titel: Antw:patch zum sortieren der raum links
Beitrag von: justme1968 am 12 Januar 2014, 18:55:39
wenn du die leerzeichen jeweils mit . angibst sollte es auch in der aktuellen version gehen. also:attr WEB sortRooms DG.Speicher EG.Esszimmer EG.Wohnzimmer

da auch bei der von dir vorgeschlagenen version das problem mit der sortierung innerhalb jeder regexp gibt es glaube ich keinen wirklichen vorteil. wenn man die sortierung genau vorgeben möchte muss die vorgabe eindeutig genug sein. wenn dir die vorgabe auf stockwerk ebene reicht geht aber mit der aktuellen version auch: attr WEB sortRooms DG.* OG.* EG.*natürlich mit dem gleichen fehlenden sortierung auf der zweiten ebene.

die eigentlich 'richtige' und komplette lösung ist meiner meinung nach immer noch attribute auch für räume und gruppen zu haben. dann könnte man wie bei den devices auch ein sortBy verwenden und es würde noch einige andere raum und gruppen abhängigen konfigurationen erlauben.

gruss
  andre
Titel: Antw:patch zum sortieren der raum links
Beitrag von: Martin Fischer am 12 Januar 2014, 19:11:58
Zitat von: justme1968 am 12 Januar 2014, 18:55:39
attr WEB sortRooms DG.* OG.* EG.*
es geht nicht. zumindest nicht bei mir. du kannst es gerne nachstellen.

Zitat von: justme1968 am 12 Januar 2014, 18:55:39
wenn du die leerzeichen jeweils mit . angibst sollte es auch in der aktuellen version gehen. also:attr WEB sortRooms DG.Speicher EG.Esszimmer EG.Wohnzimmer
das ist mir klar und das habe ich auch nicht in frage gestellt.

ich für meinen teil halte meine "anregung" für praktikabler, da man dann nicht eine auflistung von (in meinem fall) >20 räumen als attribut angeben muss. ABER: eine "gute" und eine "bessere" lösung gibt es in diesem falle nicht und sollte es auch nicht darstellen. wie ich bereits schrieb sollte es ein feedback, bzw. eine anregung sein.

gruß
martin
Titel: Antw:patch zum sortieren der raum links
Beitrag von: justme1968 am 12 Januar 2014, 20:08:28
hallo martin,

du hast recht. das geht natürlich nicht. ich hatte noch meine ersten versuche im kopf. da war das in der von dir vorgeschlagenen reihenfolge. ich weiss gar nicht mehr warum ich es dann rumgedreht hatte. ich hab nicht aufpasst..

es sollte also wirklich bessermy ($index) = grep { $v =~ /^$arr->[$_]/ } 0..$#$arr;odermy ($index) = grep { $v =~ /^$arr->[$_]$/ } 0..$#$arr;sein. das erste spart zwei zeichen das zweite wäre glaube ich mehr fhem konform.

die komplette version könnte so aussehen:
sub
FW_roomIdx(\@$)
{
  my ($arr,$v) = @_;
  my ($index) = grep { $v =~ /^$arr->[$_]$/ } 0..$#$arr;

  if( !defined($index) ) {
    $index = 9999;
  } else {
    $index = sprintf( "%03i", $index );
  }

  return "$index-$v";
}

damit wird dann auch innerhalb jeder gruppe die auf den gleichen index sortiert wird automatisch alphabetisch sortiert.

das 'richtig' war weder kritik noch abwertung deines vorschlags. sondern bezog sich auf den anfang des threads ganz oben und den wunsch auch gruppen zu sortieren. das ist inzwischen schon ein paar mal aufgetaucht.

gruss
  andre
Titel: Antw:patch zum sortieren der raum links
Beitrag von: rudolfkoenig am 13 Januar 2014, 07:27:57
Wenn ich was einchecken soll, bitte als solches sagen.
Titel: Antw:patch zum sortieren der raum links
Beitrag von: Martin Fischer am 13 Januar 2014, 12:58:30
Zitat von: justme1968 am 12 Januar 2014, 20:08:28
die komplette version könnte so aussehen:
sub
FW_roomIdx(\@$)
{
  my ($arr,$v) = @_;
  my ($index) = grep { $v =~ /^$arr->[$_]$/ } 0..$#$arr;

  if( !defined($index) ) {
    $index = 9999;
  } else {
    $index = sprintf( "%03i", $index );
  }

  return "$index-$v";
}

damit wird dann auch innerhalb jeder gruppe die auf den gleichen index sortiert wird automatisch alphabetisch sortiert.

works as designed ;-)
attr WEB.DEFAULT sortRooms A.* Haus GR.* DG.* OG.* Eg.* KG.*

danke!

Zitat
das 'richtig' war weder kritik noch abwertung deines vorschlags. sondern bezog sich auf den anfang des threads ganz oben und den wunsch auch gruppen zu sortieren. das ist inzwischen schon ein paar mal aufgetaucht.

keine sorge! ich habe das schon nicht falsch verstanden ;-)

@rudi:
aus meiner sicht kann die korrektur rein. aber andre soll sein go geben. ist ja schliesslich sein "werk" ;-)
du kannst es dann gerne einchecken oder aber ich übernehme das.

gruß
martin
Titel: Antw:patch zum sortieren der raum links
Beitrag von: justme1968 am 13 Januar 2014, 13:41:10
auch von mir aus kann es eingecheckt werten.

gruss
  andre
Titel: Antw:patch zum sortieren der raum links
Beitrag von: rudolfkoenig am 13 Januar 2014, 15:51:03
Habs eingecheckt.
Hab was gegen "Fremd-Einchecken", da ich immer einen als Verantwortlichen haben will.