FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: laberlaib am 19 Dezember 2018, 16:30:45

Titel: parseParams: bin ich blind?
Beitrag von: laberlaib am 19 Dezember 2018, 16:30:45
Hallo,

ich wollte mir in das Snips-Modul eine Sprachauswahl bei der Sprachausgabe einbauen und bin dabei auf die Funktion "parsParams" gestoßen.
https://wiki.fhem.de/wiki/DevelopmentModuleAPI#parseParams

Jetzt hab ich die Beispiele durchgespielt, aber irgendwas will nicht funktionieren:
sub testPP(){
my $cmd = 'set name test1 test2=abc test3 "test4 test4" test5="test5 test5" test6=\'test6=test6\' test7= test8="\'" test9=\'"\' {my $x = "abc"} test10={ { my $abc ="xyz" } }';
print Dumper parseParams( $cmd );
}

in einer 99_Utils.pm
Ergibt im Logfile:
$VAR1 = [
          'set',
          'name',
          'test1',
          'test2=abc',
          'test3',
          'test4 test4',
          'test5="test5',
          'test5"',
          'test6=\'test6=test6\'',
          'test7=',
          'test8="\'"',
          'test9=\'"\'',
          '{my $x = "abc"}',
          'test10={',
          '{ my $abc ="xyz" }',
          '}'
        ];
$VAR2 = {};


Dabei sollten doch die Wertpaare in $VAR2 landen, wie hier beschrieben:
https://forum.fhem.de/index.php/topic,52242.msg440353.html#msg440353

Bin ich gerade blind?
Titel: Antw:parseParams: bin ich blind?
Beitrag von: amenomade am 19 Dezember 2018, 23:34:35
Bei mir geht es$VAR1 = [
          'set',
          'name',
          'test1',
          'test3',
          'test4 test4',
          '{my $x = "abc"}'
        ];
$VAR2 = {
          'test10' => '{ { my $abc ="xyz" } }',
          'test6' => 'test6=test6',
          'test7' => '',
          'test8' => '\'',
          'test5' => 'test5 test5',
          'test2' => 'abc',
          'test9' => '"'
        };

Ich habe per copy/paste deine Funktion in myUtils übernommen, und dann {testPP()} in Fhem eingegeben
Titel: Antw:parseParams: bin ich blind?
Beitrag von: laberlaib am 20 Dezember 2018, 09:03:43
Mhm, Update gemacht, jetz gehts wohl
$VAR1 = [
          'set',
          'name',
          'test1',
          'test3',
          'test4 test4',
          '{my $x = "abc"}'
        ];
$VAR2 = {
          'test7' => '',
          'test6' => 'test6=test6',
          'test9' => '"',
          'test10' => '{ { my $abc ="xyz" } }',
          'test5' => 'test5 test5',
          'test8' => '\'',
          'test2' => 'abc'
        };


Davor wars eine fhem.pl Version vom 18.11. (?).

Egal jetzt gehts erstmal...
Titel: Antw:parseParams: bin ich blind?
Beitrag von: laberlaib am 20 Dezember 2018, 14:27:23
Da ist es wieder kaputt gegangen...
$VAR1 = [
          'set',
          'name',
          'test1',
          'test2=abc',
          'test3',
          'test4 test4',
          'test5="test5',
          'test5"',
          'test6=\'test6=test6\'',
          'test7=',
          'test8="\'"',
          'test9=\'"\'',
          '{my $x = "abc"}',
          'test10={',
          '{ my $abc ="xyz" }',
          '}'
        ];
$VAR2 = {};


Außerdem bekomme ich "ab und an" im Log beim aufrufen der Testfunktion
2018.12.20 14:15:11 1: PERL WARNING: print() on unopened filehandle Dumper at ./FHEM/99_testUtils.pm line 43.
2018.12.20 14:15:11 3: eval: {testPP}


Ich habe das Gefühl, da stehen irgendwelche Funktionen zu manchen Zeitpunkten nicht zur Verfügung...
Titel: Antw:parseParams: bin ich blind?
Beitrag von: KernSani am 20 Dezember 2018, 14:35:37
Ist das nich eine Anfängerfrage? Können wir dafür ein geeigneteres Board finden?

Danke,

Oli


Kurz, weil mobil
Titel: Antw:parseParams: bin ich blind?
Beitrag von: CoolTux am 20 Dezember 2018, 14:45:50
Ich habe Dein Beispiel in ein at mit alle 1 sekunde laufen lassen und nach 120s hatte ich nicht einen Fehler. Es wird wohl an Deinem System liegen. Denke ich.
Titel: Antw:parseParams: bin ich blind?
Beitrag von: amenomade am 20 Dezember 2018, 16:15:01
Was ist 99_testUtils.pm ?
Titel: Antw:parseParams: bin ich blind?
Beitrag von: laberlaib am 20 Dezember 2018, 20:30:32
Also jetzt geht es gerade wieder.

In 99_testUtils.pm habe ich meine Testfunktionen ausgelagert.
Die, die ich hier als Beispiel verwende, habe ich aber komplett aus den oben verlinkten Threads/Wikis kopiert.

Ich hab das unter Anfängerfragen weil ich kaum Ahnung von Perl habe => "Anfänger".
V.a. weiß ich nicht, nach was/wie ich suchen soll, wenn da wieder was rum spinnt.

Ich gebe {testPP} in die Eingabezeile ein. Und manchmal funktioniert es richtig, manchmal werden keine Wertpaare gefunden und machmal kam auch dieser Output, mit dem ich nix anfangen kann:
2018.12.20 14:15:11 1: PERL WARNING: print() on unopened filehandle Dumper at ./FHEM/99_testUtils.pm line 43.
2018.12.20 14:15:11 3: eval: {testPP}

- Die erste Fehlermeldung kann man googeln, darum dachte ich, dass vielleicht etwas nicht fertig/richtig geladen ist:
https://www.perlmonks.org/?node_id=780755
ZitatWhen the parser sees the line "print Dumper %test_hash;", the Dumper sub has not been imported yet, so it treats it as a filehandle.

- Was kann das zweite bedeutem: eval: {testPP} ?

Und eigentlich nutzt parseParams in der fhem.pl ja eigentlich nicht FHEM-spezielles, wenn ich das richtig überblicke. Das sollte doch "immer" funktionieren?

Ich beobachte das mal weiter und versuche ein Muster zu erkennen; bin aber auch für Hinweise, wo/wie ich suchen kann dankbar.

€: Mein System läuft in einer VM auf Ubuntu Server 16.04
fhem.pl              18003 2018-12-19 10:45:16Z rudolfkoenig
Titel: Antw:parseParams: bin ich blind?
Beitrag von: amenomade am 20 Dezember 2018, 23:22:25
99_testUtils ist keine standard Datei von Fhem. Wie wird es geladen?
Titel: Antw:parseParams: bin ich blind?
Beitrag von: KernSani am 21 Dezember 2018, 06:02:29
Zitat von: amenomade am 20 Dezember 2018, 23:22:25
99_testUtils ist keine standard Datei von Fhem. Wie wird es geladen?
99_.* wird immer geladen, aber guter Hinweis, Macht der TE nach Änderungen ein reload?  Nach Änderungen an Funktionsschnittstellen ein restart?


Kurz, weil mobil
Titel: Antw:parseParams: bin ich blind?
Beitrag von: amenomade am 21 Dezember 2018, 08:43:27
Zitat99_.* wird immer geladen
Ja, aber in welcher Ordnung? Wann und wo wird "use Data::Dumper" gemacht?
Titel: Antw:parseParams: bin ich blind?
Beitrag von: laberlaib am 21 Dezember 2018, 15:50:32
Zitat von: KernSani am 21 Dezember 2018, 06:02:29
99_.* wird immer geladen, aber guter Hinweis, Macht der TE nach Änderungen ein reload?  Nach Änderungen an Funktionsschnittstellen ein restart?

Funktionsschnittstelle = Modul?
Wenn ich direkt an Modulen, bspw. jetzt hier an 10_SNIPS.pm was mache, dann mache ich zwar keinen restart aber ein reload 10_SNIPS.pm

Zitat von: amenomade am 21 Dezember 2018, 08:43:27
Ja, aber in welcher Ordnung? Wann und wo wird "use Data::Dumper" gemacht?

Reihenfolge habe ich keine Ahnung, ich habe mich nur an den 99-Leitfaden orientiert:
https://wiki.fhem.de/wiki/99_myUtils_anlegen
ZitatDer Dateiname muss mit 99_ beginnen. FHEM lädt beim Start alle Programmdateien mit dem prefix 99_. Andere Programmdateien werden erst dann geladen, wenn sie durch eine define-Anweisung in der Konfiguration angefordert werden. So wird z.B. 10_FS20.pm erst geladen, wenn beim Einlesen der Konfiguration das erste define für ein FS20-device abgearbeitet wir
Wobei Start jetzt halt vielleicht etwas allgemein ist.

Und use Data::Dumper nutze ich nur, weil das Beispiel eben so war und man damit aus meiner Sicht komfortabel so eine Struktur ausgeben kann. Ich lad das selber nicht manuell und kann ("Anfänger") auch nicht nachvollziehen, wo das geschieht.


Titel: Antw:parseParams: bin ich blind?
Beitrag von: amenomade am 21 Dezember 2018, 18:09:20
Hast Du irgendwo in 99_testUtils ein use Data::Dumper?
Titel: Antw:parseParams: bin ich blind?
Beitrag von: laberlaib am 25 Dezember 2018, 11:06:15
Der Weihnachtsurlaub hat begonnen, daher zum einen niedrige Antwortfrequenz und zum anderen keinen Zugriff auf FHEM.

Zitat von: amenomade am 21 Dezember 2018, 18:09:20
Hast Du irgendwo in 99_testUtils ein use Data::Dumper?

Ich lade das nicht manuell.
Was ich nicht verstehe, wenn der Dumper nicht gefunden wird, warum funktioniert dann parseParam nicht? Bzw. Dumper gibt mir ja teilweise die Ausgabevariablen von parseParams, $V1 und $V2 aus, allerdings falsch befüllt.

Jetz gehts ja erstmal. Aber kann ich irgendwie den Verlauf von Perlprogrammen "mitverfolgen"? Und gibt es einen Shellbefehl, mit dem ich einfach alle Dateien eines Verzeichnises nach einem String durchsuchen kann?
Dann würde ich vesuchen nachzuverfolgen, wo sich use Data::Dumper befindet und wann es geladen wird usw..

Aber alles frühestens wieder, wenn ich wieder Zeit und Zugriff auf meine Installation habe - also Anfang/Mitte Januar.
Titel: Antw:parseParams: bin ich blind?
Beitrag von: Hans Franz am 25 Dezember 2018, 12:01:29
ZitatUnd gibt es einen Shellbefehl, mit dem ich einfach alle Dateien eines Verzeichnises nach einem String durchsuchen kann?
Moin und frohe Weihnachten.

Nimm das gute alte grep.

grep -n Dumper /opt/fhem/FHEM/*

Gruß
Hans