[gelöst] Probl. encryptet Value $hash->{RenameFn}, normal geht es! getUniqueId()

Begonnen von HomeAuto_User, 26 Februar 2020, 21:51:10

Vorheriges Thema - Nächstes Thema

HomeAuto_User

Hallo,
ich habe mit die Vorlage aus dem Modul 73_GardenaSmartBridge genommen um verschlüsselte Werte zu speichern.
Alles klappt soweit beim schreiben und lesen. Sobald ich nun das Modul umbenenne, so erhalte ich keinen Wert mehr, weil die Leseroutine ein undef liefert in der $hash->{RenameFn} Funktion.

Ich lese den Token von 40 Zeichen
sub Strava_ReadValue($$) {
my ($hash, $valuename) = @_;
my $name   = $hash->{NAME};
my $index  = $hash->{TYPE} . "_" . $hash->{NAME} . "_$valuename";
my $key    = getUniqueId() . $index;
my ( $value, $err );

Log3 $name, 4, "$name: ReadValue - Read $valuename from file";

( $err, $value ) = getKeyValue($index);

if ( defined($err) ) {
Log3 $name, 3, "$name: ReadValue - unable to read $valuename from file: $err";
return undef;
}

if ( defined($value) ) {
if ( eval "use Digest::MD5;1" ) {
$key = Digest::MD5::md5_hex( unpack "H*", $key );
$key .= Digest::MD5::md5_hex($key);
}

my $dec_val = '';

for my $char ( map { pack( 'C', hex($_) ) } ( $value =~ /(..)/g ) ) {
my $decode = chop($key);
$dec_val .= chr( ord($char) ^ ord($decode) );
$key = $decode . $key;
}
return $dec_val;

} else {
Log3 $name, 3, "$name: ReadValue - No $valuename in file";
return undef;
}
}


meine Werte aus und das klappt im normalen Programm einwandfrei. Sobald ich ABER das gleiche in der Funktion $hash->{RenameFn} ausführe, erhalte ich beim umbenennen keinen Wert. Sobald ich wieder zurück benenne, so kommt der Wert auch. Grund ist klar, bei der Umbenennenfunktion läuft was schief, nur was?

sub Strava_Rename(@) {
my ( $new, $old ) = @_;
  my $hash = $defs{$new};

Log3 $hash->{NAME}, 3, "$hash->{NAME}: Rename $old to $new";

## need FIX, after rename value not found ##
## value from read is undefind !!!

Strava_StoreValue( $hash, "Client_ID", Strava_ReadValue($hash,"Client_ID") ); ## NEED FIX ## Strava_ReadValue($hash,"Client_ID") ) undef bei rename
setKeyValue( $hash->{TYPE} . "_" . $old . "_Client_ID", undef );
return undef;
}


Entweder es klappt in dem Orginalmodul ebenso schon nicht oder der Fehler liegt bei mir  8)

Bitte schaut mal mit drüber.
Danke

EDIT:
1)
Kann es sein, das die Länge Probleme macht?
2)
Wenn ich es auf die Routine vom FritzBox Modul umstelle, so erhalte ich etwas zur Ansicht aber da ist der Token "eingekürzt und Leerzeichen auf einmal drin"?
(obwohl der Name und der lesbare verschlüsselte Key in der Datei uniqueID gleich sind bzw. stimmen)

:o :o :o

EDIT 2:
zu 2) Hier das Testergebnis mit einem beliebigen String von 10 Zeichen

Modulname: Strava
- Auszug Datei uniqueID -
uniqueID: 48bcd34664b84396712377a281252293
Strava_Strava_Test:5107010b020c53540e0e

Get Ergebnis unverschlüsselt: 0123456789

####################

Modulname: StravaTest
- Auszug Datei uniqueID -
uniqueID: 48bcd34664b84396712377a281252293
Strava_StravaTest_Test:5107010b020c53540e0e

Get Ergebnis unverschlüsselt: 7e8>a:j288


WIESO ist das GET Ergebnis unterschiedlich??

Im Anhang ist ein Beispielcode zur besseren Ansicht.
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

CoolTux

Ich habe meine Version in Gardena entsprechend gefixt.

Schuld war das beim ReadPassword $hash->{NAME} verwendet wird und bei einem rename dann ja schon der neue Name in $hash->{NAME} steht.
Ich habe die Funktionen entsprechend umgeschrieben so das ab sofort $NAME mit übergeben wird bei Aufruf von StorePassword und ReadPassword.


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

betateilchen

*Popcorn*

Man sollte beim Klauen in fremden Modulen zumindest verstehen, was man da klaut *lach*

Zitat von: HomeAuto_User am 26 Februar 2020, 21:51:10
Sobald ich nun das Modul umbenenne,

Das Modul umbenennen ist immer eine schlechte Idee.
Vor allem, wenn man eigentlich von einem device redet  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

HomeAuto_User

Hallo,
es ist schön wenn man so auf diese Art noch Fixes erkennt.
Nicht jeder sieht sofort in fremden Codes das noch ein Fehler ist und somit konnte CoolTux nach Anfrage beleuchten und beheben.

:) *Daumen*

PS: Immer das positive daraus sehen, wieder ein Beispiel was funktioniert unter den Modulen  ;D
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet