0、前言
搬砖回家一天之后还要手动开电脑,这对打工人一点也不友好,有没有能够躺着就把事情办了的方法呢,看到显示器下面的吃灰很久的天猫精灵,想如果能用语音开机就好了
于是开始了百度的搜索的一天,陆续折腾三天才最终稿好了(最起码能用了... )
网上找的的大多数的方案是买个智能插座,设置主板上电自动开机,这看上去一点也不高端,反正我不太能接受这个方案,翻腾半天 最终参考这个帖子实现了语音 在此感谢H大!
帖子中提到的用caddy http 服务器,我折腾了两天也没有弄好,主要是当时博主用的是caddy v1 的版本,现在已经更新到v2 了,进行了大改版,导致我们要用的 cgi 插件不支持了,捣鼓好久最终放弃。
通过搜索发现openwrt 自带的 uhttpd 就是支持简单的 cgi 功能的,于是查找相关的资料就用这个来简单的实现一下吧。
参考的帖子主要有:
xuebuyuan.com/2170113
blog.chinaunix.net
大概的实现原理应该是通过自定义的天猫精灵技能,识别之后调用自定义的webhook ,而这个webhook 触发在局域网中的路由器脚本,脚本中的wol 命令发送网络唤醒数据包,电脑网卡收到之后就能开机了。
要实现这个方案有三个前提:
1、需要有个可以登录 ssh 的路由器(最好是刷了openwrt 的,其他的系统是否可以没有验证过)
2、家里有公网地址(最好是有自己的域名并且做了ddns),或者能内网穿透应该也行(frp 等)
3、电脑的网卡要支持wol ,并且路由器和这个网卡最好是直连的
这三点我都满足(宽带是北京联通300M 公网地址),路由器还是之前捡垃圾来的那个小娱C5 (之前用来折腾hass了,结果也是玩两天就再也没有用过)
首先需要登录阿里的开发平台(成为开发者需要实名身份证认证,如果对此介意的话可以不用往下看了):
1、路由器配置
登录路由器,在路由器的这个目录下面创建一个cgi shell文件shell 脚本: tmall_wol.sh
root@OpenWrt:/www/cgi-bin# touch tmall_wol.sh
然后脚本内容大概为:
简单的唤醒脚本
脚本解释:
#其中 wol 命令也可以换成 etherwake ,这个可以看自己的路由器上面是哪个命令,根据自己的具体情况去修改就行了
#!/bin/sh
# touch ok 此为测试 webhook是否正常的调用到我们本地路由器的这个脚本的命令,如果能正确调用后会再 www/ 目录下创建一个名字为 ok 的空文件
#下面的命令是路由器上执行唤醒主机的命令,注意把mac 地址换成自己电脑的
/usr/bin/wol -v "34:97:F6:11:22:33"
最后需要给这个文件执行权限:
root@OpenWrt:/www/cgi-bin# chmod +x tmall_wol.sh
脚本完成之后可以先手动测试这个脚本是否能正常开机,同时检查电脑的网卡配置是否正确:
电脑的网卡配置要能够支持 wol
2、创建语音技能
创建语音技能的开发文档可以参考 :www.aligenie.com
创建一个新技能
创建实体
输入实体,中间用空格间隔 之后回车
创建意图
如果提示 报存失败,原因:未正确获取到认证文件,那说明是你的路由器那端没有搞正确,证书文一定要放到路由器的正确的位置才行!
请参考官方文档进行定位
如果提示 保存失败,原因:服务器遇到点状况,正在修复~
我一开始也是遇到这个问题,找了半天原因是因为我的URL中的端口填写错误了,因为我的这个路由器是在二级路由的位置,外网访问是做了端口映射的,所以要填写正确的端口(但是很奇怪的是上面的步骤填写错了端口不报错,不知道是为啥)
弄完上面的webhook 应该就可以上真机测试了,通过绑定账号的天猫精灵 直接喊“ 天猫精灵,打开电脑”不出意外的话就能唤醒开机了
理论上用天猫精灵关闭电脑也是可以实现的,需要再电脑端安装个python ,然后写个脚本,通过精灵的webhook 触发电脑上面的脚本,执行关机命令就行了,原理是类似的。
现在存在的问题是有安全隐患,因为现在是没有任何认证机制,直接执行这个cgi shell 就可以触发开机动作,其实应该加个认证保护机制的,暂时懒得搞了,先这样吧。。。
最终实现了躺着就可以唤醒电脑了
总结
最终算是能解放双手通过语音控制打开电脑,虽然不是很完美但是目前使用了十几天,没有啥大毛病,以后有时间了在折腾其他功能(其实大概率是不会搞的啦
)