Modulentwicklung für Rhasspy Sprachassistent

Begonnen von drhirn, 11 März 2021, 15:59:50

Vorheriges Thema - Nächstes Thema

drhirn

Wie wär's, wenn wir gemeinsam mal die Intents der Reihe nach durchgehen und hier unsere Erkenntnisse sammeln? Angefangen von der Definition des/der Devices, über Sentences und Testergebnisse?

drhirn

#286
Ich fange mal an. Mit SetOnOff. Das war leicht  ;)
Sentences bitte ergänzen, falls da noch jemand weitere Ideen hat.

https://forum.fhem.de/index.php/topic,113180.msg1147622.html#msg1147622

JensS

Na dass ist doch schon mal ein praktikabler Anfang.  :)
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Cordula

@Beta-User
Mit part=0 funktionierts.

Zum Thema Klein/Großschreibung habe ich inzwischen alles also rhasspyName und rhasspyRoom einheitlich auf Kleinschreibung umgestellt. Ebenso meine Einträge in den Slots und in der sentences.ini. Umlaute habe ich drin gelassen. Damit funktionierts, nachdem ich vorher diverse Probleme damit hatte. Oder wird hier inzwischen alles abgefangen?

Zum Thema SetOnOff:

Verwendest du keine rhasspyName,RhasspyMapping und rhasspyRoom ?
Beispiel für verändertes rhassspyMapping mit Antwort:
SetOnOff:cmdOn=Schalten on,cmdOff=Schalten off,response={ResponseOnOff($DEVICE)}
Anmerkung dazu: bei manchen Geräten ist die Antwort über den Status falsch, da sie zu langsam den Status ändern (z.B. mein 3D-Drucker)

Beispiel für Slots in der sentences.ini
\[($Aktion)] [(den|die|das)] ($de.fhem.Device){Device} [(im |in der)] [($de.fhem.Room){Room}] ($onoffvalue){Value}   

$Aktion

machs
mache
stells
schalt
stell
schalte
mach
fahre
stelle
fahr


$onoffvalue

(an|ein|aktiv|hoch|offen|auf):an
(aus|ab|deaktiv|runter|rein|zu):aus



drhirn

Zitat von: Cordula am 10 April 2021, 09:45:48
Verwendest du keine rhasspyName,RhasspyMapping und rhasspyRoom ?

Doch, normal schon. Das ist halt ein Beispiel mit genericDeviceType. Muss auch auch wer testen ;).

Die Slots hab ich in meiner produktiven Umgebung auch. Aber ich denke mir, um die Funktionsweise zu veranschaulichen, ist es ohne zusätzliche Slots einfacher. Das ist v.a. ein Rhasspy-Thema, das mit dem Modul eigentlich nichts zu tun hat.

drhirn


Cordula

Beim Thema genericDeviceType sollte noch ergänzt werden, welche hier unterstützt werden. Ich gehe davon aus, dass nicht alle in der Auswahl unterstützt werden.

Beta-User

ZitatVerwendest du keine rhasspyName,RhasspyMapping und rhasspyRoom ?
Vorab: bin erst am Einarbeiten in das Thema, ist noch unvollständig...

Name: zum großen Teil: ja
Mapping: fast alles derzeit über gDT
Room: ja, aber das meiste über rhasspyGroups

Groß/Kleinschreibung und $mutated_vovels sollten über gewisse Automatiken zwischenzeitlich weitgehend abgefangen werden und daher einige Probleme aus der Vergangenheit "Vergangenheit" sein. Kann aber nicht garantieren, bereits alles "erwischt" zu haben.
An sich sollte aber Groß/Kleinschreibung bei "aliasen", Gruppen und Räumen zwischenzeitlich keine Probleme mehr machen.


Generell fände ich es für künftige Leser einfacher, wenn die sentences-Geschichte und Tips&Tricks dazu in einem separaten Thread gebündelt würden. Hier geht ggf. sonst auch was anderes dazwischen unter?


Was Doku angeht:
Die Dreiteilung finde ich schwierig zu pflegen, und die (ungeschriebenen) Mindeststandards an cref sind eigentlich, dass man das Modul damit sinnvoll in Betrieb nehmen kann. Ergo gehört da eine kurze Beschreibung der vorhandenen intents ebenso rein wie mind. ein Beispielsatz.

Weniger Skrupel habe ich übrigens, was ggf. deswegen erforderliche häufigere commits ins svn angeht: Ist halt so, gewöhnt man sich dran und ist auch schnell gemacht (ich find's einfacher als github-commandline).
Kann dich gerne da etwas coachen und mime auch übergangsweise ggf. den 2. Maintainer; generell fände ich es langsam an der Zeit, das nach contrib einzuchecken (nächstes WE?). Dann wird es nämlich einfacher, die Dateien (und ggf. updates) in die eigene Installation zu holen.
(feedback auch zum Thema svn v.a. von unseren Testern und stillen Mitlesern hier wäre willkommen)
ZitatSobald rhasspyName definiert ist muss auch rhasspyRoom angegeben werden, weil dann der FHEM-room ignoriert wird. Ist das richtig?
Bitte prüfen. Gedacht ist es anders: Wenn rhasspyName angegeben ist, verdrängt das alle anderen Namen, wenn rhasspyRoom angegeben ist, dann wird das statt der allgemeinen rooms verwendet.

Zitat von: Cordula am 10 April 2021, 10:05:29
Beim Thema genericDeviceType sollte noch ergänzt werden, welche hier unterstützt werden. Ich gehe davon aus, dass nicht alle in der Auswahl unterstützt werden.
Welche Auswahl?
Falls es die Liste aus der cref ist: eigentlich schon, es kann aber sein, dass erforderliche Setter nicht identifiziert werden können und daher dann kein mapping erstellt werden kann.
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: Cordula am 10 April 2021, 10:05:29
Beim Thema genericDeviceType sollte noch ergänzt werden, welche hier unterstützt werden. Ich gehe davon aus, dass nicht alle in der Auswahl unterstützt werden.

Habe ich auch schon mal gefragt ;D
https://forum.fhem.de/index.php/topic,119447.msg1147238.html#msg1147238

Es sind:
* switch
* light
* thermostat
* blind
* media

@Beta-User: Hat man z.B. schon ein alexa-fhem, ist das gDT schon da. Da gibt's dann eine Auswahlliste. Siehe Screenshot.

JensS

#294
*window wäre auch ganz nett für "Sind alle Fenster geschlossen?".

Zitat von: Cordula am 10 April 2021, 09:45:48
SetOnOff:cmdOn=Schalten on,cmdOff=Schalten off,response={ResponseOnOff($DEVICE)}
Anmerkung dazu: bei manchen Geräten ist die Antwort über den Status falsch, da sie zu langsam den Status ändern (z.B. mein 3D-Drucker)
ResponseOnOff fragt den aktuellen Status ab. Eventuell wäre es besser, den gewollten Status zu verwenden. Dazu hatte ich mal was auf die Schnelle geschrieben:SetOnOff:cmdOn={fhem("set $DEVICE on;setreading $DEVICE rhasspySTATE an")},cmdOff={fhem("set $DEVICE off;setreading $DEVICE rhasspySTATE aus")},response={my $Name = (split(/,/,AttrVal($DEVICE,"rhasspyName","error")))[0];my $Status = ReadingsVal($DEVICE,"rhasspySTATE","im unbekannten Status");return "Ok - $Name ist $Status"}

Keine Ahnung, ob das jetzt noch richtig ist.

Zitat von: Cordula am 10 April 2021, 09:45:48
(an|ein|aktiv|hoch|offen|auf):an
(aus|ab|deaktiv|runter|rein|zu):aus
Hatte ich so verstanden, dass nach der neuen Definition :on bzw. :off verwendet werden soll.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

drhirn

#295
Zitat von: Beta-User am 10 April 2021, 10:07:30
Generell fände ich es für künftige Leser einfacher, wenn die sentences-Geschichte und Tips&Tricks dazu in einem separaten Thread gebündelt würden. Hier geht ggf. sonst auch was anderes dazwischen unter?

Ja, wahrscheinlich. Ich hab allerdings aber auch Angst, dass dann wichtige Informationen auf zwei Threads verteilt sind.

Zitat von: Beta-User am 10 April 2021, 10:07:30
Die Dreiteilung finde ich schwierig zu pflegen, und die (ungeschriebenen) Mindeststandards an cref sind eigentlich, dass man das Modul damit sinnvoll in Betrieb nehmen kann. Ergo gehört da eine kurze Beschreibung der vorhandenen intents ebenso rein wie mind. ein Beispielsatz.

Ok. Aber wirklich nur kurz.

Zitat von: Beta-User am 10 April 2021, 10:07:30
Weniger Skrupel habe ich übrigens, was ggf. deswegen erforderliche häufigere commits ins svn angeht: Ist halt so, gewöhnt man sich dran und ist auch schnell gemacht (ich find's einfacher als github-commandline).
Kann dich gerne da etwas coachen und mime auch übergangsweise ggf. den 2. Maintainer; generell fände ich es langsam an der Zeit, das nach contrib einzuchecken (nächstes WE?). Dann wird es nämlich einfacher, die Dateien (und ggf. updates) in die eigene Installation zu holen.
(feedback auch zum Thema svn v.a. von unseren Testern und stillen Mitlesern hier wäre willkommen)

Nun, ich bin ja eher zur GitHub-Fraktion zugehörig. Finde ich nämlich einfacher als SVN ;).
Ich hab mir das Repo nach /opt/fhem/FHEM geklont und hab mit einem git pull (und ev. git switch <branch> bzw. git checkout <branch>) sehr einfach die aktuellste Version.
Nach contrib möchte ich erst, nachdem die Doku vollständig und alles getestet ist. Sonst ist mir das zu peinlich ;D

Beta-User

Zitat von: drhirn am 10 April 2021, 09:21:41
Bei SetNumeric hamma bei FS20 aber ein Problem. Die werden mit dim06%, dim12%, etc. gedimmt. Eher blöd :(
Wieder ein paar Anmerkungen:
- Nachträgliche Edits gehen gerne unter; hoffe, du führst anderweitig eine Liste
- gDT ist eine Art "best guess". Exoten oder Oldtimer kann es im Moment nicht, und ich bin auch unsicher, ob man das integrieren sollte. Wer "sowas" hat, "muss" es halt zu Fuß machen...
- gDT ist eine Art "best guess". Daher sind ggf. im Moment (z.B. bei "media") Dinge drin, die das Gerät ggf. nicht kann. Ggf. können wir das ausbauen, um z.B. nur wirklich vorhandene setter auch zu mappen.
Das Ganze ist im Moment eher eine (überraschend gut funktionierende) Machbarkeitsstudie :) .
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

Das war ja gar nicht nachträglich!? ;D

ZitatgDT ist eine Art "best guess". Exoten oder Oldtimer kann es im Moment nicht, und ich bin auch unsicher, ob man das integrieren sollte. Wer "sowas" hat, "muss" es halt zu Fuß machen...

Da bin ich bei dir. Die FHEM-Demo ist halt in dem Fall für Test nur leider eher wenig brauchbar.

ZitatgDT ist eine Art "best guess". Daher sind ggf. im Moment (z.B. bei "media") Dinge drin, die das Gerät ggf. nicht kann. Ggf. können wir das ausbauen, um z.B. nur wirklich vorhandene setter auch zu mappen.

Müssen wir nicht. Kann's halt zu viel. Besser als zu wenig.

ZitatDas Ganze ist im Moment eher eine (überraschend gut funktionierende) Machbarkeitsstudie :) .

Funktioniert wirklich gut!
Aber ich bereu's eh schon, dass ich drauf herum geritten bin. Das verwirrt nur. In Zukunft wird wieder mit den rhasspy-Attributen gearbeitet.

drhirn


drhirn

Die neue "Default-Branch" ist jetzt 0.4.7b.