测试网站:
配置说明:https://leyunone.com/github-project/voice-cloud-cloud-config.html
- 注:学习测试以及使用请拉取 master 分支,release 是开发分支,如果有帮助到你,感谢不留情面的提Issues或pull吐槽
- 开源不易,点个 star 鼓励一下吧!
问:这是什么?
答:对接各大产商云如小度、天猫精灵,小爱同学,Alexa等智能语音技能的云云接入协议,是一个全平台通用的中间层物联网设备模型转化平台。
问:有什么用?
答:
- 自带完整体系的小度、小米、Alexa、Google等主流物联网平台云云接入协议,拆箱即用
- 产商云与开发者云的模型转化被数据库配置化,可由页面进行可视化配置他方云模型与我方云模型的转化关系。
- 是物联网云云接入协议技能平台的一个完整(从架构功能,授权到可视化页面)流程的解决方案
问:定位是什么?
答:以天猫精灵官网的结构图为例:
本项目平台介于天猫精灵
到第三方设备控制云
之间,将本该由开发云进行控制协议、发现协议等设备交互的云云协议转化,全权由本项目平台进行全平台通用的可配置模式的转化
问:怎么用?
答: 下载代码,运行数据库文件,各使用者根据自身情况修改一个类中的代码。部署项目,打开前后端不分离的配置页面,配置各平台中开发云与产商云设备模型转化。
云云接入协议流程如下:
本平台 = 产商云技能
以设备控制为例,简单的流程是:
- 用户语音触发三方平台,以下以发起
打开空调
为例 - 三方平台根据
打开空调
找到对应设备,将设备id与打开空调
动作通过HTTP接口调用的方式,转递给产商云 - 产商云根据
控制设备
指令协议进行接口对接,将其消耗至内部云服务中,进行实施的设备控制
云云接入的核心也将围绕着将对方模型转换为我方模型这一理念进行设计,大致架构图为:
部署环境:
环境 | 版本 |
---|---|
JDK | 8 |
Mysql | 不限 |
Redis | 不限 |
Rabbitmq | 不限 |
Google-auth | 1.19.0 |
数据库见voice_cloud.sql文件
因为各开发云的业务不同,本平台一定得由使用者进行一定的代码调整,下面将以百度为例进行代码跟踪;
入口:PortalController
@PostMapping("baidu")
public String baidu(@RequestBody String payload) {
return thirdPartyPortalService.portal(payload, ThirdPartyCloudEnum.BAIDU);
}
使用策略模式走到 BaiduCloudHandler
中
该类中进行如下动作
- 刷新产商云在平台的token
- 检查场景类特殊设备
- 调用协议执行方法
以百度的发现设备报文为例:
{
"header": {
"namespace": "DuerOS.ConnectedHome.Discovery",
"name": "DiscoverAppliancesRequest",
"messageId": "6d6d6e14-8aee-473e-8c24-0d31ff9c17a2",
"payloadVersion": "1"
},
"payload": {
"accessToken": "[OAuth Token here]",
"openUid": "27a7d83c2d3cfbad5d387cd35f3ca17b"
}
}
执行BaiduDeviceDiscoveryHandler
类方法
使用者在DeviceServiceHttpManager
中修改我方云实际发现设备动作的请求,一般为HTTP,也可使用Rpc。
调用修改后的方法拿到设备后,将发现到的设备与本次请求的用户关系存储到数据库中,并且在缓存中建立设备-用户的关系文档
执行BaiduDeviceConvert
模型转化方法,将发现到的设备通过数据库中配置的模型属性映射关系,变为百度方的设备结构;
组装响应参,返回,结束;
架构大体上使用策略+抽象工厂的模式搭建,通过上述的路线查看代码,只需要修改DeviceServiceHttpManager
中实际云通讯部分的代码即可完成部署;
包括上报、同步、协议对接部分的所有开发云的响应参请以本项目中的DeviceInfo和DeviceFunctionDTO为准