SNIPS: Sprachsteuerung (mittlerweile auch per Textcommands) über snips.ai

Begonnen von Thyraz, 21 Juli 2018, 20:28:48

Vorheriges Thema - Nächstes Thema

JensS

Poste mal die Ausgaben von "aplay -L", "arecord -L" und deine aktuelle asound.conf.
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.

Che007

    Discard all samples (playback) or generate zero samples (capture)
default
playback
MPDplug
MPDvol
capture
dmixed
array
sysdefault:CARD=ALSA
    bcm2835 ALSA, bcm2835 ALSA
    Default Audio Device
dmix:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct sample mixing device
dmix:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct sample mixing device
dsnoop:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct sample snooping device
dsnoop:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct sample snooping device
hw:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Direct hardware device without any conversions
hw:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Direct hardware device without any conversions
plughw:CARD=ALSA,DEV=0
    bcm2835 ALSA, bcm2835 ALSA
    Hardware device with all software conversions
plughw:CARD=ALSA,DEV=1
    bcm2835 ALSA, bcm2835 IEC958/HDMI
    Hardware device with all software conversions


arecord -L
default
playback
MPDplug
MPDvol
capture
dmixed
array
sysdefault:CARD=seeed4micvoicec
    seeed-4mic-voicecard,
    Default Audio Device
dmix:CARD=seeed4micvoicec,DEV=0
    seeed-4mic-voicecard,
    Direct sample mixing device
dsnoop:CARD=seeed4micvoicec,DEV=0
    seeed-4mic-voicecard,
    Direct sample snooping device
hw:CARD=seeed4micvoicec,DEV=0
    seeed-4mic-voicecard,
    Direct hardware device without any conversions
plughw:CARD=seeed4micvoicec,DEV=0
    seeed-4mic-voicecard,
    Hardware device with all software conversions


Mit der asound.conf habe ich mit Halbwissen rumgespielt. Letzter Stand:
# The IPC key of dmix or dsnoop plugin must be unique
# If 555555 or 666666 is used by other processes, use another one


# use samplerate to resample as speexdsp resample is bad
defaults.pcm.rate_converter "samplerate"

pcm.!default {
    type asym
    playback.pcm "playback"
    capture.pcm "capture"
}

pcm.playback {
    type plug
    slave.pcm "dmixed"
}

pcm.MPDplug {
    type softvol
    slave.pcm "dmixed"
    control {
        name "MPDvolume"
        card 0
    }
}

ctl.MPDvol {
    type hw
    card 0
}

pcm.capture {
    type plug
   slave.pcm "hw:1,0"
}

pcm.dmixed {
    type dmix
    ipc_key 555555
    ipc_perm 0666
    ipc_key_add_uid false
    slave.pcm "hw:0,0"

}

pcm.array {
    type dsnoop
    slave {
        pcm "hw:0,0"
        channels 2
    }
    ipc_key 666666
}


Bekomme bei sam test speaker folgende Fehlermeldung:
✖ Error: ALSA lib pcm_dmix.c:1109:(snd_pcm_dmix_open) unable to open slave

JensS

# The IPC key of dmix or dsnoop plugin must be unique
# If 555555 or 666666 is used by other processes, use another one


# use samplerate to resample as speexdsp resample is bad
defaults.pcm.rate_converter "samplerate"

pcm.!default {
    type asym
    playback.pcm "playback"
    capture.pcm "capture"
}

pcm.playback {
    type plug
    slave.pcm "Snips"
}

pcm.Snips {
    type softvol
    slave.pcm "dmixed"
    control {
name "Snips"
card "ALSA"
    }
}

ctl.Snips {
    type hw
    card "ALSA"
}

pcm.MPDplug {
    type plug
    slave.pcm "MPDvol"
}

pcm.MPDvol {
    type softvol
    slave.pcm "dmixed"
    control {
name "MPDvolume"
card "ALSA"
    }
}

ctl.MPDvol {
    type hw
    card "ALSA"
}

pcm.capture {
    type plug
    slave.pcm "array"
}

pcm.dmixed {
    type dmix
    ipc_key 555555
    ipc_perm 0666
    ipc_key_add_uid false
    slave {
    pcm "hw:ALSA"
    period_time 0
    period_size 1024
    buffer_size 8192
    }
    bindings {
0 0
1 1
    }
}

pcm.array {
    type dsnoop
    slave {
        pcm "hw:seeed4micvoicec"
        channels 2
    }
    ipc_key 666666
}

Inhalt kopieren
cat > /etc/asound.conf
rechte Maustaste ins putty-Fenster klicken
mit Strg+c abschließen

systemctl restart snips*
alsamixer
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.

Che007

Im Alsamixer
Gerät: bcm2835 ALSA                              F1:  Hilfe                │
│    Chip: Broadcom Mixer                            F2:  System-Informationen │
│ Ansicht: F3:[Wiedergabe] F4: Aufnahme  F5: Alle    F6:  Soundkarte auswählen │
│ Element: PCM [dB-Änderung: 3,46]                   Esc: Beenden              │
│                                                                              │
│                          ┌──┐       ┌──┐       ┌──┐                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          │▒▒│       │▒▒│       │▒▒│                          │
│                          ├──┤       └──┘       └──┘                          │
│                          │OO│                                                │
│                          └──┘                                                │
│                           98      100<>100   100<>100                        │
│                      <   PCM    >MPDvolume    Snips                          │
└──────────────────────────────────────────────────────────────────


MPD funktioniert. Auch über Snips, aber von Snips kommt kein Mucks.

sam test speaker
Testing speaker
✖ Error: ALSA lib pcm_dmix.c:1109:(snd_pcm_dmix_open) unable to open slave


JensS

Hast du das Device in mpd.conf auf "plug:MPDplug" geändert? Wenn du dort direkt die Hardware nutzt, blockierst du das Device für Snips.
Mach mal einen neuen Thread auf.
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.

Che007

Danke Jens für deine Mühe.
Ich habe es geändert, im mpd.log erscheint jedoch die Meldung:

ALSA lib pcm_dmix.c:1109:(snd_pcm_dmix_open) unable to open slave
Jun 13 06:30 : alsa_output: Failed to open "My ALSA Device" [alsa]: Failed to open ALSA device "plug:MPDplug": Invalid argument


Edit:
Habe nun einen neuen Thread eröffnet:
https://forum.fhem.de/index.php/topic,101403.0.html

Che007

Hallo zusammen,

habe hier auf Anhieb nichts gefunden.
Zurzeit schalte ich die Somfys Rollos wunderbar über Snips. Mir fehlt jedoch das Kommando, die Rollo auf Position "My" zu fahren:

eventMap    on:ab off:auf go-my:my on:close off:open

Ist dies bereits schon mit dem SnipsMapping möglich?

tehlers

Hallo,

ich beschäftige mich seit einer Woche auch mit verschiedenen Spracherkennungsystemen mit lokaler Sprachauswertung und bin am Ende bei Snips gelandet, vor allem wegen des super FHEM-Moduls, danke an @Thyraz!

Nun habe ich ein Problem mit den verschiedenen Räumen. Wenn ich die Standard-App in Snips von @Thyraz benutze, sind ja alle Trainings mit "Standardgerät" und "Standardraum" erzeugt. Erst durch den push via MQTT werden die eigentlichen Räume und Geräte gesetzt. Bei "Standardgerät" funktioniert das ja auch scheinbar, denn nach der "injection" ist bspw. das Gerät Lampe vorhanden und kann geschaltet werden.

Aber jeglicher Versuch einen anderen Raum zu nennen, scheitert. Es funktioniert nur, wenn ich raumübergreifend eindeutige Namen benutze. Ansonsten wird immer der Standardraum des MQTT benutzt. Also bspw:

fhem> set Snips textCommand Schalte Lampe im Schlafzimmer ein

Es geht die Lampe im Wohnzimmer (MQTT Standard [define Snips SNIPS SnipsMQTT wohnzimmer]) an.

fhem> set Snips textCommand Schalte Schlafzimmerlampe an

Es geht die Schlafzimmerlampe an, da "Schlafzimmerlampe" eben ein raumübergreifend eindeutiger snipsName ist, Lampe ist aber sowohl für die Wohnzimmerlampe, als auch für die Schlafzimmerlampe ein snipsName.

Hier die (verkürzte) fhem-Config:


define SnipsMQTT MQTT 192.168.1.77:1883
define Snips SNIPS SnipsMQTT wohnzimmer

attr df snipsName Deckenfluter,Lampe,Licht,wohnzimmerlampe,wohnzimmerlicht,licht_im_wohnzimmer,lampe_im_wohnzimmer
attr df snipsRoom wohnzimmer
attr df snipsMapping SetOnOff:cmdOn=on,cmdOff=off \
GetOnOff:currentVal=state,valueOff=off,valueOn=on \
SetNumeric:currentVal=brightness,cmd=dim,step=20,type=Helligkeit \
GetNumeric:currentVal=brightness,type=Helligkeit

attr lampe_sz_dev snipsName Lampe,Licht,schlafzimmerlampe,schlafzimmerlicht,licht_im_schlafzimmer,lampe_im_schlafzimmer
attr lampe_sz_dev snipsRoom schlafzimmer
attr lampe_sz_dev snipsMapping SetOnOff:cmdOn=on,cmdOff=off \
GetOnOff:currentVal=state,valueOff=off,valueOn=on


Weiß jemand was ich falsch mache? Ich habe schon die Intents bei Snips geforkt und alle Trainings um Wohnzimmer und Schlafzimmer erweitert, dann erkennt der Assistent im Browser die Befehle auch mit meinen Räumen. Das ist im Übrigen auch interessant: Bei den Devices musste ich nur die Namen als Device-Namen zufügen, danach hat der Assistent beim Test die Devices korrekt zugeordnet, bei den Räumen hat das erst geklappt, nachdem ich die Namen auch in den Trainings zugefügt habe.

Viele Grüße

Tim

drhirn


tehlers

Hi,

Zitat von: drhirn am 17 Juni 2019, 18:22:06
Was sagt denn sam watch dazu? Erkennt das die Raumangabe?

also ich habe die alten Ausgaben nicht mehr (und scheinbar wird der Console-Output nicht vollständig geloggt). Aktuell habe ich die selbsterstellten Trainings mit Wohnzimmer und Schlafzimmer laufen. Da wird der Raum eigentlich erkannt (und ich meine, dass das vorher nicht der Fall war, aber das müsste ich dann nochmal mit einer originalen "FHEM-App" aus dem Snips-Store testen). Also aktuell sieht es so aus:


[19:02:36] Watching on localhost:1883 (MQTT)
[19:02:39] [Hotword] detected on site default, for model hey_snips
[19:02:39] [Asr] was asked to stop listening on site default
[19:02:39] [Hotword] was asked to toggle itself 'off' on site default
[19:02:39] [Dialogue] session with id '40250d72-5db3-4da1-8bc4-14c389fb6013' was started on site default
[19:02:39] [AudioServer] was asked to play a wav of 41.1 kB with id 'd571d558-04c0-4721-b1a2-7d85180a9b0d' on site default
[19:02:39] [AudioServer] finished playing wav with id 'd571d558-04c0-4721-b1a2-7d85180a9b0d'
[19:02:39] [Asr] was asked to listen on site default
[19:02:43] [Asr] captured text "schalte die lampe im schlafzimmer an" in 3.0s
[19:02:43] [Asr] was asked to stop listening on site default
[19:02:43] [AudioServer] was asked to play a wav of 93.1 kB with id '852546c6-6e39-4502-a450-0b9cdd021a55' on site default
[19:02:45] [AudioServer] finished playing wav with id '852546c6-6e39-4502-a450-0b9cdd021a55'
[19:02:45] [Nlu] was asked to parse input "schalte die lampe im schlafzimmer an"
[19:02:45] [Nlu] detected intent tehlers:SetOnOff with confidence score 0.922 for input "schalte die lampe im schlafzimmer an"
              Slots ->
                 Device -> Lampe (confidence: 1.000)
                   Room -> Schlafzimmer (confidence: 1.000)
                  Value -> an (confidence: 0.716)
[19:02:45] [Dialogue] New intent detected tehlers:SetOnOff with confidence 0.922
              Slots ->
                 Device -> Lampe (confidence: 1.000)
                   Room -> Schlafzimmer (confidence: 1.000)
                  Value -> an (confidence: 0.716)
[19:02:45] [Nlu] was asked to parse input "schalte die standstandardsendergerät im standardgerät an"
[19:02:45] [Nlu] detected intent tehlers:SetOnOff with confidence score 0.900 for input "schalte die standstandardsendergerät im standardgerät an"
              Slots ->
                 Device -> Standardgerät
                  Value -> an
[19:02:45] [Dialogue] was ask to end session with id 40250d72-5db3-4da1-8bc4-14c389fb6013 by saying 'Ok.'
[19:02:45] [Tts] was asked to say "Ok."
[19:02:45] [AudioServer] was asked to play a wav of 19.5 kB with id '1cbdaae2-da40-4557-8f49-71f91159f4bc' on site default
[19:02:45] [AudioServer] finished playing wav with id '1cbdaae2-da40-4557-8f49-71f91159f4bc'
[19:02:46] [Tts] finished speaking with id 'f52fb15b-07f5-4ac5-941d-8a11d1cb2e2c'
[19:02:46] [Dialogue] session with id '40250d72-5db3-4da1-8bc4-14c389fb6013' was ended on site default. The session ended as expected
[19:02:46] [Asr] was asked to stop listening on site default
[19:02:46] [Hotword] was asked to toggle itself 'on' on site default


Und es geht die Lampe im Wohnzimmer an. :)

tehlers

So, jetzt nochmal mit aktualisiertem fhem (5.9) und from scratch mit original FHEM-App und danach "set Snips updateModel" (leider das gleiche Problem und es wird genauso "schlafzimmer" erkannt):


[20:16:19] [AudioServer] finished playing wav with id 'dc5133d0-1b06-4353-aab2-666b439f36a5'
[20:16:19] [Tts] finished speaking with id '4e8e06e3-30f4-4206-aa48-d85fc23261ae'
[20:16:19] [Dialogue] session with id 'b814734e-7759-4a1f-a583-418624fa90ad' was ended on site default. The session ended as expected
[20:16:19] [Asr] was asked to stop listening on site default
[20:16:19] [Hotword] was asked to toggle itself 'on' on site default
[20:16:21] [Hotword] detected on site default, for model hey_snips
[20:16:21] [Asr] was asked to stop listening on site default
[20:16:21] [Hotword] was asked to toggle itself 'off' on site default
[20:16:21] [Dialogue] session with id 'c4b92d06-0b2b-444a-a8c3-3c4551ebab30' was started on site default
[20:16:21] [AudioServer] was asked to play a wav of 41.1 kB with id 'ad55d5db-1637-4a3b-aca1-ca8a3bf52dee' on site default
[20:16:21] [AudioServer] finished playing wav with id 'ad55d5db-1637-4a3b-aca1-ca8a3bf52dee'
[20:16:21] [Asr] was asked to listen on site default
[20:16:26] [Asr] captured text "lampe im schlafzimmer einschalten" in 4.0s
[20:16:26] [Asr] was asked to stop listening on site default
[20:16:26] [AudioServer] was asked to play a wav of 93.1 kB with id 'ff7d8431-a927-455c-8de0-6ace66286176' on site default
[20:16:27] [AudioServer] finished playing wav with id 'ff7d8431-a927-455c-8de0-6ace66286176'
[20:16:27] [Nlu] was asked to parse input "lampe im schlafzimmer einschalten"
[20:16:27] [Nlu] detected intent Thyraz:SetOnOff with confidence score 0.755 for input "lampe im schlafzimmer einschalten"
              Slots ->
                  Room -> schlafzimmer (confidence: 1.000)
                 Value -> an (confidence: 1.000)
[20:16:27] [Dialogue] New intent detected Thyraz:SetOnOff with confidence 0.755
              Slots ->
                  Room -> schlafzimmer (confidence: 1.000)
                 Value -> an (confidence: 1.000)
[20:16:27] [Nlu] was asked to parse input "standstandardsendergerät im standardgerät einschalten"
[20:16:27] [Nlu] detected intent Thyraz:SetOnOff with confidence score 0.788 for input "standstandardsendergerät im standardgerät einschalten"
              Slots ->
                 Device -> Standardgerät
                  Value -> an
[20:16:27] [Dialogue] was ask to end session with id c4b92d06-0b2b-444a-a8c3-3c4551ebab30 by saying 'Ok.'
[20:16:27] [Tts] was asked to say "Ok."
[20:16:27] [AudioServer] was asked to play a wav of 19.5 kB with id '1b4e4abe-c73e-4c34-8c7e-612eec5a128e' on site default
[20:16:28] [AudioServer] finished playing wav with id '1b4e4abe-c73e-4c34-8c7e-612eec5a128e'
[20:16:28] [Tts] finished speaking with id 'b0d799cf-773c-415e-b822-7447e8ad3c88'
[20:16:28] [Dialogue] session with id 'c4b92d06-0b2b-444a-a8c3-3c4551ebab30' was ended on site default. The session ended as expected
[20:16:28] [Asr] was asked to stop listening on site default
[20:16:28] [Hotword] was asked to toggle itself 'on' on site default


Und die Lampe im Wohnzimmer geht an...

tehlers

Ich denke ich habe das Problem gefunden, ich habe in jedem Zimmer noch einen Temp/Humid Sensor und die Devices habe ich der Einfachheit auch "Schlafzimmer" und "Wohnzimmer" genannt:


attr 2_schlafzimmer snipsName Schlafzimmer
attr 2_schlafzimmer snipsRoom Schlafzimmer
attr 2_schlafzimmer snipsMapping GetNumeric:currentVal=temperature,type=Temperatur \
GetNumeric:currentVal=humidity,type=Luftfeuchtigkeit \
Status:response=Die Temperatur beträgt [ThermoWZ:temperature] Grad bei [ThermoWZ:humidity] Prozent Luftfeuchtigkeit.

attr 4_wohnzimmer snipsName Wohnzimmer
attr 4_wohnzimmer snipsRoom Wohnzimmer
attr 4_wohnzimmer snipsMapping GetNumeric:currentVal=temperature,type=Temperatur \
GetNumeric:currentVal=humidity,type=Luftfeuchtigkeit \
Status:response=Die Temperatur beträgt [ThermoWZ:temperature] Grad bei [ThermoWZ:humidity] Prozent Luftfeuchtigkeit.


Und obwohl das nichts miteinander zu tun hat, scheint es dann ein grundsätzliches Problem zu geben, wenn ein Device heisst wie ein Raum. Also wer das Problem auch hat: Es könnte an sowas liegen. Jetzt (nach Umbenennung) läuft es wie erwartet...

Danke fürs Mitdenken!

Viele Grüße

Tim

Devender

Nabend zusammen,

ich habe mich gerade mit der Installation versucht auseinander zu setzen.
In Richtung FHEM mit Broker lief das soweit ohne Problem.

Bei der Installation von snips selbst hänge ich aber direkt am Anfang.
Die beiden Links aus dem ersten Post:
https://snips.gitbook.io/documentation/installing-snips
https://snips.gitbook.io/documentation/advanced-configuration/advanced-solutions
Sind nicht mehr gültig.

Gehe ich dann auf: https://docs.snips.ai/getting-started/quick-start-raspberry-pi

Wollte ich mit

sudo npm install -g snips-sam
auf meinem Notebook mit debian die Installation ausführen.
Also nicht direkt auf dem RPi, das steht ja auch dort geschrieben.
Bekomme aber den Fehler:
sudo: npm: Befehl nicht gefunden


Kann mir jemand erklären von welche Schlauch ich runter gehen muss?

Danke
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

rischbiter123

Moin,

node.js installiert?

Prerequisites

The prerequisites for this project are:

    A Raspberry Pi​

    An SD card

    A microphone

    Optionally, a speaker

    On your computer, Node (version 7.5.0 or later) and NPM​

    If on Windows, you will need to install Git
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

Devender

FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul