一个更加方便控制空调的方式,就是让树莓派接入天猫精灵,只需动动嘴就能开关空调,再也不用满屋子找空调遥控器和手机了。放心,只有你的天猫精灵能够控制你的空调,别人的天猫精灵控制不了。一起来看看吧~
空调遥控器系列教程
一、树莓派制作空调遥控器1:使用红外发射管制作空调遥控器
二、树莓派制作空调遥控器2: 在网页中控制空调
三、树莓派制作空调遥控器3: 天猫精灵控制空调
准备工作
- 能够在树莓派上使用命令行控制空调,如果没有完成,请转到《树莓派制作空调遥控器1:使用红外发射管制作空调遥控器》。
- 能够在外网访问树莓派,本教程使用一台云服务器做中转,给树莓派提供内网穿透。
- 有一台天猫精灵(方糖、方糖R、天猫精灵、天猫精灵CC都可以)。
- 安装天猫精灵APP。
注意:树莓派必须能在外网访问,否则天猫精灵服务器无法调用树莓派。
调用步骤
为方便大家理解,简单说一下调用步骤:
- 用户说出“天猫精灵,打开空调”。
- 天猫精灵语音识别后,找到对应的技能并调用,然后,天猫精灵的服务器会发送识别结果给树莓派。
- 树莓派收到天猫精灵服务器的调用后,执行打开空调的命令,并且返回文字“好的,空调已经开启”。
- 天猫精灵播放“好的,空调已经开启”。
搭建Web服务
在树莓派上搭建PHP + Nginx环境,数据库可有可无。参考在树莓派3B上安装PHP 7.3 + Nginx + Mariadb。
安装完成后,进入网站根目录
/usr/local/nginx/html
。创建一个文件夹
ac
,在ac
文件夹中新建一个bot.php
稍后用于处理天猫精灵的请求,文件内容暂时写个Helloworld:1
2
echo "Hello, Pi!";保存文件后,在浏览器中打开:
http://你的树莓派IP/ac/bot.php
正常情况下能够看到“Hello, Pi!”,如果没有,请检查树莓派IP是否正确、Nginx是否已经开启、网站根目录是否正确等等。
内网穿透
必须要在公网中,天猫精灵服务器才能访问到树莓派。在这里使用一台有公网IP的云服务器做中转,在树莓派上执行如下命令:
1 | ssh -NT -R :2009:127.0.0.1:80 root@111.111.111.111 |
其中2009
是云服务器端口号,自己随便选一个;root
和111.111.111.111
改成你的云服务器的用户名和IP地址,命令执行后需要输入云服务器密码。接下来在浏览器打开:
http://你的服务器IP:2009/ac/bot.php
正常情况下能够看到“Hello, Pi!”,说明已经可以在公网中访问树莓派。
注意!!! 可能需要到云服务器控制台,找到这台服务器的防火墙,允许通过2009端口。
接入天猫精灵开放平台
第一步:登录天猫精灵开放平台
进入天猫精灵开发者平台,使用淘宝帐号登录、完成基本信息填写,不再赘述。
第二步:添加新技能
登录后,进入控制台,点击“添加新技能”。
填写说明:
技能名称:随便写
技能类型:自定义(为什么不选智能家居?智能家居需要实现OAuth、设备发现协议等,较为麻烦。简单起见,选自定义)
调用词: 让天猫精灵调用“打开空调”技能要用到的词语,例如填写了“遥控器”,就要说“天猫精灵,用遥控器打开空调”;如果你填写的是“管家”,那你就要说“让管家打开空调”。注意不要用生僻词语,例如“树莓派”,不然天猫精灵语音识别不准确。
技能描述: 随便写
第三步:创建实体
依次点击“实体”、“创建实体”。
填写说明:
实体名称:实体,可以理解为参数、变量。例如“
打开
空调”、“关闭
空调”,这里的打开
和关闭
就是变量;“把空调调到26
度”,这里的26
就是变量。简单起见,创建一个action
实体,这个实体的值可以是“打开”或“关闭”。
描述 : 随便填写。
第四步:新增实体内容
新增两个action
实体内容:“打开”和关闭,新增后如下图所示:
第五步:创建意图
依次点击“意图”、“创建意图”。意图名称随便填写, 不影响功能。
第六步:配置意图
创建完意图之后,点击“编辑”,进入意图配置页面,然后添加普通语料:
输入语料内容“打开空调”,选中输入框中的文字
打开
,页面上会弹出实体列表,选择刚刚创建的实体action
。其它语料用同样的方法操作。设置
action
参数为必选,如下图:回复配置
终于来到重点部分,这里的Web Hook URL就是天猫精灵调用树莓派的地址。当你对天猫精灵说出“开启空调”的时候,天猫精灵的服务器将会发送天猫精灵设备ID、调用的技能、实体等信息发送到这个地址(也就是树莓派),树莓派就能调用红外发射管,打开空调。
首先需要下载认证文件,并且存放到网站根目录的/aligenie/目录中。存放位置如下:
/usr/local/nginx/html/aligenie/a8f75c54c3.....4ca.txt
每个人的认证文件名称不一样,务必按照下载到的文件名,不能修改。
确认能够在浏览器中访问:
http://云服务器IP:2009/aligenie/a8f75c54c3…..4ca.txt
返回到天猫精灵开发者网页中,填写Web Hook URL为:
http://云服务器IP:2009/ac/bot.php
然后提交,如下图:
树莓派响应天猫精灵
向天猫精灵发出“开启空调”口令后,http://云服务器IP:2009/ac/bot.php
就会被调用。
在bot.php
这个文件中,我们需要处理:
- 判断要执行的动作:打开空调还是关闭空调?
- 调用“打开空调”或“关闭空调”的命令。
- 返回消息“好的,空调已经开启”给天猫精灵。
详细的接口文档参考:天猫精灵官方文档-业务逻辑配置。
代码如下:
1 |
|
保存bot.php
后,就可以开始测试啦。
功能测试
在线测试
在天猫精灵开发者平台,点击“测试验证”,输入“调用词+语料”,例如“遥控器打开空调”:
点击“测试”后,调用请求会被发送到树莓派,空调会被打开。
真机测试
首先打开真机测试:
开启真机测试后,就可以对天猫精灵说出以下口令控制空调啦:
- 遥控器打开空调
- 遥控器关闭空调
- 遥控器关空调
- 遥控器开空调
等等…我不想说这么多字怎么办,每次都说“遥控器遥控器”傻傻的…能不能只说“开空调”三个字?
当然可以! 只需到天猫精灵APP,打开“我家”、“组合指令”,点击添加图标。设置说出“开空调”的时候,让天猫精灵执行“遥控器打开空调”,如下图:
常见问题
天猫精灵调用技能失败
技能调用失败通常有以下几种情况:
- 语音没有正确识别。
调用词不能使用生僻词语,尽量不使用多音词语。比如使用“树莓派”做为调用词,天猫精灵是听不懂的。在天猫精灵APP中可以看到对话记录,看看语音转文字是否正确。
在线测试也通过,语音识别也是正确的,但是真机测试播报“呜呜呜,没有找到你要操作的设备”?
这种情况一般是口令没有识别正确,调用口令是“调用词+语料”。例如“遥控器 打开空调”。如果直接说“打开空调”可能不能准确对应到我们添加的技能。在线测试通过,但是真机测试时调用了其它技能?
检查调用词是否冲突,在天猫精灵APP中搜索调用词,看看别人是否以及使用。天猫精灵播报“一不留神,连您的吩咐都听岔了,请再说一次呗”
说明天猫精灵调用树莓派的时候网络连接失败了,在浏览器中打开http://云服务器IP:2009/ac/bot.php
,检查能否打开,是否报错。在线测试的时候提示“服务查询开小差了,正在紧急修复”
原因、解决方法参考上一条。