parseParams trennt nicht wie vorgesehen

Begonnen von drhirn, 25 August 2020, 16:18:10

Vorheriges Thema - Nächstes Thema

drhirn

Ich baue gerade ein Modul um. Und sage ganz ehrlich: Ich weiß nicht, was genau ich tue.
Jetzt stehe ich vor dem Problem, dass mir
my($unnamedParams, $namedParams) = parseParams($cmd);
nach einem
set Rhasspy say siteId="test" text="test"
für $unnamedParams

$VAR1 = \[
            'siteId="test"',
            'text="10"'
          ];

und für $namedParams

$VAR1 = \{};

liefert. Was so eigentlich nicht geplant ist. Das sollte doch eigentlich in $namedParams stehen.

Irritierend ist, dass das Original-Modul (10_SNIPS.pm) in meiner produktiven FHEM-Instanz (Debian, FHEM "installiert") genau das macht, was ich erwartet hätte. Aber in sämtlichen Test-Instanzen, die ich so am laufen habe (alle brandneu, aus dem offiziellen Docker-Image), funktioniert weder das original, noch mein umgebautes Modul 10_RHASSPY.pm.
Und ich habe nicht im entferntesten eine Ahnung, warum das so ist.

Vielen Dank!
Stefan

Hätte da jemand einen Verdacht? Bzw. - auch wenn's etwas viel verlangt ist - könnte sich jemand den Code durchsehen und sachdienliche Hinweise geben? In "meinem" Modul würde es ab Zeile 1019 (sub say) losgehen.

drhirn

Ich sehe gerade, Laberlaib hatte genau das selbe Problem mit dem selben Modul: https://forum.fhem.de/index.php/topic,94653.msg873960.html#msg873960
Da steht nur leider keine Lösung.

rudolfkoenig

Bei mir scheint es zu funktionieren:
fhem> { my ($a,$h)=parseParams('say siteId="test" text="test"');; "A: ".join(",",@{$a})."\nH: ".join(" ",map { "$_=>$h->{$_}" } keys %{$h}) }
A: say
H: text=>test siteId=>test

drhirn

#3
Eh bei mir auch. Wenn ich deinen Code in die FHEM-Kommandzeile eingebe.
Schreibe ich den selben Code aber in das Modul, wird daraus:

A: say,siteId="test",text="test"
H:

Das ist eben, was mich so irritiert. Es muss mit dem Modul zusammenhängen. Aber ich komme einfach nicht drauf, warum.

--edit
Musste auch gerade feststellen, es ist vollkommen egal, an welcher Stelle im Modul ich deinen Code platziere ("sub say", "define" oder ganz an den Anfang), das Ergebnis ist immer falsch.

laberlaib

ich hatte die Funktion ja einfach in meiner 99_Utils verwendet und es hat nur "manchmal" funktioniert.

Also weder Kommandozeile noch SNIPS-Modul.


Ich hatte damals vermutet, dass die Funktion nicht verfügbar ist zu einem bestimmten Zeitpunkt. Aber dann müsste ja eine Fehlermeldung kommen und nicht eine falsche Ausgabe - also sollte das Unsinn.

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

drhirn

Jup, wäre auch davon ausgegangen, dass ich einen Fehler bekomme, wenn ich den Code von Rudi ganz an den Anfang des Moduls schreibe. Dem war nicht so ;)

laberlaib

Laienhaft (wenn ich jetzt Zugriff auf mein System hätte und mein RHASSPY funktionieren tät und mich dadurch motivieren würde):
Ich würde jetzt mal in die Funktion selbst mit Debugginginfos und Logeinträgen anreichern und schauen, ob diese überhaupt richtig aufgerufen wird?

Über "echte" Perl Werkzeuge fürs Debugging habe ich keine Ahnung.


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