Handle-Befehle

Folgen Sie dieser Anleitung, um auf Ihrem Gerät benutzerdefinierten Code als Reaktion auf Befehle von Google Assistant auszuführen.

Beispiel ausführen

Nachdem Sie eine Eigenschaft definiert und das Modell aktualisiert haben, prüfen Sie, ob Google Assistant einen Ein/Aus-Befehl für die entsprechende Abfrage zurückgibt.

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

Führen Sie beispielsweise die folgende Abfrage aus:

Hey Google, schalte das Spiel ein.

In der Konsolenausgabe sollten Sie die folgenden Anweisungen sehen. Ist dies nicht der Fall, lesen Sie die 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}

Die Anweisungen finden Sie im Quellcode.

Quellcode abrufen

Sie können jetzt Ihr eigenes Projekt starten:

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

Befehls-Handler suchen

Die Datei hotword.py im Beispielcode verwendet das SDK, um Anfragen zu senden und Antworten von Google Assistant zu 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äteaktionsnamen und alle Parameter mit der folgenden Zeile aus:

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

Dieser Code verarbeitet den Befehl action.devices.commands.OnOff. Dieser Befehl ist Teil des Trait-Schemas OnOff. Derzeit gibt dieser Code nur die Ausgabe an die Konsole aus. Sie können diesen Code nach Belieben in Ihrem Projekt ändern. Fügen Sie unter dem Befehl print in process_event() den folgenden Block 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 die gleiche Abfrage wie zuvor:

Hey Google, schalte das Spiel ein.

Wenn Sie eine LED an den Raspberry Pi angeschlossen haben, lesen Sie weiter, um zu erfahren, wie die LED als Reaktion auf den Befehl "OnOff" eingeschaltet wird. Wenn Sie das nicht getan haben, überspringen Sie den nächsten Abschnitt, um zu erfahren, wie Sie weitere Traits und Handler hinzufügen können.

Nächste Schritte – Raspberry Pi

Sie wissen nun, wie der eingehende Befehl verarbeitet wird. Ändern Sie den Beispielcode so, dass eine LED aufleuchtet. Dies erfordert zusätzliche Hardware, wenn Sie Raspberry Pi verwenden.

GPIO-Paket importieren

Installieren Sie das Paket RPi.GPIO in der virtuellen Umgebung, um den Softwarezugriff auf die GPIO-Pins (General zweck Input/Output) auf dem Raspberry Pi zu vereinfachen.

pip install RPi.GPIO

Beispiel ändern

Öffnen Sie die Datei hotword.py.

nano hotword.py

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

import RPi.GPIO as GPIO

Ändern Sie den Code so, dass der Ausgabe-PIN zuerst auf den Low-Logikstatus gesetzt wird. Führen Sie diesen Schritt in der Funktion main() aus, bevor Sie Ereignisse verarbeiten:

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)
        ...

Ändere den Code, den du in process_event() hinzugefügt hast. Wenn der Befehl „on“ empfangen wird, setzen Sie die Markierung auf den High-Logic-Zustand. Wenn der Befehl „off“ empfangen wird, setzen Sie das Pin auf den niedrigen Logikstatus.

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 die gleiche Abfrage wie zuvor. Die LED sollte aufleuchten.

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