Google Custom Device Action дает ошибку в Raspberry Pi Google Assistant - PullRequest
0 голосов
/ 03 декабря 2018

Я создаю помощника Google на своем Raspberry Pi 3 и пытаюсь создать пользовательское действие для устройства, которое в конечном итоге откроет дверь в мой гараж.Все, что он делает, это играет со светодиодом в этот момент времени.

Вот мой файл actions.json:

{
    "manifest": {
        "displayName": "Garage door",
        "invocationName": "Garage door",
        "category": "PRODUCTIVITY"
    },
    "actions": [
        {
            "name": "me.custom.actions.GarageDoor",
            "availability": {
                "deviceClasses": [
                    {
                        "assistantSdkDevice": {}
                    }
                ]
            },
            "intent": {
                "name": "me.custom.intents.GarageDoor",
                "trigger": {
                    "queryPatterns": [
                        "open the garage door",
                        "close the garage door"
                    ]
                }
            },
            "fulfillment": {
                "staticFulfillment": {
                    "templatedResponse": {
                        "items": [
                            {
                                "simpleResponse": {
                                    "textToSpeech": "Okay"
                                }
                            },
                            {
                                "deviceExecution": {
                                    "command": "me.custom.commands.GarageDoor"
                                }
                            }
                        ]
                    }
                }
            }
        }
    ],
    "types": []
}

Но когда я запускаю команду, я получаю эту ошибку:

INFO:root:Transcript of user request: "open the garage door".
INFO:root:Playing assistant response.
WARNING:root:Error during command execution
Traceback (most recent call last):
  File "/home/pi/assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/grpc/device_helpers.py", line 94, in dispatch_command
    self.handlers[command](**params)
TypeError: gdoor() argument after ** must be a mapping, not NoneType

Вот мой обработчик:

@device_handler.command('me.custom.commands.GarageDoor')
    def gdoor(*args):
        print(args)
        global g_open
        if g_open:
            GPIO.output(18, 0)
            g_open = 0
        else:
            GPIO.output(18, 1)
            g_open = 1

Я играл с * args, чтобы посмотреть, исправило ли это что-нибудь - это не так.Я изменил имена своих пакетов на обычай только для конфиденциальности.Я здесь совсем запутался.Любая помощь приветствуется!

Спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Глядя на пример кода , кажется, что сигнатура функции немного отличается, поскольку она напрямую добавляет аргументы.

@device_handler.command('com.example.commands.BlinkLight')
def blink(speed, number):
    logging.info('Blinking device %s times.' % number)
    delay = 1
    if speed == "SLOWLY":
        delay = 2
    elif speed == "QUICKLY":
        delay = 0.5
    for i in range(int(number)):
        logging.info('Device is blinking.')
        time.sleep(delay)

Глядя на пакет действий, он нене похоже, что вы предоставляете какие-либо действия для выполнения команды.Как показано в пример :

{
    "deviceExecution": {
        "command": "com.example.commands.BlinkLight",
        "params": {
            "speed": "$speed",
            "number": "$number"
        }
    }
}

Без каких-либо параметров он может вообще не отображать какие-либо функции.

...