Autor Thema: Nochmal Gruppieren von Attributen  (Gelesen 662 mal)

Offline Phill

  • Developer
  • Full Member
  • ****
  • Beiträge: 397
  • Langsam wird'n Schuh d'raus.
    • iVDR
Nochmal Gruppieren von Attributen
« am: 23 Oktober 2018, 09:36:10 »
Vorheriger Thread hier


Bitte mal testen. Man kann jederzeit wieder zurück zur originalen FHEM Version.
files.tar.gz im FHEM Verziechnis entpacken 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)

  • Custom / Eigene: Wird in userattr des devices definiert und steht nur diesem Device zur Verfügung. Für eigenes Coding des Anwenders.
  • Gobal custom / Eigene Global: In userattr des Device "global". Steht FHEM-weit zur Verfügung. Auch für eigenes Coding.
  • Module / Modul: Modulspezifische Attribute definiert in $modulhash->{AttrList}. Während Laufzeit überschreibbar mit setDevAttrList. Hier können vom Modulauthor eigene Unterkategorien erzeugt werden
  • Events / Ereignisse: Eigentlich Modulattribute alle $readingFnAttributes
  • FHEM: Standard Attribute von FHEM gespeichert in $AttrList
  • Local / Lokal: Deviceattribute über addToDevAttrList/delFromDevAttrList erzeugt, vormals in userattr jetzt im Hash %AttrGroup gespeichert. z.B. structure
  • Frei wählbar ansonsten Global: FHEM-weite Modulattribute über addToAttrList/delFromAttrList z.B. FHEMWEB. Der Name der Gruppe kann als Parameter der Funktion addToAttrList übergeben werden, ansonsten ist der Gruppenname Global.

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.
beispielattr:1,2,3,4,5
[{ATTRNAME=>"beispielattr", SETTING="1,2,3,4,5", GROUP="userlocal"}]

Modulauthoren können Ihre Attribute selbst gruppieren
Mein umgesetzter Vorschlag.
Statts wie gewohnt die $hash->{AttrList} zu füllen wird ein Array in $hash->{AttrGroup} folgendermaßen angelegt:
  @{$hash->{AttrGroup}} = (
{NAME=>"GRUPPENNAME",
AttrList=>"attr1:1,2,3 attr2 attr3"},
{NAME=>{EN=>"Two",DE=>"Zwei"},
AttrList=>"attrb1:ja,nein attrb2 attrb3"},
{NAME=>{EN=>"THREE",DE=>"ZWEI"},,
AttrList=>"attrc1 attrc2 attrc3"},
);
oder
  push($hash->{AttrGroup}, {NAME=>"OK",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

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

Folgendes ist noch zu tun:
  • addToAttrList sollte konsequenterweise auch AttrObj verarbeiten können
  • Commandref anpassen
  • DevGuide Wiki anpassen

Und noch ein paar Brainstormingnotizen.
  • Beim definieren von Attributen über userattr testen ob Attribut schon existiert
  • Gruppierte darstellung in FHEM Befehlen. list und attr dev ?
  • Gruppieren von Readings / INTERNALS ermöglichen

Bitte mal ausprobieren und Feedback geben, Danke.

Gruß

Anhang: Patch und gepatchte fhem.pl und 01_FHEMWEB.pl
« Letzte Änderung: 02 November 2018, 13:18:07 von Phill »
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html
Gefällt mir Gefällt mir x 7 Liste anzeigen

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2952
  • ~ Challenging Innovation ~
Antw:Nochmal Gruppieren von Attributen
« Antwort #1 am: 23 Oktober 2018, 10:00:17 »
Find ich super!
FHEM-Module: ENIGMA2, GEOFANCY, ONKYO_AVR, PHTV, RESIDENTS, ROOMMATE, GUEST, HP1000, Pushover, THINKINGCLEANER, Wunderground | FHEM-Befehl: msg

Docker-FHEM 5.10dev auf Intel NUC mit Proxmox VE
Homematic via HMCCU, Hue Color Bulbs, LG OLED 65C8, Sonos Playbar+2xOne+Sub, 2x Sonos One, 1x Sonos Play:1

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2487
Antw:Nochmal Gruppieren von Attributen
« Antwort #2 am: 23 Oktober 2018, 10:52:07 »
Schließe mich an.


Gesendet von iPad mit Tapatalk
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17210
Antw:Nochmal Gruppieren von Attributen
« Antwort #3 am: 23 Oktober 2018, 11:26:49 »
Schließe mich einem dafür an. Gefällt mir sehr.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier
kein Support für cfg Editierer

Offline Benni

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1853
  • FHEMinist
Antw:Nochmal Gruppieren von Attributen
« Antwort #4 am: 23 Oktober 2018, 12:14:55 »
Sieht gut aus!

+1
FHEM (FL 9.9) (configDB+DbLog) auf Debian Wheezy.
Jede Menge HM mit 2x HMUART (WeMos+esp-link) über VCCU.
UniRoll an CUL868. Sebury F2-2 RFID über ESPEasy
Module: 98_rssFeed und 98_QRCode

Offline Phill

  • Developer
  • Full Member
  • ****
  • Beiträge: 397
  • Langsam wird'n Schuh d'raus.
    • iVDR
Antw:Nochmal Gruppieren von Attributen
« Antwort #5 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ß
« Letzte Änderung: 24 Oktober 2018, 14:21:42 von Phill »
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html

Offline Phill

  • Developer
  • Full Member
  • ****
  • Beiträge: 397
  • Langsam wird'n Schuh d'raus.
    • iVDR
Antw:Nochmal Gruppieren von Attributen
« Antwort #6 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ß
Homebrew 1-Wire / HomeMatic Mix - Cubietruck mit FHEM als Server - Raspberry PI 3 als Informationsanzeige im MagicMirror Stil - Raspberry Pi 1 als Klingelanlage - VDR

Mein Modul: Talk2Fhem - Mein Tipp: https://forum.fhem.de/index.php/topic,82442.0.html
Gefällt mir Gefällt mir x 1 Liste anzeigen

 

decade-submarginal