FHEM und Rhasspy

Begonnen von drhirn, 28 Juli 2020, 14:28:50

Vorheriges Thema - Nächstes Thema

drhirn

Liegt daran, dass du kein Device übergibst.

So sollte es gehen:
(schalte|mach|mache) [Licht]{Device} [(im|an der|in der)] $rooms{Room} $values{Value}

JensS

Hallo Roman,

im Modul habe ich das nicht gesehen. Man könnte das aber über z.B. ein dummy+notify abbilden.

In der sentences.ini sollten keine Device- oder Raumnamen stehen. Diese werden von FHEM mit updateSlots übergeben und befinden sich dann in den Slotdateien de.fhem.Device und de.fhem.Room.
Das Gleiche gilt auch für Sendernamen, Farben und NumericTypen.

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.

Dreggwatz

Zitat von: JensS am 06 Januar 2021, 20:08:45
Ein paar Randinfos täten gut. Du kannst die IPs ja leicht abändern aber es muss erkenntlich sein, ob es sich um dieselben Geräte handelt...
MQTT-Server IP:Port (mosquitto o.a)
FHEM-Server: IP
Rhasspy-Bridge-Device in FHEM: komplettes List

Versuche erstmal ein dummy zu schalten:

define RhasspyDummySwitch dummy
attr RhasspyDummySwitch room Rhasspy
attr RhasspyDummySwitch rhasspyName Licht
attr RhasspyDummySwitch rhasspyRoom wohnzimmer
attr RhasspyDummySwitch rhasspyMapping SetOnOff:cmdOn=on,cmdOff=off
attr RhasspyDummySwitch setList on off


Anschließend die Daten mit dem FHEM-Rhasspy-Device zu Rhasspy schicken.

set Rhasspy-Bridge updateSlots
set Rhasspy-Bridge trainRhasspy

Hier sicherheitshalber der Inhalt von senteces.ini:

[de.fhem:SetOnOff]
schalte (den|die|das) ($de.fhem.Device){Device} [($de.fhem.Room){Room}] (an|aus){Value}


Schalte das Licht im Wohnzimmer an - sollte dann zum Ergebnis führen.

Gruß Jens

MQTT-Server IP:Port (mosquitto o.a)

Internals:
   DEF        10.0.0.10:1883
   DeviceName 10.0.0.10:1883
   FD         30
   FUUID      5ff35463-f33f-8381-6010-4a15cc3ff250097f
   NAME       Mosquitto
   NOTIFYDEV  global
   NR         188
   NTFY_ORDER 50-Mosquitto
   PARTIAL   
   STATE      opened
   TYPE       MQTT
   buf       
   msgid      22
   ping_received 1
   timeout    60
   READINGS:
     2021-01-07 19:40:03   connection      active
     2021-01-05 15:42:43   state           opened
   messages:
Attributes:
   group      MQTT
   icon       mqtt_broker
   room       MQTT,VCCU


FHEM-Server: IP
10.0.0.10:8083

Rhasspy-Bridge-Device in FHEM: komplettes List

Internals:
   CFGFN     
   FUUID      5ff5e679-f33f-8381-30e0-560e72e24fffccbe
   IODev      Mosquitto
   NAME       Rhasspy
   NR         7848
   STATE      ???
   TYPE       MQTT_DEVICE
   READINGS:
     2021-01-07 19:15:51   transmission-state unsubscription acknowledged
   message_ids:
   publishSets:
   sets:
   subscribe:
   subscribeExpr:
   subscribeQos:
   subscribeReadings:
     hermes/asr/startListening:
     hermes/asr/stopListening:
     hermes/asr/textCaptured:
     hermes/asr/toggleOff:
     hermes/asr/toggleOn:
     hermes/audioServer/default/audioFrame:
     hermes/audioServer/default/playBytes/49f66966-e544-4898-9d97-6f448fe2afc7:
     hermes/audioServer/default/playFinished:
     hermes/intent/de.fhem:SetOnOff:
     hermes/nlu/intentNotRecognized:
     hermes/nlu/intentParsed:
     hermes/nlu/query:
     hermes/tts/say:
     hermes/tts/sayFinished:
Attributes:
   IODev      Mosquitto
   rhasspyRoom Wohnzimmer
   room       Rhasspy


set Rhasspy updateSlots
set Rhasspy trainRhasspy

lässt sich nicht ausführen, da ein "set" vorhanden?!

JensS

attr Rhasspy rhasspyMaster http://10.0.0.10:12101
Falls dein Rhasspy auf derselben Maschine läuft.
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.

Roman

#94
Zitat von: JensS am 07 Januar 2021, 18:33:28
Hallo Roman,

im Modul habe ich das nicht gesehen. Man könnte das aber über z.B. ein dummy+notify abbilden.

In der sentences.ini sollten keine Device- oder Raumnamen stehen. Diese werden von FHEM mit updateSlots übergeben und befinden sich dann in den Slotdateien de.fhem.Device und de.fhem.Room.
Das Gleiche gilt auch für Sendernamen, Farben und NumericTypen.

Gruß Jens

Hi,
Dank e für die Info, aber bei updateSlots bekomme ich noch folgenden Fehler
ZitatlastHttpApiResponse: ERROR: /api/slots: malformed or unsupported URL
ein Aufruf vom <Rhasspy-IP>:12101/api/slots im Browser aber klappt und ich bekomme alle slots angezeigt

Ich hab mich hier für die sentences und Slots an die rhasspy-Doku gehalten, und hatte das updateSlots so gar nicht auf dem Schirm.

ZitatSo sollte es gehen:
Code: [Auswählen]

(schalte|mach|mache) [Licht]{Device} [(im|an der|in der)] $rooms{Room} $values{Value}

dann wird als Device 'Licht' ausgegeben. Dann müsste ich allen Lampen den RhasspyNamen 'Licht' geben, dann funktioniert zwar das Schalten mit 'schalte Licht im Wohnzimmer an', aber nicht mehr mit 'Schalte Wohnzimmerlampe an'

Gruß
Roman

JensS

#95
In FHEM hast du ein Device vom Typ RHASSPY. Ich gehe mal davon aus, dass es RhassyBridge heißt.
Dazu kommt der eigentliche Rhasspy-Server z.B.  rhasspy.
Nun musst du der RhasspyBridge die Adresse des Rhasspy-Servers mitgeben.
Das passiert mit attr RhasspyBridge rhasspyMaster http://rhasspy:12101
Anschließend in FHEM auf RhassyBridge gehen und set RhasspyBridge updateSlots
set RhasspyBridge trainRhasspy
aufrufen.

Danach hast du die Device in de.fhem.Device und kannst darauf mit ($de.fhem.Device) zugreifen. Mit dem anschließenden {Device} wird das erkannte Gerät an FHEM übergeben.
Das hat den großen Vorteil, dass die senteces.ini nicht angepasst werden muss, wenn Devices in FHEM geändert werden.
Das Gleiche gilt für Rooms etc..
[de.fhem:SetOnOff]
schalte (den|die|das) ($de.fhem.Device){Device} [($de.fhem.Room){Room}] (an|aus){Value}

In FHEM kannst du den Geräten mehrere Namen geben. Diese müssen mit einem Komma getrennt werden (ohne Leerzeichen dazwischen).


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.

Roman

#96
Hallo JensS,

danke, das war's, jetzt funktioniert auch updateSlots
und 'schalte Licht im <Raum> an' klappt nun auch.

Gruß
Roman

Dreggwatz

Zitat von: JensS am 07 Januar 2021, 19:51:51
attr Rhasspy rhasspyMaster http://10.0.0.10:12101
Falls dein Rhasspy auf derselben Maschine läuft.

Super Sache jetzt funktioniert es (zwar immer noch ohne wakeword) aber das dummy lies sich schon mal einschalten! Danke Dir  8)
Warum muss man beim RhasspyBridge einen Raum angeben? Nächste Hürde wird das wakeword...


Internals:
   CFGFN     
   DEF        Mosquitto Wohnzimmer
   FUUID      5ff76e08-f33f-8381-cd44-b3ae6fad3cdde2af
   IODev      Mosquitto
   MODULE_VERSION 0.2
   NAME       RhasspyBridge
   NOTIFYDEV  Mosquitto Wohnzimmer
   NR         16219
   STATE      ???
   TYPE       RHASSPY
   READINGS:
     2021-01-07 21:29:53   lastHttpApiResponse Training completed in 0.32 second(s)
     2021-01-07 21:35:12   lastIntentPayload {"Device":"Licht","Room":"Wohnzimmer","Value":"an","input":"schalte das Licht Wohnzimmer an","intent":"SetOnOff","probability":1,"rawInput":"schalte das licht wohnzimmer an","requestType":"voice","sessionId":"d1c733d0-95ad-48b6-8152-e5625bf8934f","siteId":"default"}
     2021-01-07 21:35:12   lastIntentTopic hermes/intent/de.fhem:SetOnOff
     2021-01-07 21:35:12   responseType    voice
     2021-01-07 21:35:12   transmission-state incoming publish received
     2021-01-07 21:35:12   voiceResponse   Mache ich doch sehr gerne
   helper:
     defaultRoom Wohnzimmer
   message_ids:
   subscribe:
     hermes/intent/+
     hermes/dialogueManager/sessionStarted
     hermes/dialogueManager/sessionEnded
   subscribeExpr:
     ^hermes\/intent\/([^/]+)$
     ^hermes\/dialogueManager\/sessionStarted$
     ^hermes\/dialogueManager\/sessionEnded$
   subscribeQos:
     hermes/dialogueManager/sessionEnded 0
     hermes/dialogueManager/sessionStarted 0
     hermes/intent/+ 0
Attributes:
   IODev      Mosquitto
   icon       mqtt_bridge_1
   rhasspyMaster http://10.0.0.10:12101
   room       Rhasspy

JensS

#98
Na prima! Der Intent von "set RhasspyBridge speak hallo" muss einem Rhasspy zugeordnet werden. Bei einem Multiroomsystem ist dabei die Angabe einens Standardraums hilfreich.

Wakeword - du scheinst einen Dockercontainer zu nutzen. Kann sein, dass die Sprachdaten aus dem Container müssen und es nicht können. Da habe ich aber zu weinig Ahnung davon.
Versuche mal den Dockercontainer mit einer zweiten Portfreigabe im Container aufzurufen (-p 12202:12202). In Rhasspy kannst du dann auf den Port zugreifen:   "microphone": {
        "arecord": {
            "device": "default",
            "siteId": "default",
            "udp_audio_host": "127.0.0.1",
            "udp_audio_port": "12202"
        },
        "system": "arecord"
    },
    "wake": {
        "satellite_site_ids": "default",
        "snowboy": {
            "apply_frontend": true,
            "model": "alexa.umdl",
            "sensitivity": "0.50",
            "udp_audio": "127.0.0.1:12202"
        },
        "system": "snowboy"
    }

Statt 127.0.0.1 versuche auch 10.0.0.10.
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

Wakeword: Selbes Problem bei mir. Das ist derzeit ein Show-Stopper. Es funktioniert hin und wieder. Aber sehr schlecht. Und nur, wenn's absolut ruhig ist, während ich das Wakeword aus kurzer Distanz laut spreche.
Habe zum Testen mal das snips-satellite auf exakt der selben Hardware installiert, das funktioniert super.
Keine Ahnung, wo das Problem ist. Könnte aber schon Docker sein. Port glaube ich aber nicht, sonst würde es nie funktionieren.

JensS

Da ich kein Docker nutze, kann ich nur raten...
@drhirn
Bei deinem Rhasspy-Docker scheint die Mikrolautstärke zu niedrig eingestellt zu sein. Keine Ahnung, ob Docker direkt auf die Hardware zugreift. Wenn ja, müsste man die Lautstärke im Container anpassen.
docker exec -it rhasspy bash
In der Bash alsamixer aufrufen - vielleicht geht's.

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

Die Sound-Hardware wird direkt durchgeschliffen. Hab gerade - wie von dir vorgeschlagen - alsamixer local und im Container verglichen. Sind identisch, obwohl ich gesten lokal die Settings geändert habe.

Wie hast du Rhasspy installiert? Virtual Env?

JensS

#102
Ich habe die Installation mit dem Debian-Paket https://rhasspy.readthedocs.io/en/latest/installation/#debian durchgeführt und per Hand mit "rhasspy -p de" aufgerufen und konfiguriert.
Dass rhasspy auf bei einem Neustart gestartet wird, rufe ich es mit nohup über einen Cronjob auf.
ln -s /dev/null /root/nohup.out
crontab -e

In crontab folgende Zeile eingefügt:@reboot /usr/bin/nohup /usr/bin/rhasspy &


Gruß Jens

p.s. Für Suchende:
Das Debianpaket unter /opt abspeichern und mit "apt install /opt/rhasspy_..." aufrufen. Wenn man das im Homeverzeichnis macht, kommt es zu Berechtigungsproblemen.
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

Perfekt, danke. Ich probier das mal.

Dreggwatz

ja drhirn probiere mal ob das besser läuft ;)
Ich habe jetzt den Docker komplett runtergeworfen und neu aufgespielt, diesmal ohne den Zusatzport 12183 da ich dies mit Mosquitto Broker wohl nicht brauche.
Auch hab ich erstmal die Zusatz wakeups in Porcupine weggelassen.
Das Snowboy wakeup funktioniert nun schon mal...
READINGS:
     2021-01-08 16:39:18   lastHttpApiResponse Training completed in 1.80 second(s)
     2021-01-08 16:46:50   lastIntentPayload {"Device":"Licht","Room":"Wohnzimmer","Value":"an","input":"schalte das Licht Wohnzimmer an","intent":"SetOnOff","probability":1,"rawInput":"schalte das licht wohnzimmer an","requestType":"voice","sessionId":"default-snowboy-629db0d0-e0ba-404a-ab91-30a7ccbd1473","siteId":"default"}
     2021-01-08 16:46:50   lastIntentTopic hermes/intent/de.fhem:SetOnOff
     2021-01-08 16:46:52   listening_wohnzimmer 0
     2021-01-08 16:46:50   responseType    voice
     2021-01-08 16:46:52   transmission-state incoming publish received
     2021-01-08 16:46:50   voiceResponse   Mache ich doch sehr gerne


@Jens
mit welcher Hardware hast Du Dein Multiroom aufgebaut?