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

 找回密码
 立即注册
查看: 79832|回复: 57

[经验分享] 分享最新版小爱开发平台接入hass,实现小爱同学控制hass设备

  [复制链接]

2

主题

51

帖子

331

积分

论坛技术达人

积分
331
金钱
275
HASS币
20
发表于 2020-4-20 00:00:53 | 显示全部楼层 |阅读模式
本帖最后由 mch1992 于 2020-4-20 16:16 编辑

背景:
2017年接触的hass,搭建完后就没有再管过,直到2020年疫情原因闲在家开始倒腾。
一直想用小爱同学控制家里DIY的设备,比如esphome接入的,espeasy接入的设备,最开始看到的是利用大神破解的方法截获黑版小爱的ssh,无奈手里没有,只有绿板,后来看到有人分享了用小爱的开放平台,可以自定义技能,感觉是我想要实现的方式,然后开始研究,发现坛子里的技术达人syjjx发表了一个教学贴,链接https://bbs.hassbian.com/thread-2404-1-1.html,以下所有内容都是我在此基础上调试的,所以是站在巨人的肩膀上。
分割线···················································
syjjx达人发布的方法是基于小爱开发平台改版前,目前的新平台的response和request报文内容有所更改,但大体思路不变,我在此基础上根据目前的开发平台重新梳理以下流程。
第一步:使用自己的小米手机或小爱音箱登录账号申请成为小爱开放平台的开发者
链接https://xiaoai.mi.com
目前申请需要提供本人的个人信息,包括身份证照片等,一般工作日工作时间一个小时就能过审


第二步:申请域名,获取ssl证书,在syjjx的帖子里讲到了,这里不赘述
第三步:在小爱开放平台添加技能
进入控制台,选择技能开发平台→创建新技能→自定义技能
给自己的技能取一个名字,我用的小青,这里最好是用顺口,简单的名字,不然使用的时候会很别扭

1

1

2

2

此处划重点,当前的小爱开放平台提供了意图唤醒,用“让小青打开主卧灯”灯这类词可以直接唤醒小爱同学并执行相关指令,在意图唤醒选框打勾,然后如下设置

3

3

其中(text)内容小爱开放平台称之为槽,用于命中当前技能后发送给我们自己服务器的具体内容
然后接着设置以下内容

4

4

在小爱的交互逻辑中,你说的话被小爱直接识别为这个自定义技能称之为命中意图,命中意图后你希望将什么语料传送给自己的服务器,就是在这里设置,我的思路是只要是包含“让小青XXXXXXX”的话全部识别为一个意图,统一传送给服务器,后面的语义识别我们自己用python完成,所以进行了如上设置,如果希望在这个平台里自己设置,可以参考官方文档,还是比较详细的。
这里设置好了之后就要设置服务端口

5

5

我们一般用到测试环境就行,自己的小技能很难过审发布。
https://yourhost:port/value
yourhost替换成你自己申请号ssl证书的域名,port也可以自己设置,匹配python服务端程序就行,value同理


完成以后就可以点击进入测试环境,小爱音箱端和手机端都可以使用,但是要分别建立技能,这个很简单。


第四步:自己在ssl域名指向的服务器中运行该python脚本
整体代码见附件,
main.zip (2.28 KB, 下载次数: 237)
代码逻辑整体上是参照了syjjx达人的思路,然后根据现在的实际情况有所调整,我把需要值得说明的地方重点描述
### home-assistant服务器的配置信息
host = "XXXXXXXXX"
port = 8123
password = "Bearer ABCD"
headers = {
    "Authorization": password,
    "Content-Type": "application/json"
}
这里需要划重点,也是我在调试syjjx的代码的时候发现的问题,hass的rest api的认证方式已经发生了变化,syjjx之前的已经不适用,需要换成上面的方法,ABCD换成你的hass申请的永久访问令牌token,xxxxx为你自己的hass服务器ip。
app = Flask(__name__)
@app.route('/value', methods=['POST'])
def index():
    open_mic = True
    is_session_end = False
    tts_word = ""
    ### 等待小爱同学收到语料后发来报文
    data_x = request.get_json()
    app.logger.warn(data_x)
    ### 采用打开小兰命令进入技能
    if data_x["request"]["slot_info"]["intent_name"] == "Mi_Welcome":
        open_mic = True
        is_session_end = False
        tts_word="您好主人,我能为你做什么呢?"
    ### 主动退出技能
    elif data_x["request"]["type"] == 2:
        open_mic=False
        is_session_end=True
        tts_word="再见主人,我在这里等你哦!"
    ### 意图唤醒
    elif data_x["request"]["slot_info"]["intent_name"] == "command":
这里是另外一个重点,syjjx原代码用的是判别type的值和‘is_direct_wakeup’字段判别,但是新版小爱取消了这个返回字段,所以我是通过具体intent的字段来判识,实测效果较好。


                               
登录/注册后可看大图



目前已经实现了在新版小爱开放平台与hass的完全互联,至于怎么玩出花来那就是优化完善python代码的事情了,如果对代码有不理解的地方,可以留言,我会回复,如果对小爱的交互逻辑不理解,可以先看官网的说明文档,不清楚的也可以留言。
第一次发帖,请多指教。
后续我准备把家里60+个自制设备接入homeassistant的过程陆续分享出来。

评分

参与人数 4金钱 +28 收起 理由
scychina + 1
+ 20 厉害了word楼主!
251114061 + 2
z死囚漫步 + 5 期待更多关于小爱的教程

查看全部评分

回复

使用道具 举报

1

主题

34

帖子

349

积分

中级会员

Rank: 3Rank: 3

积分
349
金钱
315
HASS币
0
发表于 2020-4-20 02:13:25 来自手机 | 显示全部楼层
感觉和亚马逊skill差不多,可惜我木有小爱
回复

使用道具 举报

3

主题

91

帖子

879

积分

高级会员

Rank: 4

积分
879
金钱
788
HASS币
0
发表于 2020-4-20 03:16:33 来自手机 | 显示全部楼层
顶一下,关注后续的接入教程
回复

使用道具 举报

2

主题

51

帖子

331

积分

论坛技术达人

积分
331
金钱
275
HASS币
20
 楼主| 发表于 2020-4-20 08:23:04 来自手机 | 显示全部楼层
kodm 发表于 2020-4-20 02:13
感觉和亚马逊skill差不多,可惜我木有小爱

是的,各家平台的技能开发都是大同小异,这个方案的好处是极大方便了米粉,手机呼小爱出来那是相当方便的。各取所需吧。
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-4-20 10:59:14 | 显示全部楼层
mch1992 发表于 2020-4-20 08:23
是的,各家平台的技能开发都是大同小异,这个方案的好处是极大方便了米粉,手机呼小爱出来那是相当方便的 ...

让什么什么 做什么什么还是不太优雅~
Nero
回复

使用道具 举报

0

主题

85

帖子

328

积分

中级会员

Rank: 3Rank: 3

积分
328
金钱
243
HASS币
0
发表于 2020-4-20 12:19:34 | 显示全部楼层
MARK 留名
回复

使用道具 举报

6

主题

352

帖子

1333

积分

金牌会员

Rank: 6Rank: 6

积分
1333
金钱
981
HASS币
0
发表于 2020-4-20 16:02:21 | 显示全部楼层
谢谢分享,向大神学习!
回复

使用道具 举报

2

主题

51

帖子

331

积分

论坛技术达人

积分
331
金钱
275
HASS币
20
 楼主| 发表于 2020-4-20 16:21:20 | 显示全部楼层
neroxps 发表于 2020-4-20 10:59
让什么什么 做什么什么还是不太优雅~

原配当然更好,不过毕竟是小米原生支持的技能,不用动音箱的硬件了,对有小米手机的其实很友好
回复

使用道具 举报

0

主题

17

帖子

54

积分

注册会员

Rank: 2

积分
54
金钱
37
HASS币
0
发表于 2020-4-20 23:54:23 | 显示全部楼层
学习学习
回复

使用道具 举报

2

主题

62

帖子

575

积分

高级会员

Rank: 4

积分
575
金钱
513
HASS币
0
发表于 2020-4-21 13:51:31 | 显示全部楼层
感谢分享,学习一下
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-23 03:10 , Processed in 0.069908 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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