delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet

Begonnen von DS_Starter, 23 Juni 2019, 19:15:06

Vorheriges Thema - Nächstes Thema

DS_Starter

Ich habe ein userattr (gesetzt mit addToDevAttrList):

userattr ptzPanel_Home:Home,Tanks,Treppe,home ptzPanel_iconPath ptzPanel_iconPrefix ptzPanel_row00 ptzPanel_row01 ptzPanel_row02 ptzPanel_row03 ptzPanel_row04 ptzPanel_row05 ptzPanel_row06 ptzPanel_row07 ptzPanel_row08 ptzPanel_row09 ptzPanel_use:0,1

Aus diesem will ich das ptzPanel_Home löschen um es danach verändert wieder hinzuzufügen.
Dazu verwende ich:

delFromDevAttrList($name, "ptzPanel_Home");

Das funktioniert aber nicht wie erwartet, d.h. "ptzPanel_Home" wird nicht gelöscht, sondern ist nach einem

delFromDevAttrList($name, "ptzPanel_Home");
addToDevAttrList($name, "ptzPanel_Home:Home,Preset_4,Tanks,Treppe,home");


doppelt vorhanden:

userattr ptzPanel_Home:Home,Preset_4,Tanks,Treppe,home ptzPanel_Home:Home,Tanks,Treppe,home ptzPanel_iconPath ptzPanel_iconPrefix ptzPanel_row00 ptzPanel_row01 ptzPanel_row02 ptzPanel_row03 ptzPanel_row04 ptzPanel_row05 ptzPanel_row06 ptzPanel_row07 ptzPanel_row08 ptzPanel_row09 ptzPanel_use:0,1

Es gibt noch das alte Attribut mit den Werten "Home,Tanks,Treppe,home" und das Neue mit den Werten "Home,Preset_4,Tanks,Treppe,home".
Um das Problem zu lösen, habe ich das grep in fhem.pl delFromDevAttrList abgeändert:

sub
delFromDevAttrList($$)
{
  my ($dev,$arg) = @_;

  my $ua = $attr{$dev}{userattr};
  $ua = "" if(!$ua);
  my %hash = map { ($_ => 1) }
             grep { $_ !~ m/$arg.*/ }
             split(" ", "$ua $arg");
  $attr{$dev}{userattr} = join(" ", sort keys %hash);
  delete $attr{$dev}{userattr}
        if(!keys %hash && defined($attr{$dev}{userattr}));
  map { delete $attr{$dev}{$_} } split(" ", (split(":", $arg))[0]);
 
}


Damit funktioniert es nun einwandfrei. Ich benutze jetzt zwar eine eigene Funktion weil mich das Löschen des User-Attributs
am Ende der Funktion in meinem Anwendungsfall stört, wollte aber meine Beobachtung zur Kenntnis geben.
Kann das bitte jemand (Rudi, Cooltux ?) nochmal gegenchecken ob ich irgendwas übersehen habe oder der Sommerhitze erlegen bin  ;) ?

Danke und LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

CoolTux

Hallo Heiko,

Danke für die Meldung. Ich schaue es mir gerne an. Allerdings muss ich gestehen daß AutoShuttersControl diese Funktion schon seit über einem Jahr weit über 12 mal produktiv verwendet hat. Müsste ja selbst einige alte userattr entfernen und verändert wieder einfügen.
Ich schaue es mir aber morgen gleich mal an.


Grüße
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DS_Starter

Hab ich mir gedacht.  ;) Aber schau mal, ich konnte es eindeutig nachvollziehen. Liegt vermutlich daran dass das Attr Argumente hat.

Lg
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

CoolTux

#3
Ja ich sehe gerade. Du musst alles mit angeben, inklusive der Optionen

delFromDevAttrList($name,'ptzPanel_Home:Home');
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Kurze Erklärung worum so. Ich finde zum Attribut gehen auch die Optionen, daher bin ich der Meinung das sie auch beim entfernen korrekt mit angegeben werden sollten.
Nur zur Erklärung meines Standpunktes.
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DS_Starter

Ich würde jetzt allerdings eher das userattr löschen wollen unabhängig der Argumente weil die dynamisch sein können wie bei meinem Anwendungsfall. Naja, Ansichtssache ...

Lg,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

rudolfkoenig

Ich bin unentschlossen, will aber keine Aenderungen einbauen, wenn nicht eine deutliche Mehrheit dafuer ist.

CoolTux

Es denke das die Funktion kaum genutzt wird. Sonst hätten sich schon mehr gemeldet.

Grüße
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DS_Starter

Guten Morgen Rudi und Cooltux,

ich persönlich habe jetzt aus den beschiebenen Gründen eine eigene Funktion dafür verwendet.
D.h. ich wäre jetzt nicht auf eine Änderung angeweisen.
Allerdings würde ich als Nutzer grundsätzlich erwarten, dass ein Userattribut auch gelöscht wird wenn ich ein Userattribut löschen möchte.
Aber es ist sicherlich Ansichtssache wie Cooltux schon geschrieben hat. Könnte natürlich gut sein dass noch mehr User darüber stolpern. Habe gerade gesehen, dass die API-Doku um diese Befehle der Vollständigkeit halber erweitert werden müsste.

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

CoolTux

Wenn es für andere besser verständlich wäre ich natürlich für die Änderung. Es geht ja vornehmlich auch darum daß solche Funktionen nicht immer wieder neu erfunden werden sollen sondern Zentral zur Nutzung vor liegen.
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DS_Starter

Noch ein Punkt spräche meiner Meinung nach für eine Änderung.
Es kann durchaus sein, dass ein User die initial vergebenen Argumente für ein Userattribut ändert bzw. ergänzt um die Usability anzupassen. Dafür ist es ja ein Userattr.
Dann würde die Funktion auch versagen, es sei denn man holt sich vorher die Informationen aus der userattr.
Aber dann kann man sich ja gleich noch die Löschfunktion dazu schreiben und braucht  delFromDevAttrList auch nicht mehr.  ;)
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

CoolTux

Zitat von: DS_Starter am 23 Juni 2019, 19:15:06
sub
delFromDevAttrList($$)
{
  my ($dev,$arg) = @_;

  my $ua = $attr{$dev}{userattr};
  $ua = "" if(!$ua);
  my %hash = map { ($_ => 1) }
             grep { $_ !~ m/$arg.*/ }
             split(" ", "$ua $arg");
  $attr{$dev}{userattr} = join(" ", sort keys %hash);
  delete $attr{$dev}{userattr}
        if(!keys %hash && defined($attr{$dev}{userattr}));
  map { delete $attr{$dev}{$_} } split(" ", (split(":", $arg))[0]);
 
}


Bitte Heiko seine Lösung nicht verwenden. Sie arbeitet sehr ungenau. Damit kann es passieren das ein entfernen von ASC_WohnzimmerFenster auch ASC_WohnzimmerFensterLinks und ASC_WohnzimmerFensterRechts entfernt.


Grüße
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DS_Starter

Stimmt in diesem Fall.
Müsste man noch etwas mehr präzisieren.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

CoolTux


sub
delFromDevAttrList($$)
{
  my ($dev,$arg) = @_;

  my $ua = $attr{$dev}{userattr};
  $ua = "" if(!$ua);
  my %hash = map { ($_ => 1) }
             grep { " $_ " !~ m/ $arg(:.+)? / }
             split(" ", "$ua $arg");
  $attr{$dev}{userattr} = join(" ", sort keys %hash);
  delete $attr{$dev}{userattr}
        if(!keys %hash && defined($attr{$dev}{userattr}));
  map { delete $attr{$dev}{$_} } split(" ", (split(":", $arg))[0]);
}


Ich kann mich damit arrangieren. 3 kleine Tests zeigten keine Probleme.
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.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DS_Starter

ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter