Активируйте GPIO или любой скрипт Python из Google Assistant SDK - PullRequest
0 голосов
/ 08 апреля 2020

Вчера я установил Google Assistant SDK на свой Raspberry Pi 4, я использовал это (https://developers.google.com/assistant/sdk/guides/service/python) учебное пособие от Google и хотел, чтобы GPIO 25 включался и выключался через черту onoff, объяснил в этом разделе (https://developers.google.com/assistant/sdk/guides/service/python/extend/handle-device-commands), но то, как они это сделали, у меня не сработало, и когда я запускаю помощника и говорю «Включить», Gpio не работает. Затем я попытался запустить «pushtotalk.py» напрямую, и он столкнулся с ошибкой, которая говорила, что «device_id» не указан, даже если он работает в остальной части файла. Затем я попытался ввести идентификатор устройства вручную, но теперь я получаю много ошибок, о которых я ничего не знаю.

Вот мой код (оригинал от Google):

device_handler = device_helpers.DeviceRequestHandler(device_id)
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)

device_handler.command('action.devices.commands.OnOff')
def onoff(on):
    if on:
        logging.info('Turning device on')
        GPIO.output(25, 1)
    else:
        logging.info('Turning device off')
        GPIO.output(25, 0)

А вот и ошибка:

 Traceback (most recent call last):
  File "pushtotalk.py", line 465, in <module>
    main()
  File "/home/pi/env/lib/python3.7/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/home/pi/env/lib/python3.7/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/home/pi/env/lib/python3.7/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/pi/env/lib/python3.7/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "pushtotalk.py", line 425, in main
    device_handler.command('action.devices.commands.OnOff')
UnboundLocalError: local variable 'device_handler' referenced before assignment

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Хорошо, я решил эту проблему с помощью простой команды os, в которую я только что импортировал скрипт python, который активирует GPIO.

 device_handler = device_helpers.DeviceRequestHandler(device_id)

 @device_handler.command('action.devices.commands.OnOff')
 def onoff(on):
     if on:
         logging.info('Turning device on')
         os.system('python <Filename>.py')
     else:
         logging.info('Turning device off')
         os.system('python <filename>.py')

Таким образом, вы можете легко активировать скрипт Python с помощью Google. Помощник, например. Raspberry Pi, просто сказав «Включите», получайте удовольствие.

0 голосов
/ 08 апреля 2020

Python строго по уровню отступа (не символ). Ваша декларация device имеет отступ. Приведение его в соответствие с device_handler должно устранить эту ошибку.

device = '3eeb4608-7913-11ea-ad54-dca632812cbd'
device_handler = device_helpers.DeviceRequestHandler(device)
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)

device_handler.command('action.devices.commands.OnOff')
def onoff(on):
    if on:
        logging.info('Turning device on')
        GPIO.output(25, 1)
    else:
        logging.info('Turning device off')
        GPIO.output(25, 0)
...