Hi,
ich habe in meinem FritzBox-Device folgendes UserAttribut versucht zu setzen:
attr FritzBox userReadings PassGuest {my $rName=fhem("get FritzBox tr064Command WLANConfiguration:3 wlanconfig3 GetSecurityKeys");;\
$rName = ~/'NewKeyPassphrase' => '(.*)'/;;\
Log3 undef,3,"Passwort ist $1";;\
return $1;;\
}
Leider funktioniert die Ausgabe nicht, im Log erscheint der Fehler
1: PERL WARNING: Use of uninitialized value $1 in concatenation (.) or string at (eval 23095) line 3.
Die Zuordnung des tr064Command funktioniert, hier erscheint als Ergebnis2018.05.02 12:36:47 3: get FritzBox tr064Command WLANConfiguration:3 wlanconfig3 GetSecurityKeys : Service='WLANConfiguration:3' Control='wlanconfig3' Action='GetSecurityKeys'
----------------------------------------------------------------------
$VAR1 = {
'GetSecurityKeysResponse' => {
'NewPreSharedKey' => 'HIERSTEHTWAS',
'NewWEPKey0' => '',
'NewKeyPassphrase' => 'FHEM',
'NewWEPKey3' => '',
'NewWEPKey1' => '',
'NewWEPKey2' => ''
}
};
Irgendetwas mache ich falsch, weiß aber leider nicht was. Wie schaffe ich es, das Passwort angezeigt zu bekommen.
Gruß
Mundus
P.S.: Im Wiki ist der Fall so ähnlich als Anwendungsbeispiel abgebildet.
Hi,
$1 ist nirgendwo definiert/verwendet.
Wäre gut wenn Du Deinen Bezug aufs Wiki auch posten würdest.
Gruß Otto
Hallo,
als erstes der Link
https://wiki.fhem.de/wiki/FRITZBOX#userReadings_per_get_tr064Command_oder_get_luaQuery (https://wiki.fhem.de/wiki/FRITZBOX#userReadings_per_get_tr064Command_oder_get_luaQuery)
Kann ich die Standard Perl-Variable $1 nicht -auch ohne Definition im UserReading- nutzen?
Gruß
Hallo,
so sollte es funktionieren, wenn Du es über die FhemWeb direkt als userReadings einträgst:
PassGuest {
my $rName = "";
$rName = fhem("get FritzBox tr064Command WLANConfiguration:3 wlanconfig3 GetSecurityKeys");
if($rName =~/'NewKeyPassphrase' => '(.*)'/) {
Log3 undef,3,"Passwort ist $1";
return $1;
}
Log3 undef,3,"Kein Passwort ermittelt: $rName";
return $rName;
}
Allerdings bekomme ich folgende Fehlermeldung:
Service='WLANConfiguration:3' Control='wlanconfig3' Action='GetSecurityKeys'
----------------------------------------------------------------------
{
'Error' => '500 Can\'t connect to 192.168.0.1:49443'
}
Musst Du dann bei Dir mal schauen.
PS zwischen =~ darf kein Leerzeichen. Ist der RegEx-Operator in Perl. Das zusätzlich if sorgt dafür, dass nur bei erfolgreichem RegEx $1 ausgewertet wird. Weil nur dann ist es definiert.
Grüße Jörg
Hallo,
Jörg sein Code funktioniert bei mir. :)
Sorry da habe ich mich als Perl Anfänger aber wieder kräftig blamiert.
Das Leerzeichen zuviel war mir nicht ins Auge gestochen. :-[
Gruß Otto
Edit: allerdings ist der get Aufruf ein ziemlicher Logfile Müll Produzent :o
Hi,
vielen Dank für die Hilfe, nun funktioniert es. Das LEERZEICHEN war mein Fehler.
Wenn ich die IF-Bedingung von JoWiemann weglasse, passiert, außer einer Fehlermeldung etwas? Ich würde den Fehler gerne akzeptieren und so den Code etwas kürzer halten.
Gruß
Mundus
Edit: Mit dem LOG-Overhead kann ich leben.