syjjx 发表于 2018-1-11 14:53:37

『小爱音箱』通过自定义技能控制HA

本帖最后由 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行
然后是skill_name="水滴"
修改成你自己的调用名称,在第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


**** Hidden Message *****

wanyakui520 发表于 2018-1-11 14:56:17

抢到沙发:lol

27hh 发表于 2018-1-11 14:57:28

66666666!

876310253 发表于 2018-1-11 14:59:52

前排支持。。。。。666

发表于 2018-1-11 15:01:04

严重感谢楼主!!

另外这个不用oauth啊,那就方便很多了!

zhizhi1991 发表于 2018-1-11 15:01:45

学习!!!!!!

ainson 发表于 2018-1-11 15:02:46

牛牛牛!

余歌唱晚 发表于 2018-1-11 15:05:35

厉害了 观摩一下

zhoufufu 发表于 2018-1-11 15:07:21

厉害了,支持支持

令狐鸣 发表于 2018-1-11 15:07:48

膜拜一下~:lol
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 『小爱音箱』通过自定义技能控制HA