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

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

Vorheriges Thema - Nächstes Thema

enno

mit der Version von heute bekomme ich einige Warnungen im Log:

2018.09.15 21:53:03 1: PERL WARNING: Use of uninitialized value in substitution (s///) at ./FHEM/10_SNIPS.pm line 737.
2018.09.15 21:53:03 1: PERL WARNING: Use of uninitialized value $value in concatenation (.) or string at ./FHEM/10_SNIPS.pm line 778.
2018.09.15 22:04:26 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/10_SNIPS.pm line 226.
2018.09.15 22:04:26 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/10_SNIPS.pm line 249.
2018.09.15 22:04:26 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/10_SNIPS.pm line 272.
2018.09.15 22:04:26 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/10_SNIPS.pm line 331.
2018.09.15 22:04:26 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/10_SNIPS.pm line 300.
2018.09.15 22:04:26 1: PERL WARNING: Use of uninitialized value in split at ./FHEM/10_SNIPS.pm line 355


Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

bennebartsch

#466
Habe immernoch ein paar kleine Probleme. Snips versteht leider oft nicht was ich von ihm will. Habe mir jetzt die ReSpeaker Arrays bestellt, mal sehen ob sich dass dann bessert. Ganz oft kommt die Frage: "Nach welchem Gegenstand möchten Sie fragen?". Leider kommt die Frage direkt 3 mal, das ist extrem nervig.
Habe jetzt eine eigene Dockerfile für Snips erstellt, sobald diese etwas ausgereifter ist, werde ich diese auf Github für euch zur Verfügung stellen.

Noch eine Frage: In der Snips Konsole habe ich zusätzlich zur FHEM App noch folgende Apps: Rechner, Wetter und Datum & Uhrzeit. Leider funktionieren diese nicht, sondern nur die FHEM Kommandos. Ist das normal?

Edit: Wie siehts eigentlich mit den Shortcuts aus? Habe das Attribut in FHEM jetzt noch nicht gefunden. Kommt das einfach in SnipsMapping?

bennebartsch

#467
Hier schonmal ein kleiner Einblick in meine Dockerfile. Ist meine erste, also seid gnädig.
Edit: jetzt auf Github: https://github.com/benedikt-bartscher/snips-fhem-docker

Dockerfile:
FROM debian:stretch
MAINTAINER Benedikt Bartscher (benedikt@bartscher.me)
EXPOSE 22

RUN apt-get update
RUN apt-get install -y git gnupg2 apt-transport-https alsa-utils dbus supervisor dirmngr pulseaudio mpg123 python3 python3-pip openssh-server
RUN echo "deb https://debian.snips.ai/stretch stable main" > /etc/apt/sources.list.d/snips.list
RUN apt-key adv --recv-keys F727C778CCB0A455
RUN apt-get update
RUN apt-get install -y snips-platform-voice snips-asr-injection snips-watch

RUN pip3 install toml paho-mqtt boto3 awscli
RUN aws configure set default.region eu-central-1
RUN aws configure set region eu-central-1 --profile testing
RUN aws configure set profile.testing2.region eu-central-1
RUN aws configure set preview.cloudsearch true
RUN git clone https://github.com/Thyraz/snips-tts-polly.git /opt/snips-tts-polly
RUN cp /opt/snips-tts-polly/snips-tts-polly.py /usr/bin

RUN mkdir -p /var/run/sshd && sed -i "s/UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config  && touch /root/.Xauthority
RUN /usr/sbin/sshd -t
ADD credentials /root/.aws/credentials
ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf

ENTRYPOINT ["/usr/bin/supervisord"]


supervisord.conf:
[supervisord]
nodaemon=true

[program:snips-audio-server]
command=/usr/bin/snips-audio-server
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stdout
stderr_logfile_maxbytes=0

[program:snips-hotword]
command=/usr/bin/snips-hotword
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stdout
stderr_logfile_maxbytes=0

[program:snips-asr]
command=/usr/bin/snips-asr
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stdout
stderr_logfile_maxbytes=0

[program:snips-asr-injection]
command=/usr/bin/snips-asr-injection
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stdout
stderr_logfile_maxbytes=0

[program:snips-nlu]
command=/usr/bin/snips-nlu
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stdout
stderr_logfile_maxbytes=0

[program:snips-dialogue]
command=/usr/bin/snips-dialogue
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stdout
stderr_logfile_maxbytes=0

[program:snips-tts-polly]
command=/usr/bin/snips-tts-polly.py
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stdout
stderr_logfile_maxbytes=0


credentials:
[default]
aws_access_key_id = ******
aws_secret_access_key = ******


docker-compose.yml:
version: '2'

services:
    mysnips:
        restart: always
        container_name: mysnips
        build: mysnips
        privileged: true
        ports:
            - "9898:1883"
            - "5043:22"
        expose:
            - "5043"
        volumes:
            - /dev/snd:/dev/snd
            - ./assistant:/usr/share/snips/assistant
            - ./snips.toml:/etc/snips.toml
            - /etc/asound.conf:/etc/asound.conf
            - ~/.config/pulse/cookie:/root/.config/pulse/cookie
            - ${XDG_RUNTIME_DIR}/pulse/native:${XDG_RUNTIME_DIR}/pulse/native
        environment:
            - PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native
            - ${XDG_RUNTIME_DIR}/pulse/native:${XDG_RUNTIME_DIR}/pulse/native
        group_add:
            - 995

rih

Hallo,

ich kann bezüglich meinem Problem mit dem Snips-Audioserver Entwarnung geben. Ursache des Problems war, dass die Onboard-Soundhardware des Pi neben der Respeaker-Soundhardware ebenfalls aktiv war. Nachdem ich die Soundhardware des Pi in der /boot/config.txt deaktiviert hatte, funktionierte Snips ohne Probleme.
Bin begeistert. Mein Snips-Room füllt sich langsam mit Geräten  :)

bennebartsch

Featurevorschlag: Bei wichtigen Kommandos (PC Herunterfahren, USV ein-/ausschalten) wäre es cool wenn Snips nachfragen könnte: "Bist du sicher, dass du den PC Herunterfahren willst?"

ahlermi

Zitat von: rih am 15 September 2018, 18:28:06
@Thyraz:
Danke für Deine Tipps.

1. Ja, say und textCommand funktioniert.
2. Wartezeit 1, 2, 3 Sekunden probiert -> keine Reaktion.
3. die 7 Dienste laufen (inkl. snips-asr-injection)
Allerdings tritt beim Audio-Server ein Fehler auf (aber er läuft):

Sep 15 15:24:51 raspberrypi snips-audio-server[761]:  -> caused by: UnanticipatedHostError
Sep 15 15:24:51 raspberrypi snips-audio-server[761]: thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: "SendError(..)"', libcore/r
Sep 15 15:24:51 raspberrypi snips-audio-server[761]: note: Run with `RUST_BACKTRACE=1` for a backtrace.
Sep 15 15:25:39 raspberrypi snips-audio-server[761]: INFO:snips_audio_portaudio    : Playing "c36fe1d8-ceb9-4976-9550-e987d2d6d2bc" using output "default", w
Sep 15 15:25:39 raspberrypi snips-audio-server[761]: Expression 'alsa_snd_pcm_hw_params_set_rate_near( pcm, hwParams, &setRate, NULL )' failed in 'src/hostap
Sep 15 15:25:39 raspberrypi snips-audio-server[761]: Expression 'paUnanticipatedHostError' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2053
Sep 15 15:25:39 raspberrypi snips-audio-server[761]: Expression 'PaAlsaStreamComponent_InitialConfigure( &self->playback, outParams, self->primeBuffers, hwPa
Sep 15 15:25:39 raspberrypi snips-audio-server[761]: Expression 'PaAlsaStream_Configure( stream, inputParameters, outputParameters, sampleRate, framesPerBuff
Sep 15 15:25:39 raspberrypi snips-audio-server[761]: ERROR:snips_audio_server_hermes: could not play "c36fe1d8-ceb9-4976-9550-e987d2d6d2bc"
Sep 15 15:25:39 raspberrypi snips-audio-server[761]:  -> caused by: UnanticipatedHostError


Leider kann ich mit den Meldungen recht wenig anfangen. Verhindert dieser Fehler nun nur das Abspielen der wav-Datei oder blockiert dieser den weiteren Ablauf?

4. MQTT-Traffic (mit MQTT.fx erfasst) während "Hey snips" , Wartezeit, "Schalte Salzlampe ein":
Keine Fehlermeldungen ersichtlich. Meiner Ansicht nach normale Meldungen erscheinen nur von hotword, asr und dialogueManager. Keine Meldung vom Audioserver und den anderen von Dir genannten Topics.

@ahlermi:
Ich habe ja kein Custom-Hotword ausgewählt, oder verstehe ich Dich falsch? Habe aber gestern den Assitenten nochmal neu erstellt und in den Snips-Ordner kopiert -> keine Änderung am Fehlerverhalten.

Kann jemand mit den Audioserver-Meldungen von Punkt 3 etwas anfangen? Scheint ja eher ein grundlegendes Linux- bzw. Alsa-Problem zu sein.
Gruß
Hans

Hast du mal versucht die Installation über Sam zu machen?
Viel einfacher und alles passend.
PI4 FHEM, PI3 FHEM, 6 x Echo mit talk2fhem, Siri, SNIPS auf PI3 mit Samson UB1, YeeLight, Homematic, MAX!, 433Mhz, LaCross, Xiaomi Vacuum V1, ESPEasy, Gardena, Telegram, FLOORPLAN, HEOS, Xiaomi Aqara, Sonoff, SolvisMax, SolvisClient, HUE, ESPEasy für Bayernlüfter, Harmony, Tasmota, JKBMS, EASUN

rih

@ahlermi:
Die snips-sam-Installation hatte ich fast schon in Erwägung gezogen. Ich arbeite aber lieber mit Winscp und Putty auf manuellem Weg, da weiß ich wenigstens, was wo wie auf dem Pi installiert wird. Ist lehrreicher, wenn auch manchmal etwas steiniger.
Ich bin mir auch nicht sicher, ob durch snips-sam mein mittlerweile gelöstes Problem hätte vermieden werden können.
Trotzdem danke für den Tipp.

Thyraz

Zitat von: enno am 15 September 2018, 22:20:38
mit der Version von heute bekomme ich einige Warnungen im Log:
Ich stehe noch etwas auf Kriegsfuß mit Perls Umgang mit undef was Vergleiche oder die Verwendung in Regex etc. angeht.
Die Tatsache hier immer voher abfragen zu müssen, ob die Variable auch wirklich nicht undef ist will mir einfach nicht in Fleisch und Blut übergehen. ;)

Das Modul wirft daher noch recht fleißig Warnings dieser Art.
Hab am WE mal wieder ein paar getilgt in meinem aktuellen Code.
Sind aber sicher noch genug übrig. :p

Wenn es feature-seitig langsam etwas ruhiger wird, werde ich hier mal eine Qualitätsoffensive starten müssen...

Zitat von: bennebartsch am 15 September 2018, 23:30:15
Noch eine Frage: In der Snips Konsole habe ich zusätzlich zur FHEM App noch folgende Apps: Rechner, Wetter und Datum & Uhrzeit. Leider funktionieren diese nicht, sondern nur die FHEM Kommandos. Ist das normal?
Irgendjemand hatte hier vor einiger Zeit mal geschrieben, dass für die normalen Skills irgendein Modul nötig ist,
dass aber nicht zu jeder Hardware kompatibel ist.
Lässt du es auch auf was anderem als einem Pi laufen?

Zitat von: bennebartsch am 15 September 2018, 23:30:15
Edit: Wie siehts eigentlich mit den Shortcuts aus? Habe das Attribut in FHEM jetzt noch nicht gefunden. Kommt das einfach in SnipsMapping?
Die Shortcuts sind ja global und nicht einem deiner Geräte zugeordnet.
Das Attribut ist daher im Snips Device selbst.

Zitat von: rih am 17 September 2018, 10:15:16
@ahlermi:
Die snips-sam-Installation hatte ich fast schon in Erwägung gezogen. Ich arbeite aber lieber mit Winscp und Putty auf manuellem Weg, da weiß ich wenigstens, was wo wie auf dem Pi installiert wird.
Sam lohnt sich auf lange Sicht dennoch:
Mit einem einfachen "sam install assistant" wird deine aktuelle Konfiguration automatisch von console.snips.ai geladen, entpackt und installiert.
Danach werden die Snips-Services auf dem Rechner gleich neu gestartet.

Das ganze herunterladen/übertragen/entpacken/neustarten entfällt dadurch.
Das einzige händische danach wäre also noch ein set snips updateModel
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

bennebartsch

Zitat von: Thyraz am 17 September 2018, 12:02:13
Lässt du es auch auf was anderem als einem Pi laufen?
Die Shortcuts sind ja global und nicht einem deiner Geräte zugeordnet.
Das Attribut ist daher im Snips Device selbst.
Ja, das ganze läuft aktuell nur auf meinem Nuc.
Okay das mit den Shortcuts macht Sinn, da war ich wohl mal wieder blind auf beiden Augen. Sollte man eventuell in der README mal ergänzen.

Thyraz

Ja, die Themen aus dem letzten Update fehlen noch komplett in der Doku.
Kommt die Tage. ;)
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

bennebartsch

Zitat von: Thyraz am 17 September 2018, 14:07:34
Ja, die Themen aus dem letzten Update fehlen noch komplett in der Doku.
Kommt die Tage. ;)

Ist ja kein Problem, du leistest ja schon genug mit dem Modul!
Werde am Mittwoch Abend auch noch weiter an der Dockerfile basteln und u.a. eine Dokumentation und dein Lautstärke Script integrieren! Kannst es dann gerne auch in der README verlinken.

bennebartsch

Kann es sein, dass die Shortcuts nicht mit textCommand funktionieren?

Thyraz

Bin gerade unterwegs, hab es daher nur kurz mit einem Shortcut über Telegram getestet.
Der hat zumindest funktioniert.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

bennebartsch

Bei mir geht's leider nicht, bekomme immer "Da ist etwas schief gegangen." als Antwort über Telegram. Normale snipsMappings funktionieren über Telegram einwandfrei!
Habe den Text 1:1 aus dem shortcut Attribut kopiert, also daran liegts nicht.

Eisix

Hallo,

würde auch gerne mal mit snips reden.

Irgendwie vergißt der sam aber meine "Login credentials" oder kann man die irgendwie mit angeben?

# sam login
? Enter email used on the console: XXXX@XXXX
? Enter password used on the console: [hidden]
✔ Logged in


#sam init
Installing Snips Platform components. This may take a few minutes...
 
✖ Error: No credentials found


# sam install assistant -i proj_rVzdOVvmDWpE
✖ Error: No credentials found


Dann habe ich noch eine Frage bzgl. MQTT. Muss es Mosquitto sein oder kann man auch das FHEM modul MQTT2 nutzen?

Gruß
Eisix