『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 152529|回复: 444

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

  [复制链接]

15

主题

193

帖子

2044

积分

论坛技术达人

积分
2044
金钱
1831
HASS币
0

卓越贡献

发表于 2018-1-11 14:53:37 | 显示全部楼层 |阅读模式
本帖最后由 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、登录水滴平台,进入个人中心,点击创建技能

1.png

输入技能名称和勾选无屏设备之后,保存下一步技能,此类型的技能小米过审的可能性几乎没有的,所以名字随便取,而且和后面技能唤醒的关键词也么关系,所以大家随意

2.png

这一页那个调用名字,就是我之前提到的那个"水滴",此页除了这个我们需要使用到,其他的随便填,不希望正式发布的话 ,没任何关系的。

3.png

这一页的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


游客,如果您要查看本帖隐藏内容请回复


评分

参与人数 7金钱 +97 收起 理由
dkef730 + 2 厉害了word楼主!
Roger + 20 赠人玫瑰,手留余香!
neroxps + 10 在下对你的景仰犹如滔滔长江之水,连绵不绝.
apple4105 + 5 膜拜大神!
27hh + 20 又如茫茫沧海之水,……
+ 20 又如滚滚黄河之水,一发不可收拾…….
lidicn + 20 在下对你的景仰犹如滔滔长江之水,连绵不绝.

查看全部评分

回复

使用道具 举报

4

主题

209

帖子

1406

积分

金牌会员

Rank: 6Rank: 6

积分
1406
金钱
1197
HASS币
0
发表于 2018-1-11 14:56:17 | 显示全部楼层
抢到沙发
回复

使用道具 举报

32

主题

986

帖子

4233

积分

论坛元老

Rank: 8Rank: 8

积分
4233
金钱
3207
HASS币
110

教程狂人论坛风云人物

发表于 2018-1-11 14:57:28 来自手机 | 显示全部楼层
66666666!
回复

使用道具 举报

4

主题

75

帖子

306

积分

论坛分享达人

积分
306
金钱
231
HASS币
0
发表于 2018-1-11 14:59:52 | 显示全部楼层
前排支持。。。。。666
回复

使用道具 举报

123

主题

4626

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16013
金钱
11302
HASS币
45
发表于 2018-1-11 15:01:04 | 显示全部楼层
严重感谢楼主!!

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

使用道具 举报

8

主题

377

帖子

3540

积分

论坛元老

Rank: 8Rank: 8

积分
3540
金钱
3163
HASS币
0
发表于 2018-1-11 15:01:45 | 显示全部楼层
学习!!!!!!
回复

使用道具 举报

1

主题

115

帖子

989

积分

论坛积极会员

积分
989
金钱
874
HASS币
0
发表于 2018-1-11 15:02:46 来自手机 | 显示全部楼层
牛牛牛!
回复

使用道具 举报

14

主题

654

帖子

3828

积分

论坛元老

Rank: 8Rank: 8

积分
3828
金钱
3169
HASS币
10
发表于 2018-1-11 15:05:35 | 显示全部楼层
厉害了 观摩一下
回复

使用道具 举报

0

主题

3

帖子

30

积分

新手上路

Rank: 1

积分
30
金钱
27
HASS币
0
发表于 2018-1-11 15:07:21 | 显示全部楼层
厉害了,支持支持
回复

使用道具 举报

9

主题

787

帖子

3831

积分

论坛元老

Rank: 8Rank: 8

积分
3831
金钱
3044
HASS币
87
发表于 2018-1-11 15:07:48 | 显示全部楼层
膜拜一下~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-26 06:11 , Processed in 0.821081 second(s), 42 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表