Handle-Befehle

<ph type="x-smartling-placeholder">

Befolgen Sie diese Anweisungen, um benutzerdefinierten Code auf Ihrem Gerät auszuführen in auf Sprachbefehle von Google Assistant reagieren.

Beispiel ausführen

Nachdem Sie nun ein Merkmal definiert und das Modell aktualisiert haben, dass Google Assistant einen Ein/Aus-Befehl für den entsprechenden Abfrage.

googlesamples-assistant-hotword --device-model-id my-model

Führen Sie beispielsweise die folgende Abfrage aus:

Ok Google, aktivieren

In der Konsolenausgabe sollten die folgenden Anweisungen angezeigt werden. Ist dies nicht der Fall, lesen Sie in der Anleitung zur Fehlerbehebung.

ON_RECOGNIZING_SPEECH_FINISHED:
  {'text': 'turn on'}
ON_DEVICE_ACTION:
  {'inputs': [{'payload': {'commands': [{'execution': [{'command': 'action.devices.commands.OnOff',
  'params': {'on': True}}], 'devices': [{'id': 'E56D39D894C2704108758EA748C71255'}]}]},
  'intent': 'action.devices.EXECUTE'}], 'requestId': '4785538375947649081'}
Do command action.devices.commands.OnOff with params {'on': True}

Sie sehen, wo diese Anweisungen im Quellcode gedruckt werden.

Quellcode abrufen

Jetzt können Sie Ihr eigenes Projekt starten:

git clone https://github.com/googlesamples/assistant-sdk-python

Befehls-Handler suchen

In der Datei hotword.py im Beispielcode wird das SDK zum Senden von Anfragen und Antworten von Google Assistant erhalten.

cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library
nano hotword.py

Suchen Sie nach der folgenden Handler-Definition:

def process_event(event):

Derzeit gibt diese Funktion jeden Geräteaktions-Ereignisnamen und alle durch die folgende Zeile:

print('Do command', command, 'with params', str(params))

Mit diesem Code wird der Befehl action.devices.commands.OnOff verarbeitet. Dieses ist Teil des OnOff Trait-Schema. Derzeit gibt dieser Code nur die Ausgabe an die Konsole aus. Sie können können Sie auf Ihrem Computer das tun, was Sie wollen, Projekt arbeiten. Fügen Sie den folgenden Block unter dem Befehl print in process_event() hinzu.

print('Do command', command, 'with params', str(params)) # Add the following:
if command == "action.devices.commands.OnOff":
    if params['on']:
        print('Turning the LED on.')
    else:
        print('Turning the LED off.')

Führen Sie den geänderten Quellcode direkt aus, um die Ausgabe zu sehen.

python hotword.py --device-model-id my-model

Verwenden Sie dieselbe Abfrage wie zuvor:

Ok Google, aktivieren

Wenn Sie eine LED angeschlossen haben zum Raspberry Pi, lesen Sie weiter, um zu erfahren, wie die LED den Befehl OnOff. Falls nicht, überspringen Sie den nächsten Abschnitt, um zu erfahren, Weitere Traits und Handler hinzufügen.

Nächste Schritte – Raspberry Pi

Da Sie nun wissen, wie Sie den eingehenden Befehl verwenden, können Sie den Beispielcode um eine LED anzuleuchten. Hierfür ist zusätzliche Hardware erforderlich, wenn Sie den Himbeer-Pi

GPIO-Paket importieren

Vereinfachen Sie den Softwarezugriff auf die GPIO-Pins (General purpose Input/Output) auf den Raspberry Pi, installieren Sie das Paket RPi.GPIO. Paket in der virtuellen Umgebung.

pip install RPi.GPIO

Beispiel ändern

Öffnen Sie die Datei hotword.py.

nano hotword.py

Importieren Sie die Datei RPi.GPIO in die Datei hotword.py. um die GPIO-Pins auf dem Pi zu steuern. Platzieren Sie die folgende Anweisung in der Nähe des Andere import-Anweisungen:

import RPi.GPIO as GPIO

Ändern Sie den Code so, dass die Ausgabe-Pin anfangs auf den niedrigen Logikstatus gesetzt wird. Vorgehensweise in der Funktion main(), bevor Ereignisse verarbeitet werden:

with Assistant(credentials, device_model_id) as assistant:
    events = assistant.start()

    device_id = assistant.device_id
    print('device_model_id:', device_model_id)
    print('device_id:', device_id + '\n')
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)
        ...

Ändern Sie den Code, den Sie in process_event() hinzugefügt haben. Wenn der Befehl „on“ eingeht, Setzen Sie die Markierung auf den Status der High-Logik. Wenn der Befehl „off“ eingeht, auf den niedrigen Logikstatus setzen.

if command == "action.devices.commands.OnOff":
    if params['on']:
        print('Turning the LED on.')
        GPIO.output(25, 1)
    else:
        print('Turning the LED off.')
        GPIO.output(25, 0)

Speichern Sie die Änderungen und schließen Sie die Datei.

Beispiel ausführen

Führen Sie den geänderten Beispielcode aus.

python hotword.py --device-model-id my-model

Verwenden Sie dieselbe Abfrage wie zuvor. Die LED sollte aufleuchten.

Aber das ist erst der Anfang. Weitere Informationen zum Hinzufügen weiterer Traits und Handler