Perl - Modul 10_RHASSPY.pm "professionalisieren"

Begonnen von drhirn, 18 Februar 2021, 17:02:31

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: drhirn am 01 März 2021, 14:53:39
Das ist schon richtig. Könnte aber natürlich auch sein, dass ich mit einer Alexa nicht die selben Geräte steuern möchte. Aber ist wahrscheinlich eher selten der Fall (außer man testet - wie ich - schon seit Jahren eine "beste" Lösung). Weiß auch nicht, was da schlauer ist.
...ich erst recht nicht...
Vom Bauchgefühl her würde ich das auch nicht zum default machen, sondern wenn, dann optional. Was ggf. auch interessant wäre, wäre Devices über devspec auszuwählen.
Will ja nur andeuten, dass der Weg über rhasspyRoom ggf. ergänzt werden könnte. (Das war doch bisher das Kriterium, oder?)

Falls du irgenwo eine Übersicht hast, wie der matching-Prozess eigentlich läuft, wäre das ggf. hilfreich, ich muss mir das sonst aus dem Code zusammenreimen; bisher hatte ich einfach mit einigen wenigen topic/payload getestet, ob der On/off und Shortcut-Prozess unverändert durchläuft, nicht, ob er (abgesehen von unnötigen Code-Doppelungen an diversen Stellen) optimal ist ::) .

Zitat
Geht auch. Ich bin es einfach so gewohnt, dass ich mir zuerst die "Config" zusammenschreibe und danch den Befehl bastle. Macht's für mich übersichtlicher. Und ich kann den Befehl dann einfach nur kopieren und irgendwo anders genau so wieder einfügen.
Ich bin da auch nicht "durch" und finde es an der Stelle auch nachvollziehbar, weil sich ja (theoretisch) immer mal wieder was ändern kann, und da ist es dann einfacher, wenn die Parameter sauber untereinander weg kommen...
Wenn ich es als "falsch" empfunden hätte, hätte ich mal wieder "einfach gemacht"... ::)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

drhirn

#136
Jetzt hamma zu viel kaputt gemacht :D

Beim Zusammensammeln von Geräten, Räumen, etc. wird nur noch der erste Fund zurück gegeben. Außer bei RHASSPY_allRhasspyColors. Das funktioniert noch.

set updateSlots, set trainRhasspy und fetchSiteIds geht noch.

Alles andere nicht mehr ;)


PERL WARNING: Use of uninitialized value in substitution iterator at ./FHEM/10_RHASSPY.pm line 1081.

$room =~ s/($keys)/$mutated_vowels->{$1}/g;


--edit--
Gelogen. Nur set speak geht nicht.
Da bleiben $unnamedParams und $namedParams leer. Interessantes Detail am Rande: Genau das war der Grund, warum ich angefangen habe, das Modul umzubauen. Hat nämlich damals auch genau deswegen nicht funktioniert. :D

Beta-User

#137
Uff...
Zitat von: drhirn am 01 März 2021, 15:17:36
Gelogen. Nur set speak geht nicht.
Da bleiben $unnamedParams und $namedParams leer. Interessantes Detail am Rande: Genau das war der Grund, warum ich angefangen habe, das Modul umzubauen. Hat nämlich damals auch genau deswegen nicht funktioniert. :D
Irgendwie finde ich es (noch) nicht logisch, dass (nur) da die Listen leer sein sollen, müßte man sich ansehen, und an dem direkten join sollte es auch nicht liegen...? Habe mal ein Log eingebaut:

(Und was die anderen Meldungen angeht, würde mich auch interessieren, wo die herkommen; meine Zeilennummern waren schon wieder andere...)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

drhirn

Unsere Zeilennummer werden immer andere sein. Der GitHub-Stand ist nie der aktuellste. Das soll dich nicht beunruhigen.

@values ist leer


print Dumper([$anon,$h,$name,$command,@values]);

$VAR1 = [
          [],
          {
            'text' => 'test',
            'siteId' => 'wohnzimmer'
          },
          'Rhasspy',
          'speak'
        ];

Beta-User

#139
Was hast du eingegeben?

bzw. von wo kommt das Kommando?

Wenn FHEMWEB, muss man aufpassen, dass es parseParams-kompatibel ist, also in der Regel in Quotes packen;

Wenn wir das über "text=test" im Hash bekommen, müssen wir umpacken.

Anbei mal ein Versuch, wobei mir das seltsam vorkommt, dass das in der Form dann überhaupt an der Stelle aufschlägt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

drhirn

#140
Der Befehl lautete bis jetzt:
set Rhasspy speak siteId="wohnzimmer" text="das ist ein text"

Der Versuch ist durchwachsen. Jetzt geht auch textCommand nicht mehr. Weiß aber noch nicht, warum.

Hast du RHASSPY_allRhasspyShortcuts absichtlich nicht mehr drinnen?

--edit--
Tippfehler. Muss so heißen:

    $dispatch = {
        speak       => \&RHASSPY_speak,
        textCommand => \&RHASSPY_textCommand,
        play        => \&RHASSPY_playWav
    };

Beta-User

#141
Zitat von: drhirn am 01 März 2021, 16:30:36
Unsere Zeilennummer werden immer andere sein. Der GitHub-Stand ist nie der aktuellste. Das soll dich nicht beunruhigen.
na ja, in dem Fall ist es eher beuruhigend...

Hinweis: Wenn "mal wieder" Prototypen wegfallen, sollte FHEM auch wieder neu gestartet werden, das kann sonst komische Effekte geben - da waren ein paar dabei..., aktueller Stand:
ZitatTotal lines: 2140
Code lines: 1311
Comment lines: 312
Data lines: 1
Blank lines: 398
POD lines: 118
Total violations: 131
Severity 5: 22
Severity 4: 9
Severity 3: 100
Total subroutines: 59
Average McCabe: 7.88
Je nachdem würde mich dann auch interessieren, welche Sprache wir grade sprechen, rudimentäres English sollte zwar auch gehen, aber das ist in der Tat ein leerer Hash...

Zitat von: drhirn am 01 März 2021, 17:15:14
Der Befehl lautete bis jetzt:
set Rhasspy speak siteId="wohnzimmer" text="das ist ein text"

Der Versuch ist durchwachsen. Jetzt geht auch textCommand nicht mehr. Weiß aber noch nicht, warum.

Hast du RHASSPY_allRhasspyShortcuts absichtlich nicht mehr drinnen?
textCommand hatte ich verbogen :o , habe jetzt den Hash-Verweis auch noch entsprechend angepasst, siehe Anhang.

Für RHASSPY_allRhasspyShortcuts zähle ich noch einen (auskommentierten) Treffer => brauchen wir in der Form m.E. nicht mehr, ist durch den Attribut-Parser ersetzt.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

drhirn

Zitat von: Beta-User am 01 März 2021, 17:21:31
Hinweis: Wenn "mal wieder" Prototypen wegfallen, sollte FHEM auch wieder neu gestartet werden, das kann sonst komische Effekte geben

Was meinst du mit "Prototypen wegfallen"?
Und was ist das für eine interessante Auflistung?

ZitatJe nachdem würde mich dann auch interessieren, welche Sprache wir grade sprechen, rudimentäres English sollte zwar auch gehen, aber das ist in der Tat ein leerer Hash...

Ähm, kann gerade nicht folgen. Sprache?

ZitattextCommand hatte ich verbogen :o , habe jetzt den Hash-Verweis auch noch entsprechend angepasst, siehe Anhang.

Ja. Auch gefunden. Mein Edit war zur selben Zeit, wie dein Posting.

Zitat
Für RHASSPY_allRhasspyShortcuts zähle ich noch einen (auskommentierten) Treffer => brauchen wir in der Form m.E. nicht mehr, ist durch den Attribut-Parser ersetzt.

Verstehe. Perfekt!

Beta-User

Zitat von: drhirn am 01 März 2021, 17:28:56
Was meinst du mit "Prototypen wegfallen"?
Wenn aus
sub RHASSPY_getMapping($$$$;$) {sowas hier wird:
sub RHASSPY_getMapping {
ZitatUnd was ist das für eine interessante Auflistung?
http://perlcritic.com/critique/file => show stats


Ähm, kann gerade nicht folgen. Sprache?

Zitat von: Beta-User am 01 März 2021, 14:29:17
Könnte sein, dass das mit den Umlauts jetzt geht und dann auch die Rückmeldungen für Timer-Befehle in de und en funktionieren 8) . Ist aber nicht wirklich getestet...
Will sagen: Ich habe einen Versuch unternommen, den "Sprach-Hash" aufzubohren und an der Stelle mal anzuzapfen, weiß aber noch nicht, ob das funktioniert ::) ... (oder eben Fehler wirft).

Zitat
Ja. Auch gefunden. Mein Edit war zur selben Zeit, wie dein Posting.
Hatte ich dann nicht mehr gesehen, aber doppelt genäht und so...

Zitat
Verstehe. Perfekt!
So ähnlich sollte man dann einen Parser aufbauen, der die "Device-Attribute" auswertet; dafür bräuchten wir dann vermutlich einen setter oder wir müßten Events abhören (=> NotifyFn). Letzteres finde ich hier aber fast overdone, (wenn wir sonst keine benötigen und sowieso in der Eventloop eingeklinkt wären).

Ziel wäre, alles an relevanten Infos intern zu sammeln, damit man diese relativ aufwändigen Auswerte-Loops nicht immer fahren muss, sondern eben "einfach" den passenden Hash abfragt, ob da was ist...
Hoffe, es wird langsam etwas klarer, wie das gemeint ist ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Ähm, vielleicht zu dem hier noch nach etwas Nachdenken:

set Rhasspy speak siteId="wohnzimmer" text="das ist ein text"

Das wird man dann wohl jetzt eher so schreiben müssen:
set Rhasspy speak 'siteId="wohnzimmer" text="das ist ein text"'
Schlimm?

Ansonsten müssten wir uns was überlegen, wie man den Command entweder wieder zusammenbauen kann oder eben direkt den $h-Parameter weitergeben... ginge ja auch.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

drhirn

Hab ich schon versucht so. Das geht auch nicht.

Ansonsten zum Thema Timer: Der wird gesetzt. Und als Bestätigung dafür sagt mir die Sprachausgabe: "Timer in $room has been set to $value $unit". Und zwar wirklich genau so. Klingt lustig :D

Abgesehen davon, dass die Sprache schon wieder auf englisch gesetzt wurde. Nach einen Reload des Moduls.

Beta-User

#146
Hm, also:
Habe mal versucht, den Hash durchzureichen.

Und immerhin zieht er schon mal den richtigen Text raus (language wird jetzt über die DEF gesetzt, falls es vorher per Attribut am Device war).
Hab' da ne Kleinigkeit geändert, aber das Verhalten wird sich vermutlich (noch) nicht ändern...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

drhirn

Haha, das mit dem Anführungszeichen statt "q" hab ich mir auch überlegt. Aber ich hab mich nicht getraut ;)
Egal, es hätte eh nichts geändert.

Dafür funktioniert "speak" jetzt wieder wie gehabt. Super!

P.S.: Die Sprache ist bei mir über's DEF gesetzt

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

drhirn

Auch schon probiert. Dann wird sich darüber beschwert, dass die Variablen nicht deklariert sind. Was irgendwie klar ist.