【问题标题】:Activate GPIO or any Python Script from Google Assistant SDK从 Google Assistant SDK 激活 GPIO 或任何 Python 脚本
【发布时间】:2020-07-21 00:11:29
【问题描述】:

昨天我在我的 Raspberry Pi 4 上安装了 Google Assistant SDK,我使用了来自 Google 的这个 (https://developers.google.com/assistant/sdk/guides/service/python) 教程,并希望通过 onoff trait 使 GPIO 25 打开和关闭,在本节中解释 (@987654322 @)。

但是他们这样做的方式对我不起作用,当我运行助手并说“打开”时,Gpio 没有任何反应。

当直接运行“pushtotalk.py”时,它会给你一个错误输出,并显示设备处理程序没有定义,即使它就在 onoff 函数之前。

这是我的代码(来自 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

【问题讨论】:

    标签: sdk google-assistant-sdk


    【解决方案1】:

    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)
    

    【讨论】:

    • 感谢您的帮助,我更新了帖子,现在我得到了这些。这是 Google Assistant 的标准库,我只是更改了开关部分
    • 如果有办法只调用执行此操作的 python 脚本,我也会这样做。
    【解决方案2】:

    这种方式现在真的很稳定,现在可以识别设备处理程序,即使我只更改了 if 语句中的行,但显然导入 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')
    

    这样您就可以轻松地使用 Google 助理激活 Python 脚本,例如。只需说“打开”即可获得 Raspberry Pi。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      • 1970-01-01
      • 2019-09-22
      • 2019-08-19
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多