本帖最后由 syjjx 于 2018-1-11 17:28 编辑
我测试中的技能名字叫水滴,并非一定要是水滴,大家可以自己取喜欢的
不要问我为什么不设置"让水滴打开厨房灯"这种直接唤醒的语句,我也想来着,小米不开放,我也没办法
只为实现功能,并未搭建正式的平台,大家有兴趣可以自己完善
实现一下功能的前提,请对小爱大声喊
“小爱同学,进入开发者模式”
以后不退出也没关系的,不影响其他任何功能
已经实现的功能
1、可以查询HA中任何传感器的状态
直接唤醒:
“小爱同学,让"水滴"查一下功率"
此为直接唤醒,小爱会直接告诉你当前功率为多少。并且交互介绍之后自动退出技能,不影响使用其他技能。
技能内查询:
“小爱同学,打开"水滴""
"您好主人,我能为你做什么呢?"
“功率”、“水滴功率" 、“让水滴查一下功率”、"看一下功率" 此处适配了多个关键词,都可以触发查询功能
"当前功率为57瓦" 小爱回答完毕之后会进入聆听状态
'主人,您还在吗?' 每次尝试聆听都会提示以上内容
"再见主人,我在这里等你哦!" 3次尝试聆听后仍然没有收到指令,退出技能
此为技能内查询功能
2、可以控制HA进行开关操作
开关灯,开关插座灯控制智能开关的功能,小爱不支持第三方直接唤醒,只能使用技能内控制
技能内控制:
“小爱同学,打开"水滴""
"您好主人,我能为你做什么呢?"
“开灯”、“关灯" 、“打开厨房灯”、"打开所有灯"、"打开厨房插座"、"关闭所有插座"
"好的,为你打开厨房灯" 对于单个灯或者单个插座的指令,我会让他去判断当他灯的状态,如果已经是打开状态,他会提示你"灯已打开"
“厨房灯” 如果直接喊灯的名字,而不是用动词,则他会自己判断灯的状态,然后执行相对的操作
“厨房灯关闭”
'主人,您还在吗?' 每次尝试聆听都会提示以上内容
"再见主人,我在这里等你哦!" 3次尝试聆听后仍然没有收到指令,退出技能
准备工作
1、申请成为水滴平台的开发者
https://shuidi.mi.com
2、拥有一个可通过公网访问到的服务器,平台不行,只要能运行python
3、拥有一个域名,比如去阿里申请一个TOP证书,一年1块钱
4、为这个域名申请一个小米认可的证书
http://www.linuxidc.com/Linux/2017-03/142248.htm
免费证书申请参考上面的文章
创建技能
1、登录水滴平台,进入个人中心,点击创建技能
输入技能名称和勾选无屏设备之后,保存下一步技能,此类型的技能小米过审的可能性几乎没有的,所以名字随便取,而且和后面技能唤醒的关键词也么关系,所以大家随意
这一页那个调用名字,就是我之前提到的那个"水滴",此页除了这个我们需要使用到,其他的随便填,不希望正式发布的话 ,没任何关系的。
这一页的url地址就是之前需要你申请的,而且必须是有小米认可的证书的,第一行可以随意,只有正式发布才会使用到,第二行就是我们在开发者模式使用的
平台搭建
python版本 3以上即可
web框架 flask
需要的python模块json,time,requests
相信有致于折腾小爱的同学,平台搭建这种小事情都可以搞定的,这里就不展开的,实在不行google一下,资料一大堆
代码修改
为了方便大家修改,还一个我也是只为实现功能,代码写直白,没有精简过
下面列出几个要修改的地方
host="你的HA地址"
port=8123
password="你的HA密码"
行数分别在5,6,7,26,27,28行
然后是
修改成你自己的调用名称,在第51行
最后52-80行是重点了,我们先来看52-65行
is_direct_wakeup_words={"客厅光强":["sensor.illumination_286c07f0ab68",""],
"体感温度":["sensor.dark_sky_apparent_temperature",""],
"相对湿度":["sensor.dark_sky_humidity",""],
"臭氧指数":["sensor.dark_sky_ozone",""],
"臭氧":["sensor.dark_sky_ozone",""],
"降雨强度":["sensor.dark_sky_precip_intensity","毫米"],
"降雨概率":["sensor.dark_sky_precip_probability",""],
"气压":["sensor.dark_sky_pressure",""],
"气温":["sensor.dark_sky_temperature","摄氏度"],
"风向":["sensor.dark_sky_wind_bearing",""],
"风速":["sensor.dark_sky_wind_speed","米每秒"],
"功率":["sensor.watts","瓦"],
"温度":["sensor.dark_sky_temperature",""]
}
这是一个dict,里面定义了多个传感器,和HA中是相对应的,单独拿出两个来比较着看
"客厅光强":["sensor.illumination_286c07f0ab68",""]
"功率":["sensor.watts","瓦"]
"功率","客厅光强" 这是给我们的传感器起名字,有了名字之后我们就可以喊“小爱同学,让"水滴"查一下功率",
"sensor.illumination_286c07f0ab68","sensor.watts" 这个肯定大家不陌生了,就是entity_id
"","瓦" 这是告诉小爱我这个传感器的单位,如果填写的是"",那么会使用HA中的单位,建议都设置一下,避免尴尬,比如小爱会说现在温度为5.7C,他不会说摄氏度
接下来是66-76行
light_list={"厨房灯":"light.a1",
"客厅灯":"light.a2",
"网关灯":"light.gateway_light_286c07f0ab68",
"过道灯":"light.xuanguan",
"餐厅灯":"light.a3",
"所有灯":"group.all_lights",
}
switch_list={"厨房插座":"switch.wall_plug_158d00018236af",
"所有插座":"group.all_switches",
"所有开关":"group.all_switches",
}
"厨房灯","厨房插座"
"light.gateway_light_286c07f0ab68", "light.a3"
这些与传感器同理 不解释了,而且这个是不需要单位的,所以格式稍微有点不同
77-78行
all_lights_turn_off="关灯"
all_lights_turn_on="开灯"
看命名应该就知道这是关闭或者打开所有灯的命令,大家可以根据自己的喜好改
79-80行
turn_on_word="打开"
turn_off_word="关闭"
这是控制单个entity_id使用的明确控制词汇,比如"打开厨房灯"
修改到这里就可以适配自己的HA了,只要把他运行起来就可以了
参考文档
http://www.linuxidc.com/Linux/2017-03/142248.htm
https://dotblogs.com.tw/pou/2018/01/01/165823
https://shuidi.mi.com/case
|