Я пытаюсь следовать этому основному c уроку о том, как заставить Алексу включить светодиод, подключенный к Raspberry Pi, но я так и не смог успешно запустить умение. Я всегда получаю сообщение «Возникла проблема с ответом на запрошенный навык». Я проверил журнал устройства, и InvocationResponse всегда имеет значение null.
Я выполнил все шаги в этом учебнике, за исключением части, в которой мне нужно скопировать и вставить код в поле Intent Schema. Я полагаю, что эта часть уже автоматически обрабатывается в последней консоли разработчика, верно? Я проверил вкладку JSON Editor, и большая часть кода схемы намерений, приведенного в руководстве, уже была написана. Я попытался отредактировать редактор JSON, но это не сработало - ошибка ответа все еще отображается.
Я посмотрел другие форумы, и они сказали, что скрипт python, который я запускаю локально на Pi может быть проблема. Скрипт является точной копией этого кода , как предлагается в руководстве. Ngrok, кажется, работает, так как он дает 200 OK на терминале.
Я действительно понятия не имею, как начать отладку этой проблемы. Надеюсь, кто-нибудь сможет мне помочь! Спасибо!
Это скрипт python, который я запускаю на Pi:
from flask import Flask
from flask_ask import Ask, statement, convert_errors
import RPi.GPIO as GPIO
import logging
GPIO.setmode(GPIO.BCM)
app = Flask(__name__)
ask = Ask(app, '/')
logging.getLogger("flask_ask").setLevel(logging.DEBUG)
@ask.intent('GPIOControlIntent', mapping={'status': 'status'})
def gpio_status(status):
if status in ['on','high' ]:
GPIO.setup(21, GPIO.IN)
state = GPIO.input(21)
if (state == True):
GPIO.setup(21, GPIO.OUT)
GPIO.output(21,GPIO.HIGH)
return statement('Lights are already on')
else:
GPIO.setup(21, GPIO.OUT)
GPIO.output(21,GPIO.HIGH)
return statement('Turning lights {}'.format(status))
if status in ['off','low' ]:
GPIO.setup(21, GPIO.IN)
state = GPIO.input(21)
print('status of light',state)
if (state == False):
GPIO.setup(21, GPIO.OUT)
GPIO.output(21,GPIO.LOW)
return statement('Lights are already off')
else:
GPIO.setup(21, GPIO.OUT)
GPIO.output(21,GPIO.LOW)
return statement('Turning lights {}'.format(status))
if __name__ == '__main__':
port = 5000 #the custom port you want
app.run(host='0.0.0.0', port=port)
Это то, что есть в редакторе JSON в AWS Консоль разработчика
{
"interactionModel": {
"languageModel": {
"invocationName": "raspberry pi",
"intents": [
{
"name": "AMAZON.FallbackIntent",
"samples": []
},
{
"name": "AMAZON.CancelIntent",
"samples": []
},
{
"name": "AMAZON.HelpIntent",
"samples": []
},
{
"name": "AMAZON.StopIntent",
"samples": []
},
{
"name": "AMAZON.NavigateHomeIntent",
"samples": []
},
{
"name": "GPIOControlIntent",
"slots": [
{
"name": "status",
"type": "GPIO_Control"
}
],
"samples": [
"turn the light {status}",
"turn {status} the light"
]
}
],
"types": [
{
"name": "GPIO_Control",
"values": [
{
"name": {
"value": "off"
}
},
{
"name": {
"value": "on"
}
}
]
}
]
}
}
}