FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: DS_Starter am 02 Februar 2016, 22:08:19

Titel: delKeyValue als Ergänzung zu setKeyValue/getKeyValue
Beitrag von: DS_Starter am 02 Februar 2016, 22:08:19
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
Titel: Antw:delKeyValue als Ergänzung zu setKeyValue/getKeyValue
Beitrag von: Benni am 02 Februar 2016, 22:13:41
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.
Titel: Antw:delKeyValue als Ergänzung zu setKeyValue/getKeyValue
Beitrag von: betateilchen am 02 Februar 2016, 22:14:24
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.
Titel: Antw:delKeyValue als Ergänzung zu setKeyValue/getKeyValue
Beitrag von: DS_Starter am 02 Februar 2016, 22:19:27
Ah ... da hätte ich mir wieder paar Gedanken sparen können  ;) .... danke euch und schönen Abend noch !

Gruß
Heiko