У меня есть домашний помощник Google, работающий на Raspberry Pi, и я пытаюсь выполнить для него пользовательские действия.
Действие, которое я хочу сделать: «Привет, Google, проанализируй этот объект», и оно просто делает снимок того, что я держу в руках. Я не могу по какой-то причине использовать «сделать снимок», потому что он просто отвечает «Извините, я пока не могу сделать снимок!»
Я не могу заставить это работать, и я понятия не имею, почему. Пример мигания света работает, но эта команда проще и даже не имеет параметров. Я обновил действия и получил одобрение (Ваше приложение для Ассистента для проекта XXXX было успешно обновлено с вашими действиями). Но всякий раз, когда я говорю «эй, google, проанализируй этот объект», он просто кричит «Извини! Я не понимаю».
Что я здесь не так делаю?
JSON в файле действий:
{
"manifest": {
"displayName": "Office Controller",
"invocationName": "Office Controller",
"category": "PRODUCTIVITY"
},
"actions": [
{
"name": "com.acme.actions.analyze_object",
"availability": {
"deviceClasses": [
{
"assistantSdkDevice": {}
}
]
},
"intent": {
"name": "com.acme.intents.analyze_object",
"trigger": {
"queryPatterns": [
"analyze this object"
]
}
},
"fulfillment": {
"staticFulfillment": {
"templatedResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Ok. Analyzing."
}
},
{
"deviceExecution": {
"command": "com.acme.commands.analyze_object"
}
}
]
}
}
}
},
{
"name": "com.acme.actions.blink_light",
"availability": {
"deviceClasses": [
{
"assistantSdkDevice": {}
}
]
},
"intent": {
"name": "com.acme.intents.blink_light",
"parameters": [
{
"name": "number",
"type": "SchemaOrg_Number"
},
{
"name": "light_target",
"type": "LightType"
}
],
"trigger": {
"queryPatterns": [
"blink the $LightType:light_target $SchemaOrg_Number:number times"
]
}
},
"fulfillment": {
"staticFulfillment": {
"templatedResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Blinking the $light_target.raw $number times"
}
},
{
"deviceExecution": {
"command": "com.acme.commands.blink_light",
"params": {
"lightKey": "$light_target",
"number": "$number"
}
}
}
]
}
}
}
}
],
"types": [
{
"name": "$LightType",
"entities": [
{
"key": "LIGHT",
"synonyms": [
"LED",
"light",
"bulb",
"light bulb"
]
}
]
}
]
}
Код события в программе Python
if event.type == EventType.ON_DEVICE_ACTION:
for command, params in process_device_actions(event, device_id):
print('Do command', command, 'with params', str(params))
if command == "com.acme.commands.blink_light":
number = int( params['number'] )
for i in range(int(number)):
print('Device is blinking.')
GPIO.output(25, 1)
time.sleep(1)
GPIO.output(25, 0)
time.sleep(1)
elif command == "com.acme.commands.analyze_object":
camera = picamera.PiCamera()
camera.capture('photo.jpg')
print('Took a photo')