扫地机器人接入Google Assistant
date
Oct 28, 2022
slug
扫地机器人接入Google-Assistant
status
Published
tags
智能家居
summary
type
Post
背景
购入的追觅的扫地机器人无法跟家里的Google Home mini只能音箱联动,但是机器人能接入Homeassistant,于是尝试Google Home与Homeassistant联动。
构思方案
首先Google的智能家居平台的接入,Google这方面很开放,个人开发者也可以接入,官网在这。这里我选择的是Cloud-To-Cloud方案,根据接入文档的描述,自己开发的设备平台需要实现OAuth 2.0,这样Google Home才能接入。
Device
是Google Home平台支持的设备类型,Traits
是设备的能力。Traits
是开发者自己实现的,可玩性很高,只要Google Home触发我想要的动作就可以了,我这里使用MQTT使Google Home与HomeAssistant联动,整个流程动作是这样:语音唤醒Google Home音箱说出任务→Google Assistant解析语音请求触发Google Home动作→Google Home 平台触发开发者平台设备动作→发送MQTT→Home Assistant接收到MQTT时间触发设备动作
上面红字部分才是需要我们自己实现的。
接入
Google Home 平台的接入
接入流程:
- 实现OAuth 2.0 服务
- Action Console后台配置OAuth 2.0接入
- Intent fulfillment实现
- Sync 请求实现,这里告诉Google Home平台有什么设备,每个设备有什么能力(Triats)
- Query 和 Execute请求实现
- Query请求由Google Home平台发起,用于查询设备状态显示在Google Home App 、带显示屏的语音音箱或者Google Assistant语音交互(通过Google Assistant询问设备状态)
- Execute请求也是由Google Home发起,告诉开发者平台请求设备动作,也就是Traits的实现,具体的设备动作实现由开发者平台自定义。
- Disconnect 请求实现,Google Home平台与开发者平台断开
- Request Sync,当开发者平台新增或者修改设备需要告知Google Home平台重新发送Sync请求同步设备
- Implement Report State,设备状态上报(没用上)
- Send Notification,发送通知,通知会在Google Home App上显示或者带显示屏的语音音响上显示(没用上)
MQTT Broker搭建
MQTT Broker的选型很多,有国人EMQX,RabbitMQ(要安装相应插件),HiveMQ等。由于是自用,我这里直接公有云上搭建Eclipse Mosquitto ,免费够用,一切配置保留默认。
开发者平台搭建
- 使用Java Spring Boot开发
- 数据库使用Google的Firestore,这里主要是存设备相关的信息,主要因为不同设备的数据结构都不一样,难以使用关系型数据库统一管理
- CI/CD使用Github Action,每次Git Push自动构建最新镜像并推送到Docker Hub个人仓库并且自动部署,所以只需一次commit and push 就可以自动化部署到服务器了
- 部署使用Docker-Compose,配置好
docker-compose.yml
,只要每次pull镜像就可以了
- 日志查看直接
tail -f log
吧,logstash+ES那套大材小用了
Action Console后台配置
配置非常简单,只需要填好红框部分的内容就行了
Google Home App配置
添加设备→设置设备→与Google服务兼容→选择[test]我的测试应用程式
这里有[test]是因为我没有Deploy,如果Deploy所有的Google Home App用户都可以见到我的开发平台(虽然他们不知道密码没法登录),由于是自用,所以一直停留在Test阶段就可以了
Home Assistant配置
- Home Assistant也是使用Docker-Compose搭建,只需注意把network=host就可以了,搭建可以参考Install Home Assistant Container
- 添加MIOT集成,选择账号集成不用单个配置token
- 添加完成后就可以在HomeAssistant上看到扫地机器人了,机器人是可以接入米家的,但我没有小爱同学音箱
- 同样添加集成里面选择MQTT
- 设置自动化,设置MQTT监听主题以及收到出发设备动作的消息内容
测试
Google Home 有个Test Suite里面有很多测试用例,根据你的设备能力可以跑一遍自动化测试,所有测试用例通过后就可以正常使用量