我们继续和亚历克萨玩这一次,我想创建一个技能,使用兼容的设备(例如一个树莓派3)。在这里你可以看到亚历克萨人为我们提供了的文件和例子。基本上,我们需要在控制台中创建一个新的产品/Alexa小工具。它给了我们一个亚马逊和亚历克萨小工具秘密。
您可能还喜欢:
智能家居教程:ESP8266、Alexa 和亚马逊回声
然后,我们需要在我们的树莓派中安装SDK(它安装了几个 python 库)。然后,我们可以创建我们的小工具脚本运行在我们的树莓派,使用亚马逊Id和alexaGadget秘密。我们可以听几个亚历克萨事件。例如:当我们说唤醒词,一个计时器,一个警报,我们也可以创建我们的自定义事件。
我要创建一个技能,让我说类似的东西:”Alexa,使用设备演示和设置颜色绿色”或”Alexa,使用设备演示和设置颜色为红色”,我会把这个颜色在引导矩阵,我有(一个树莓派感知帽子)
这是 python 脚本:
set_pixels(([颜色] = 64)
on_custom_gonzalo123_setcolor(自,指令):
有效负载 = json.loads(指令.有效负载.解码(”utf-8″))
颜色 = 有效负载[颜色]
如果颜色 = “红色”:
记录器.info(”打开红色显示屏”)
自我.set_color_to(红色)
如果颜色 = “绿色”:
记录器.info(”打开绿色显示屏”)
自我.set_color_to(绿色)
如果颜色 = “黄色”:
记录器.info(”打开黄色显示屏”)
自我.set_color_to(黄色)
如果颜色 = “黑色”:
记录器.info(”打开黄色显示屏”)
自我.set_color_to(黑色)
如果__name__ = “__main__”:
小工具(.main()”数据朗=”文本/x-python”*
导入日志记录
导入系统
1px;”*从 agt 进口 AlexaGadget
从sense_hat导入SenseHat
日志记录。基本Config(流=sys.粗壮级别=日志记录。调试)
记录器日志记录.获取记录(__name__)
感感哈特()
清除()
红色= =25500|
绿色= =02550|
蓝色=00255|
黄色= =2552550|
黑色=000|
1px;”[ on_alexa_gadget_statelistener_stateupdate (self,指令):
指令中的状态。有效负载。状态:
如果状态。名称"唤醒词":
感。清除()
如果状态。值"活动":
感。show_message("亚历克萨"text_colour=蓝色)
1px;”*感。set_pixels((*颜色 = = 64)
on_custom_gonzalo123_setcolor(自指令):
有效负载json.负载(指令。有效负载。解码("utf-8")
颜色有效负载="颜色"|
如果颜色为"红色":
信息(“打开红色显示屏”)
自我。set_color_to(红色)
如果颜色为"绿色":
记录器.信息("打开绿色显示屏")
自我。set_color_to(绿色)
如果颜色为"黄色":
信息(“打开黄色显示屏”)
自我。set_color_to(黄色)
如果颜色为"黑色":
记录器.信息("打开黄色显示屏")
自我。set_color_to(黑色)
1px;”•小工具()。主()
在这里,我们的小工具的 ini 文件:
xxxxxxxxx
[小工具设置]
1px;”•亚历克萨小工具秘密= my_alexaGadgetSecret
[小工具功能]
亚历克萨.小工具.状态侦听器1.0-唤醒词
自定义.贡萨洛1231.0
惠特这个ini文件,我说,我的小工具将触发一个函数,当唤醒字已经说,并与我的自定义事件”自定义.gonzalo123″。
这就是技能:
/处理程序/取消和停止意向处理程序’)
康斯特会话已处理请求处理程序 = 要求(’./处理程序/会话已处理请求处理程序’)
康斯特回退处理程序 = 要求(’./处理程序/回退处理程序’)
const 错误处理程序 = 要求(’./处理程序/错误处理程序’)
让技能
模块.导出.处理程序 = 异步(事件、上下文) > |
如果 (!技能) |
技能 = Alexa.技能建造者.custom()。
添加请求拦截器(
请求拦截器,
响应拦截器,
本地化拦截器,
小工具拦截器
).
添加请求处理程序(
启动请求处理程序,
颜色处理程序,
帮助意向处理程序,
取消和停止意向处理程序,
会话已结束请求处理程序,
回退处理程序)。
添加错误处理程序(
错误处理程序)。
create()
}
返回 await 技能.invoke(事件、上下文)
[“数据朗””文本/x-python”}
xxxxxxxxx
康斯特·亚历克萨要求('问-sdk')
/拦截器/请求拦截器’)
康斯特响应拦截器要求('./拦截器/响应拦截器)
康斯特定位拦截器需要('./拦截器/本地化拦截器)
康斯特小工具拦截器需要('./拦截器/小工具拦截器'
康斯特启动请求处理程序要求('./处理程序/启动请求处理程序)
康斯特颜色处理程序需要('./处理程序/颜色处理程序'
/处理程序/帮助意向处理程序’)
康斯特取消和停止意向处理程序需要('./处理程序/取消和停止意向处理程序')
康斯特会话已处理请求处理程序要求('./处理程序/会话已处理请求处理程序'
康斯特回退处理程序需要('./处理程序/回退处理程序)
const错误处理程序需要('./处理程序/错误处理程序'
让技能
出口。处理程序=异步(事件,上下文) =>
如果(!技能){
技能亚历克萨。技能建造者.自定义()。
添加请求拦截器(
请求拦截器,
响应拦截器,
本地化拦截器,
1px;”> ).
添加请求处理程序(
启动请求处理程序,
颜色汉德勒,
帮助意向处理程序,
取消和停止意向处理程序,
会话已结束请求处理程序,
回退处理程序。
1px;”•错误处理程序。
创建()
}
返回等待技能。调用(事件上下文)
}
这里很重要的一点是小工具拦截器。此拦截器从请求中查找终结点Id并将其追加到会话。此终结点存在,因为我们已创建了产品/Alexa 小工具,并且python 脚本也在设备上运行。如果终结点不存在,也许我们的技能必须对用户说”未找到小工具”。请在连接小工具后重试。
/lib/utils’)
康斯特小工具拦截器 [ ]
异步进程(处理程序输入) |
康斯特终结点 Id = await utils.getendpointId 从连接端点(处理程序输入)
如果 (端点 Id) |
utils.appendToSession(处理程序输入、”端点Id”、端点Id)
}
}
}
模块.导出 = 小工具拦截器”数据朗=”文本/x-python”}
constutils需要(../lib/utils))
康斯特小工具拦截器[ ]
1px;”[康斯特终结点 Id ]等待使用。获取端点ID从连接端点(处理程序输入)
如果(端点 Id) |
乌蒂尔斯.追加会话(处理程序输入"终结点Id"终结点 IdId )
}
}
}
模块。导出小工具拦截器
最后,用于触发自定义事件的处理程序:
/lib/log’)
const 使用 = 要求(’./lib/utils’)
const 生成 LED 指令 = (端点 Id,颜色) > |
返回 |
类型:”自定义接口控制器.发送指令”,
标题: |
名称:”设置颜色”,
命名空间:”自定义.gonzalo123″
},
端点: |
终结点 ID: 终结点 ID
},
有效负载: { }
颜色:颜色
}
}
}
康斯特颜色处理程序 |
可以处理 (处理程序输入) |
返回处理程序输入.request 信封.request.request.type = “意向请求”
&handlerInput.requestEnvelope.request.intent.name = “颜色意图”
},
句柄(处理程序输入) |
const 请求属性 = 处理程序输入.属性管理器.getRequest 属性()
康斯特卡所有权 = 请求属性.t(”SKILL_NAME”)
康斯特终结点 Id = 使用. getendpointId 从会话(处理程序输入)
如果 (!端点 Id) |
日志.错误(”终结点”,错误)
返回处理程序输入.响应构建器。
说话(错误)。
get响应()
}
康斯特颜色 = 处理程序输入.request 信封.request.意向.插槽=’颜色’值。”颜色”值
日志.info(”颜色”,颜色)
log.info(”端点Id”,端点Id)
返回处理程序输入.响应构建器。
说话(’好吧。所选颜色为 $[color])。
带简单卡(卡片标题,颜色)。
添加指令(生成LED指令(端点Id,颜色)。
get响应()
}
}
模块.导出 = 颜色处理程序”数据朗=”文本/x-python”}
xxxxxxxxx
./lib/log’)
constutils需要(../lib/utils))
const生成 LED 指令= (端点 Id颜色) => |
返回|
键入"自定义接口控制器.发送指令",
标题: |
名称"设置颜色",
贡萨洛123′
},
端点: |
终结点 Id终结点ID
},
有效负载: |
颜色
}
}
1px;”[ 康斯特颜色处理程序]
可以处理(处理程序输入) |
返回处理程序输入。请求信封。请求。键入"意向请求"
&处理程序输入。请求信封。请求。意图。名称"颜色意图"
},
句柄(处理程序输入) |
康斯特请求属性处理程序输入。属性管理器。获取请求属性()
t(“SKILL_NAME”)
康斯特终结点 Id使用。获取 EndpointId 从会话(处理程序输入)
如果(!端点 ID){
日志。错误("终结点"错误)
返回处理程序输入。响应构建器.
说话(错误)。
1px;”> }
康斯特颜色处理程序输入。请求信封。请求。意图。插槽["颜色"]值
日志。信息("颜色"颜色)
日志。信息("端点 Id"终结点 Id)
返回处理程序输入。响应构建器.
所选颜色为 $=颜色*”。
与简单卡(卡标题颜色).
添加指令(生成 LED 指令(端点 Id颜色)。
获取响应()
}
}
模块。导出颜色处理程序
这里有一个视频与工作示例:
com/嵌入/1dVQDsk4kWo?和wmode=不透明”宽度=”640″*
我的 GitHub中的源代码 。