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
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.
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.
Ah ... da hätte ich mir wieder paar Gedanken sparen können ;) .... danke euch und schönen Abend noch !
Gruß
Heiko