Intent wird erkannt, aber action hakt


#1

Hallo zusammen,

ich poste das mal hier rein, da man meine App wohl nur für “Deutsch spechende Snipse” installieren kann…

Ich wollte eine App schreiben, mit deren Hilfe man letztendlich die GPIO-ports am Raspebrry schalten kann.
Die intents werden wohl erkannt, aber bei den actions scheint Snips immer hängern zu bleiben.
Jedenfalls bekomme ich immer die Medlung “… didn’t respond in a timely manner”:

[18:41:50] [Asr] was asked to listen on site default
[18:41:53] [Asr] captured text "ausschalten" in 3.0s
[18:41:53] [Asr] was asked to stop listening on site default
[18:41:53] [AudioServer] was asked to play a wav of 93.1 kB with id '9d868326-67bc-43d3-8439-aa9bbe3b010f' on site default
[18:41:54] [AudioServer] finished playing wav with id '9d868326-67bc-43d3-8439-aa9bbe3b010f'
[18:41:54] [Nlu] was asked to parse input "ausschalten"
[18:41:54] [Nlu] detected intent bertron:GPIOlow with probability 1.000 for input "ausschalten"
[18:41:54] [Dialogue] New intent detected bertron:GPIOlow with probability 1.000
[18:42:00] [Dialogue] session with id '37c778bf-c57e-48ae-a6c2-706002a85be4' was ended on site default. The session was ended because one of the component didn't respond in a timely manner
[18:42:00] [Asr] was asked to stop listening on site default
[18:42:00] [Hotword] was asked to toggle itself 'on' on site default

Vielleicht mag jemand da mal reinschauen - falls das geht. Das wäre super!
Die App nennt sich “setGPIO”.

bertron


#2

ich nochmal

was mir inzwischen noch aufgefallen ist:

im Verzeichnis /var/lib/snips/skills/ ist mein GPIO-Skill nicht drin.

Und während der Installation zeigt er mir folgendes an:


Python skill bertron.setGPIO has 1 snippet:
bertron
Cloning skill domi.Einkaufsliste from url: https://github.com/MrJohnZoidberg/Snips-Einkaufsliste
Cloning into ‘Snips-Einkaufsliste’…

Oder liegt das nur daran, das sich meine nicht auf github befindet?


#3

Hi @bertron , an deinem Programm ist an sich nichts falsch, bloß wie du schon vermutest, hat es etwas mit der Einbindung in Snips zu tun.

Die Code-Snippets (Schnipsel) heißen so, weil in ihnen nicht das vollständige für Apps benötigte Programm steckt, sondern ausschließlich der Action-Code. Daher gibt es mit hermes und intentMessage zwei vorgegebene Python-Objekte von Snips, über die eine Interaktion mit dem Assistenten möglich ist.

Ein Programm, wie du es in das Snippets-Fenster geschrieben hast, kann auf Github/Gitlab veröffentlicht werden. Dieses wird Snips dann wie die Einkaufslisten-App nach /var/lib/snips/skills/ klonen.

PS: Die Einrückung in Zeile 44 deiner beiden Snippets ist nicht nötig, vielleicht geht das Programm auch dadurch nachher nicht (bin mir nicht sicher).

EDIT: Die Dokumentation für die Snippets findet sich hier.


#4

Aaaahh! Danke, das war aufschlussreich.Vielen Dank!
Ich sollte mir also einen github account zulegen, und das ganze dort öffentlich machen (was ja auch im open-source-Sinne wäre).
Dann würde sich also Snips/SAM über Github selber um die noch benötigten Objekte hermes und intentMessage kümmern, sehe ich das richtig? Wenn ich z.B. auf Github in die “Einkaufsliste” schaue, befinden sich da ja noch weitere Dateien drin (spec.json, setup.sh, requirements.txt, readme.md, .gitignore).
Muß ich die selber erstellen?
Danke für den link zum Tutorial, aber ganz blicke ich einfach noch nicht durch.

bertron


#5

… habe jetzt mal beide Aktionen (LED an/aus) in ein einziges Python-script zusammengeführt und das ganze auf github angelegt. Die anderen Dateien habe ich anhand der templates unter
https://github.com/snipsco/snips-actions-templates/tree/master/templates/python2 erstellt und mich dabei an Deiner EInkaufsliste orientiert.

Nun klont er zwar alles schön nach /var/lib/snips/skills/…
aber bei der Neuinstallation via
sam install assistant -i proj_***
erscheint meine Skill (“setGPIO”) nicht am Ende bei der Auflistung
"Generating virtual environment for ..."

irgendwo ist da also noch ein Haken.
Fehlermeldung ist immer noch die selbe:
"...didn't respond in timely manner"

Hier mal der link zum github-repository:

bertron


#6

… wieder ein kleiner Erkenntnisgewinn:
Nachdem ich den python-Scripten ein “action- …” vorangestellt habe, tauchen sie bei der Installation auch unter “Generating virtual environment …” auf.
Ich bekam auch noch eine Fehlermeldung wegen falsch gesetzter Rechte:

Warning: Some actions are not executable. Snips-skill-server won't be able to run them. Files:
/var/lib/snips/skills/snips-setGPIO/action-setGPIO.py

Ist das normal?

Ansonsten leider immer noch die Fehlermeldung “… didn’t respond in a timely manner” …


#7

offenbar gibt’s da ein Problem mit dem Import von Python libs:

Ich habe mal den skill-server im verbose mode gestartet und folgendes dabei gefunden:

[01:50:57.991628] INFO :snips_skill_server_lib::runner            : [setGPIO][err]   File "./action-setGPIO.py", line 7, in <module>
[01:50:57.991662] INFO :snips_skill_server_lib::runner            : [setGPIO][err]     from gpiozero import LED
[01:50:57.991706] INFO :snips_skill_server_lib::runner            : [setGPIO][err] ImportError: No module named gpiozero

gpiozero habe ich zuvor via
sudo apt install python-gpiozero
und auch nochmals via
sudo pip install gpiozero
installiert.

Auch findet sich ein gpiozero-Ordner in
/usr/lib/python2.7/dist-packages/

Oder muß die lib woanders liegen? Es gibt da ja auch noch python3 und python 3.5 - Ordner …


#8

Hallo,

Das Modul muss auch in der jeweiligen virtual environment installiert sein.

Genau dafür sind die setup.sh und die requirements da.

Schau mal zum Beispiel bei https://github.com/snipsco/snips-skill-hue-pro in die setup.sh… Da wird in der letzten Zeile ein

pip install -r requirements.txt

Gemacht. In der requirememts.txt stehen die für die Action benötigten Module drin

Anschließend muss das gpio unter:

:/var/lib/snips/skills/(deinskill)/venv/lib/python2.7/ zu finden sein


#9

Hallo,
aah, Danke für den Hinweis.
Ich habe das jetzt mal gemacht und der Fehler taucht nicht mehr auf.
Dafür gibt es zwar jetzt andere Probleme mit den python libs gpiozero und pygame, aber das scheint nicht an snips zu liegen…

Was mich noch wundert:
Warum überschreibt snips bei der Neuinstallation des Assistennten nicht mehr die alten Dateiversionen meiner action- … .py - files? Ich muß die immer zuvor von Hand löschen und beim klonen von github meckert er dann, daß die nicht “executable” seien, was ich dann auch noch manuell ändern muß. War vorher nicht so und ist jetzt ziemlich nervig.

bertron


#10

Hallo bertron - ich denke, dass Dein Skill inzwischen läuft?
Ich bekomme die LED nicht zum leuchten, auch bei mir kommt das “… didn’t respond in a timely manner”.

Mein Snips läuft auf einem Ich habe einen Rasbpi3 B+, allerdings mit Rasbpian “Full” - also mit Desktop (spricht da etwas dagegen? Ich bräuchte da GUI-RDP-Zugriff).

Installation über sam (remote und -testweise- auf raspberry.local )schlägt fehlt, weil der “mit.edu”-Schlüsselserver scheinbar down ist.

Also habe ich die Installation wie hier von “atomix” beschreiben händisch (lokal auf dem Pi) gemacht:

https://forum.snips.ai/t/problems-with-manual-deployment/650/8

Ich habe den alternativen Server “pgp.sufnet.nl” genommen, händische Installation geht damit. Es wird alles installiert und gestartet.
Der Befehl
systemctl status 'snips-*'

sagt, das alle Dienste laufen.
Ich kann die App händisch installieren wie im link beschrieben - alles gut.

Das Triggerword “Hey Snips” wird erkannt, der Skill wird ausgeführt. Nur die LED leuchtet nicht.

Habe probeweise ein “test-LED-Script” erstellt, damit kann ich die GPIO ansprechen:

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
print "LED on"
GPIO.output(17,GPIO.HIGH)
time.sleep(1)
print "LED off"
GPIO.output(17,GPIO.LOW)

User root, pi, _snips und __snips-skills sind in der gpio-Gruppe.
Was mir auffällt ist, dass das gpio nicht im Ordner /var/lib/snips/skills/(deinskill)/venv/lib/python2.7/ (wie von fighterii beschrieben) zu finden ist.

Laienhafte Frage: hat das Problem evt. etwas mit Mosquitto zu tun? Host und Client auf einem Gerät oder so?

Gruß, Jochen


#11

Hat sich erledigt .
chmod +x /var/lib/snips/skills/snips-setGPIO/action-setGPIO.py
hat geholfen :wink:

Gruß, Jochen