delKeyValue als Ergänzung zu setKeyValue/getKeyValue

Begonnen von DS_Starter, 02 Februar 2016, 22:08:19

Vorheriges Thema - Nächstes Thema

DS_Starter

Hallo Rudi,

zur Ablage von Credentials verwende ich setKeyValue/getKeyValue aus fhem.pl in dem SSCam-Modul.
Nun hatte ich nach einer entsprechenden Funktion in fhem.pl gesucht die Einträge in uniqueID löscht wenn das Device gelöscht wird, war aber nicht fündig geworden.

In Anlehnung an setKeyValue/getKeyValue habe ich mir zu diesem Zweck die kleine Routine delKeyValue geschrieben:

sub delKeyValue($) {
  my ($key) = @_;                                 
  my $fName = $attr{global}{modpath}."/FHEM/FhemUtils/uniqueID";
  my ($err, @old) = FileRead($fName);
  my @new;
  return ($err, undef) if($err);
 
  foreach my $l (@old) {
      if($l !~ m/^$key:/) {
          push @new, $l;
      }
  }
 
return FileWrite($fName, @new);
}


Eingebunden in X_Undef mit delKeyValue($key)  wird nun das zu diesem Device abgelegte Credential aus der Fileablage entfernt wenn das Device gelöscht wird.

Vielleicht ist es eine Überlegung wert, eine/diese delKeyValue-Routine mit in fhem.pl einzubauen falls es so etwas in dieser Form tatsächlich noch nicht geben sollte, damit man eine solche Funktion allgemein nutzen kann .

viele Grüße
Heiko
Proxmox+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

Benni

Auszug aus der Commandref zu setKeyValue:

Zitat
setKeyValue(keyName, value)
store the value in the file $modpath/FHEM/FhemUtils/uniqueID (the name is used for backward compatibility), or in the database, if using configDB. value may not contain newlines, and only one value per key is stored. The file/database entry will be written immediately, no explicit save is required. If the value is undef, the entry will be deleted. Returns an error-string or undef.

betateilchen

#2
Benni war schneller als ich... *g*

------

Und zu Deinem Code: Man kann Elemente auch direkt aus einem bestehenden array löschen, ohne dass man das array dazu in ein neues array umschichten muss.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Ah ... da hätte ich mir wieder paar Gedanken sparen können  ;) .... danke euch und schönen Abend noch !

Gruß
Heiko
Proxmox+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