语音技能云云接入通用平台

Cloud-to-Cloud(云云接入)

前言

项目地址:https://github.com/LeYunone/cloud-to-cloud

配置说明:https://leyunone.com/github-project/voice-cloud-cloud-config.html

  • 注:学习测试以及使用请拉取 master 分支,release 是开发分支,如果有帮助到你,感谢不留情面的提Issues或pull吐槽
  • 开源不易,点个 star 鼓励一下吧!

简介

问:这是什么?

:对接各大产商云如小度天猫精灵小爱同学Alexa等智能语音技能的云云接入协议,是一个全平台通用的中间层物联网设备模型转化平台。

问:有什么用?

  1. 自带完整体系的小度、小米、Alexa、Google等主流物联网平台云云接入协议,拆箱即用
  2. 产商云与开发者云的模型转化被数据库配置化,可由页面进行可视化配置他方云模型与我方云模型的转化关系。
  3. 是物联网云云接入协议技能平台的一个完整(从架构功能,授权到可视化页面)流程的解决方案

问:定位是什么?

:以天猫精灵官网的结构图为例:

本项目平台介于天猫精灵第三方设备控制云之间,将本该由开发云进行控制协议、发现协议等设备交互的云云协议转化,全权由本项目平台进行全平台通用的可配置模式的转化

问:怎么用?

答: 下载代码,运行数据库文件,各使用者根据自身情况修改一个类中的代码。部署项目,打开前后端不分离的配置页面,配置各平台中开发云与产商云设备模型转化。

流程与架构图

云云接入协议流程如下:

本平台 = 产商云技能

以设备控制为例,简单的流程是:

  1. 用户语音触发三方平台,以下以发起 打开空调 为例
  2. 三方平台根据 打开空调 找到对应设备,将设备id与 打开空调 动作通过HTTP接口调用的方式,转递给产商云
  3. 产商云根据 控制设备 指令协议进行接口对接,将其消耗至内部云服务中,进行实施的设备控制

云云接入的核心也将围绕着将对方模型转换为我方模型这一理念进行设计,大致架构图为:

平台部署与代码调整

部署环境:

环境版本
JDK8
Mysql不限
Redis不限
Rabbitmq不限
Google-auth1.19.0

数据库见voice_cloud.sql文件

以下选读

因为各开发云的业务不同,本平台一定得由使用者进行一定的代码调整,下面将以百度为例进行代码跟踪;

入口:PortalController

	@PostMapping("baidu")public String baidu(@RequestBody String payload) {return thirdPartyPortalService.portal(payload, ThirdPartyCloudEnum.BAIDU);}

使用策略模式走到 BaiduCloudHandler

该类中进行如下动作

  1. 刷新产商云在平台的token
  2. 检查场景类特殊设备
  3. 调用协议执行方法

以百度的发现设备报文为例:

{"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为准

相关链接

  • 小度 https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/discovery-message_markdown

  • 小爱同学 https://developers.xiaoai.mi.com/documents/Home?type=/api/doc/render_markdown/SkillAccess/skill/CustomSkillsMain

  • 华为HiLink https://developer.huawei.com/consumer/cn/doc/smarthome-Guides/yunaccount-0000001075288087

  • 天猫精灵 https://www.aligenie.com/doc/357554/cmhq2c

  • Alexa https://developer.amazon.com/en-US/docs/alexa/device-apis/alexa-discovery.html

  • Google https://developers.home.google.com/cloud-to-cloud/integration/sync?hl=zh-cn

  • 物联网语音云云接入

  • 云云对接协议中的值组装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python pip 安装

如果您不确定pip的安装路径,可以通过以下命令来查询: pip show pip 这个命令会显示pip的详细信息,其中包括pip安装的路径。如果您想修改pip的默认安装路径,可以使用pip的"--target"参数指定目标路径,例如&a…

8.7k Star!Khoj:你的AI第二大脑、开源RAG Cop​​ilot、平替 MS Copilot与ChatGPT

原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) 8.7k Star!Khoj:你的AI第二大脑、开源RAG Cop​​ilot、平替 MS Copilot与ChatGPT 🌟你的AI第二大脑。…

zynq-7015启动分析及裸机BootLoader编写(未完待续)

使用lwip-tcp远程对QSPI进行更新、QSPI FLASH启动 W25Q128资料: W25Q128JV datasheet(1/78 Pages) WINBOND | 3V 128M-bit serial flash memory with dual/quad spi (alldatasheet.com) UG585资料: Zynq 7000 SoC Technical Reference Manual-UG585 翻译…

【ARFoundation自学05】人脸追踪(AR Face manager)实现

1. 修改摄像机朝向渲染方式-选中user 这个方式就会调用前置摄像头 2 创建 AR Session、XR Origin,然后在XR Origin上面添加组件 注意:XR Origin 老版本仍然叫 AR Session Origin 接下来在XR Origin上面添加AR Face Manager组件,如下图&am…

剧本杀市场仍在快速发展,剧本杀小程序成为了新的机遇

近年来,剧本杀一直是年轻人的娱乐游戏方式之一,剧本杀行业呈现出了井喷式发展的形势,成为了当下爆火的娱乐方式。目前,剧本杀行业拥有了完善的剧本资源和呈现方式,发展前景非常大。 根据当下的数据显示,剧…

NextJs 实现自定义点火操作

NextJs 实现自定义点火操作 前言实现自定义点火 前言 我希望在Nextjs 启动的时候,能够自定义实现一些项目的初始化逻辑,也可以说是一些点火操作,比如资源的加载,数据的初始化等操作。 实现自定义点火 我们可以在根目录下创建一…

Android 开机动画的启动过程BootAnimation(基于Android10.0.0-r41)

文章目录 Android 开机动画的启动过程BootAnimation(基于Android10.0.0-r41)1.开机动画的启动过程概述2.为什么设置了属性之后就会播放? Android 开机动画的启动过程BootAnimation(基于Android10.0.0-r41) 1.开机动画的启动过程概述 下面就是BootAnimation的重要部…

移动app测试重要性体现在哪些方面?专业app测试报告获取

移动app测试是指对手机应用进行各种测试和评估的过程,以确保应用的功能、性能和用户体验达到要求。在现代社会中,移动应用已经成为人们日常生活的一部分。无论是社交娱乐、购物支付还是工作学习,移动应用都发挥着不可替代的作用。因此&#x…

单元测试AIR原则:提升代码质量的秘密武器

文章目录 引言一、AIR原则1. Automatic(自动化)2. Independent(独立性)3. Repeatable(可重复性) 二、Automatic(自动化)三、Independent(独立性)四、Repeatab…

【MySQL】sql语句之表操作(上)

序言 在上一篇的数据库操作的内容中,学习了两种属性和常用的七种操作,学习是循序渐进的,库的操作学完了,就要开始学习表的操作了,而表可与数据强相关,比如DDL,即数据定义语言,DML&am…

DVWA-XSS(Stored)

Low 观察后端代码,对输入进行了一些过滤和转义。trim(string,charlist) 函数用于移除字符串两侧的空白字符或其他预定义字符,charlist 参数可以规定从字符串中删除哪些字符。stripslashes() 函数用于删除反斜杠。mysqli_real_escape_string() 函数用于对…

【实战】kafka3.X kraft模式集群搭建

文章目录 前言kafka2.0与3.x对比准备工作JDK安装kafka安装服务器增加hosts 修改Kraft协议配置文件格式化存储目录 启动集群停止集群测试Kafka集群创建topic查看topic列表查看消息详情生产消息消费消息查看消费者组查看消费者组列表 前言 相信很多同学都用过Kafka2.0吧&#xf…

tomcat配置请求的最大参数个数和请求数据大小

maxParameterCount"10000" maxPostSize"10485760" maxParameterCount:单个请求最大请求参数个数; maxPostSize:单个请求最大数据大小,1048576010M;

基本算法——位运算

a^b 原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 题目描述 运行代码 #include<iostream> using namespace std; long long a,b,c,t1; int main() {cin>>a>>b>>c;for(;b;b/2){if(b&1)tt*a%c;aa*a%c;}cout<<t%c; } 代码思路…

逻辑回归及python实现

概述 logistic回归是一种广义线性回归&#xff08;generalized linear model&#xff09;&#xff0c;因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同&#xff0c;都具有 w‘xb&#xff0c;其中w和b是待求参数&#xff0c;其区别在于他们的因变量不同&#x…

App Inventor 2 复制屏幕功能,界面设计更便捷,避免误删组件

“复制屏幕”功能全新上线&#xff0c;中文网独有&#xff08;MIT没有此功能&#xff09;&#xff0c;可以复制屏幕中的普通组件、图片、附件、拓展、代码块。更多升级详情可查看发布日志。 下面演示一下屏幕的复制效果&#xff1a; 1、Screen1屏幕上有若干组件、及一个SQLit…

美业SaaS系统源码分享-收银管理的主要功能

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 活动促销 PC管理后台、手机APP、iPad APP、微信小程序 ▶ 博弈美业-收银管理功能 1、同时支持支付宝和微信支付&#xff0c;具有简单便捷安全等优点&#xff0c;并且符…

MySQL之查询性能优化(八)

查询性能优化 MySQL查询优化器的局限性 MySQL的万能"嵌套循环"并不是对每种查询都是最优的。不过还好&#xff0c;MySQL查询优化器只对少部分查询不适用&#xff0c;而且我们往往可以通过改写查询让MySQL高效地完成工作。还有一个好消息&#xff0c;MySQL5.6版本正…

Ffmpeg安装和简单使用

Ffmpeg安装 下载并解压 进入官网 (https://ffmpeg.org/download.html)&#xff0c;选择 Window 然后再打开的页面中下滑找到 release builds&#xff0c;点击 zip 文件下载 环境变量配置 下载好之后解压&#xff0c;找到 bin 文件夹&#xff0c;里面有3个 .exe 文件 然后复制…

优思学院|六西格玛黑带官方的报考条件是什么?

经常有人私信问我六西格玛黑带证书要如何取得&#xff0c;要学历证明吗&#xff1f;要带项目吗&#xff1f;要注册吗&#xff1f; 首先&#xff0c;直接一点说&#xff0c;和任何学科一样&#xff0c;取得六西格玛证书的方法主要是通过上课学习和考试。然而&#xff0c;关于六…