FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: Phill am 23 Oktober 2018, 09:36:10

Titel: Nochmal Gruppieren von Attributen
Beitrag von: Phill am 23 Oktober 2018, 09:36:10
Vorheriger Thread hier (https://forum.fhem.de/index.php/topic,83209.0.html)


Bitte mal testen. Man kann jederzeit wieder zurück zur originalen FHEM Version.
fhem.pl und FHEM/01_FHEMWEB.pm in fhem Verziechnis kopieren und neu starten.


Hallo,

Eigentlich wollte ich ja nur mein FHEM auf 5.9 updaten, aber die Attributgruppen wollte ich dann doch behalten.
Deswegen habe ich den Patch an die Neue Version angepasst und wollte ihn hier nochmal zur Diskussion stellen.

Ich fasse das ganze mal etwas zusammen.

Hintergrund war die Überlegung die FHEM Attribute zu Kategorisieren um eine bessere Übersicht zu erlangen. Auf Grundlage des Patches von justme1968 hatte ich die Attribute in Gruppen eingeteilt, die dann von FHEMWEB gegliedert angezeigt werden.
Das Attribut "userattr" im Device und im Device "global" sind dahingegehend befreit, dass es ausschließlich dem Anwender vorbehalten ist. Sprich "FHEMWEB" definiert seine globalen Attribute nicht mehr in userattr von "global" und structure nicht mehr in userattr des Devices.
Außerdem sind ein paar kleinere Bugfixes gemacht.
Der Arbeitsaufwand für Modulentwickler ist gleich Null, da die vorhanden Funktionen nur um optionale Parameter erweitert wurden. Es kann also alles weiter wie gewohnt genutzt werden.

Der Patch hat ganz klar für die Profis unter euch weniger Mehrwert und ist eher für den Normalanwender und Anfänger gedacht, der Ordnung in die Flut von Attribute gebracht bekommt.

Die Gruppen die aus meiner Sicht sinnvoll sind: (das wording und die Sinnhaftigkeit genauso wie die Reihenfolge mit der sie angezeigt werden ist wohl noch zu diskutieren)


Das ganze ist vollständig Abwärtskompatibiliät.

Erläuterungen zu dem Patch

Neuer globaler HASH: %AttrGroup
Enthält die Deklaration der Attributkategorien. Wenn die Kategorien geändert werden sollen dann wird dieser Hash geändert.

%AttrGroup = (
  "userlocal"=> { NAME=>{EN=>"Custom", DE=>"Eigene"},
    ORDER=>10,
    FN=>sub {
      return unless $_[0]{NAME};
      $attr{$_[0]{NAME}}{userattr};
    } 
    },
[...]



Definition AttrObj: Ein Hash mit den Attributeigenschaften. Grundsätzlich als Array vorhanden.
Bisher die scalare Attributdefinition

beispielattr:1,2,3,4,5 anderes:textfield-long

Neu AttrObj:

[{ATTRNAME=>"beispielattr", SETTING="1,2,3,4,5", GROUP="userlocal"},
{ATTRNAME=>"anderes", SETTING="textfield-long", GROUP="userlocal"}]


Modulauthoren können Ihre Attribute selbst gruppieren
Veranschaulicht beim Device global wofür diese Funktion Sinnvoll wäre siehe Anhang global_device.jpg
Mein umgesetzter Vorschlag.
Statts wie gewohnt die $hash->{AttrList} zu füllen wird ein Array in $hash->{AttrGroup} folgendermaßen angelegt:
  @{$hash->{AttrGroup}} = (
{NAME=>"Attributgruppenname ohne sprachliche unterschiede",
AttrList=>"attr1:1,2,3 attr2 attr3"},
{NAME=>{EN=>"Group 2",DE=>"Gruppe 2"},
AttrList=>"attrb1:ja,nein attrb2 attrb3"},
{NAME=>{EN=>"THREE",DE=>"DREI"},,
AttrList=>"attrc1 attrc2 attrc3"},
);
oder
  push($hash->{AttrGroup}, {NAME=>"Attributgruppenname", AttrList=>"q w e"});

 
Will man während der Laufzeit die Attribute des Moduls eines Devices ändern, geht das weiterhin wie bisher mit "setDevAttrList" nur kann jetzt auch der Array wie oben übergeben werden.

Neue Funktionen:

sub getAttrObjByGroup($;$);
Liefert alle Attribute der angegebenen Gruppe des optionalen Device

sub getAttrObjByString($);
konvertiert die scalare AttrList in AttrObj

sub isAttr($$;$);
Überprüft ob das Attribut für das Device definiert ist.

Geänderte Funktionen:

sub addToAttrList($;$);
Der Funktion kann jetzt ein Name übergeben werden der den Gruppennamen darstellt, sinnhafterweise der Modulname. z.B. FHEMWEB. Wenn nicht gesetzt werden die Attribute der Gruppe Global hinzugefügt.
Kann jetzt neben einem einzelnen Attribut, auch AttrList und AttrObj verarbeiten

sub delFromAttrList($;$);
Bugfix: Löscht jetzt auch vorhandenen Attribute aus den Devices.

sub addToDevAttrList($$)
Fügt die AttrList nicht mehr dem Attribut userattr hinzu, sondern speichert die Liste im AttrGroup-Hash.
$AttrGroup{local}{DEVS}{$devname}
Ist damit auch nicht mehr über Attribute gespeichert und wird bei jedem Neustart neu generiert. Verträgt jetzt auch den Device-Hash.

sub delFromDevAttrList($$)
Nur Kompatibilitätsanpassung.

sub getAllAttr($;$);
Im scalaren Kontext wird die Liste wie gewohnt ausgegeben, im Listen Kontext (Array) wird AttrObj zurückgegeben. Verträgt jetzt auch den Device-Hash.

sub CommandAttr($$)
konnte jetzt vereinfacht werden.
Bugfix: Attributnamen können nicht mehr mit RegExp Zeichen frei gewählt werden. (Etwas schwer zu erklären siehe hier (https://forum.fhem.de/index.php/topic,83209.msg784433.html#msg784433)

setDevAttrList($;$)
Kann neben der AttrList auch den Array AttrGroup vertragen.

Folgendes ist noch zu tun:

Und noch ein paar Brainstormingnotizen.

Bitte mal ausprobieren und Feedback geben, Danke.

Gruß

Anhang: Patch und gepatchte fhem.pl und 01_FHEMWEB.pl
Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: Loredo am 23 Oktober 2018, 10:00:17
Find ich super!
Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: JoWiemann am 23 Oktober 2018, 10:52:07
Schließe mich an.


Gesendet von iPad mit Tapatalk
Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: CoolTux am 23 Oktober 2018, 11:26:49
Schließe mich einem dafür an. Gefällt mir sehr.
Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: Benni am 23 Oktober 2018, 12:14:55
Sieht gut aus!

+1
Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: Phill am 24 Oktober 2018, 13:54:37
Das klingt doch schon mal gut.

Wie bekommen wir jetzt aber die über addToDevAttrList und addToAttrList bereits im Attribut "userattr" gespeicherten Attributdefinitionen raus.

Meine erste Idee ist, dass bei jedem Aufruf von addToAttrList die userattr-Liste vom Device global mit der übergebenen Attributliste verglichen und gefiltert wird.

Genauso bei addToDevAttrList, hier dann nur mit dem angegebenem Device.

Die Attribute werden ja bei jedem Neustart erneut gesetzt, wenn ich das richtig sehe? Wie macht das z.b. structure.

Oder jemand eine bessere Idee? Eventuell während des Update-prozesses! Ansonsten würde ich das mal so umsetzen.

Gruß
Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: Phill am 01 November 2018, 19:15:02
Ich habe das entfernen der "userattr" jetzt mal so umgesetzt wie ich es beschrieben habe. Es gibt jetzt bis auf die userattr keine Attributdefinitionen mehr die über einen FHEM Neustart hinweg gespeichert sind. Ist mMn richtig und konsequent.

Bitte mal testen. Und Feedback geben. Man kann jederzeit wieder zurück zur originalen Version.
Einfach die files.tar.gz aus dem ersten Beitrag im FHEM Verzeichnis entpacken oder den Patch ausführen und neu starten.

Geändert sind fhem.pl und FHEM/01_FHEMWEB.pm. Diese eventuell vorher sichern.

Mit den Gruppennamen bin ich wie gesagt noch nicht 100%ig zufrieden, daher bitte Vorschläge machen.

Gruß
Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: Benni am 28 Februar 2021, 20:50:51
Hallo zusammen,

was ist eigentlich aus der Idee geworden?
Soweit ich sehe, leider nix! ;)

Ich bin aktuell mal wieder am Modul basteln und habe mich wieder mal daran gestört, alle modulspezifischen Attribute mit einem Präfix versehen zu müssen, um Sie a) für den Nutzer eindeutig als modulspezifisch zu kennzeichnen und sie b) in der Attributliste "gruppiert" zu haben.

Bei der Fülle der Module, v.a. wenn man viele davon nutzt, wäre m.E. "irgendeine" Gruppierung inzwischen besser, als gar keine.

gb#


Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: Phill am 01 März 2021, 12:47:31
Hallo, also ich bin noch dabei wenn sich hier noch was tut. Dabei habe ich gleich mal den Patch auf die aktuelle Revision (17566) angepasst. (AttrGroup_9.patch)
Läuft nach wie vor ohne Probleme.

Bitte von dem etwas umständlichen Code in der 01_FHEMWEB.pm nicht verunsichern lassen. War damals einfach nur QuicknDirty und sollte sich noch um einiges vereinfachen lassen.

Was ich nochmal besonders erwähnen wollte, ist, dass die Modulauthoren nicht tätig werden müssen, da die Attribute automatisch in die Modulkategorie wandern.
Grüße
Titel: Antw:Nochmal Gruppieren von Attributen
Beitrag von: Benni am 02 März 2021, 12:30:49
Sehr schön!

Ich habe den neuen Patch direkt mal auf meinem Entwicklungssystem eingespielt.
Funktioniert, wie erwartet und gefällt mir sehr gut!  8)

Ich hoffe, Rudi lässt sich diesmal darauf ein ;)

gb#