parseParams: bin ich blind?

Begonnen von laberlaib, 19 Dezember 2018, 16:30:45

Vorheriges Thema - Nächstes Thema

laberlaib

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?
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

laberlaib

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...
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

laberlaib

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...
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

KernSani

Ist das nich eine Anfängerfrage? Können wir dafür ein geeigneteres Board finden?

Danke,

Oli


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

CoolTux

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.
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

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

laberlaib

#7
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
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

amenomade

99_testUtils ist keine standard Datei von Fhem. Wie wird es geladen?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

amenomade

Zitat99_.* wird immer geladen
Ja, aber in welcher Ordnung? Wann und wo wird "use Data::Dumper" gemacht?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

laberlaib

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.


--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

amenomade

Hast Du irgendwo in 99_testUtils ein use Data::Dumper?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

laberlaib

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.
--
Proxmox, Homematic, G-Tags, Zigbee2MQTT, Rhasspy Sprachsteuerung im Aufbau (beta)

Hans Franz

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
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20