Autor Thema: delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet  (Gelesen 910 mal)

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4261
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 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #1 am: 23 Juni 2019, 19:55:01 »
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4261
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #2 am: 23 Juni 2019, 20:04:17 »
Hab ich mir gedacht.  ;) Aber schau mal, ich konnte es eindeutig nachvollziehen. Liegt vermutlich daran dass das Attr Argumente hat.

Lg
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #3 am: 23 Juni 2019, 20:13:49 »
Ja ich sehe gerade. Du musst alles mit angeben, inklusive der Optionen

delFromDevAttrList($name,'ptzPanel_Home:Home');
« Letzte Änderung: 23 Juni 2019, 20:15:43 von CoolTux »
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #4 am: 23 Juni 2019, 20:18:30 »
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4261
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #5 am: 23 Juni 2019, 21:05:02 »
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 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20886
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #6 am: 24 Juni 2019, 07:43:49 »
Ich bin unentschlossen, will aber keine Aenderungen einbauen, wenn nicht eine deutliche Mehrheit dafuer ist.

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #7 am: 24 Juni 2019, 07:50:30 »
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4261
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #8 am: 24 Juni 2019, 07:58:47 »
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 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #9 am: 24 Juni 2019, 08:06:34 »
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4261
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #10 am: 24 Juni 2019, 08:43:27 »
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 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #11 am: 24 Juni 2019, 08:57:11 »
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4261
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #12 am: 24 Juni 2019, 09:10:26 »
Stimmt in diesem Fall.
Müsste man noch etwas mehr präzisieren.
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #13 am: 24 Juni 2019, 09:35:31 »
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4261
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #14 am: 24 Juni 2019, 09:41:35 »
Sieht für mich auch gut aus.
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches, Dashboard
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #15 am: 24 Juni 2019, 09:57:23 »
Lieber Rudi wärst Du bitte so nett  :)

--- Programmieren/Perl/Projekte/FHEM/fhem-code/fhem.pl 2019-06-24 09:51:36.557512929 +0200
+++ tmp/fhem.pl 2019-06-24 09:52:25.237705994 +0200
@@ -4144,7 +4144,7 @@
   my $ua = $attr{$dev}{userattr};
   $ua = "" if(!$ua);
   my %hash = map { ($_ => 1) }
-             grep { " $arg " !~ m/ $_ / }
+             grep { " $_ " !~ m/ $arg(:.+)? / }
              split(" ", "$ua $arg");
   $attr{$dev}{userattr} = join(" ", sort keys %hash);
   delete $attr{$dev}{userattr}

Vielen Dank Heiko für Deinen Denkanstoß. Ich würde sagen so ist es auch für andere verständlich.
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20886
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #16 am: 24 Juni 2019, 21:03:22 »
Habe es mit folgenden Patch eingecheckt:
--- fhem.pl    (revision 19681)
+++ fhem.pl    (working copy)
@@ -4144,8 +4144,8 @@
   my $ua = $attr{$dev}{userattr};
   $ua = "" if(!$ua);
   my %hash = map { ($_ => 1) }
-             grep { " $arg " !~ m/ $_ / }
-             split(" ", "$ua $arg");
+             grep { $_ !~ m/^$arg(:.+)?$/ }
+             split(" ", $ua);
   $attr{$dev}{userattr} = join(" ", sort keys %hash);
   delete $attr{$dev}{userattr}
         if(!keys %hash && defined($attr{$dev}{userattr}));

Allerdings verstehe ich die Notwendigkeit immer noch nicht: das ist eine Routine fuer Modulprogrammierer.
Wissen sie nicht mehr genau, was sie hinzugefuegt haben?

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22066
Antw:delFromDevAttrList in fhem.pl funktioniert nicht wie erwartet
« Antwort #17 am: 24 Juni 2019, 21:07:22 »
Auch wir Modulprogrammierer sind manchmal faul  ;D
Da ich keine Seiteneffekte erwarte kann ich mit der Änderung leben. Es vereinfacht halt.

Danke Dir Rudi.


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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer