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

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…

常微分方程 (ODE) 和 随机微分方程 (SDE)

常微分方程(Ordinary Differential Equations, ODE)和随机微分方程(Stochastic Differential Equations, SDE)是数学中描述系统动态行为的重要工具。它们有一些相似之处,但在处理随机性方面存在显著差异。 常微分方程…

Oracle数据库面试题-5

81. 请解释Oracle数据库中的自动空间重新压缩(Automatic Space Recompression)的概念。 Oracle 数据库中的自动空间重新压缩(Automatic Space Recompression) 自动空间重新压缩是 Oracle 数据库中的另一个重要特性,它…

Vue响应式系统分支切换与cleanup - 清除遗留的副作用函数

文章目录 前言分支切换与cleanup分支切换的问题依赖集合的收集cleanup的实现完整的代码展示 前言 本篇文章代码思路来自 Vue3.0 源码, 部分理解来源于霍春阳 《Vue.js设计与实现》这本书的理解, 感兴趣的小伙伴可以自行购买阅读。可以非常明确的感受到作者对 Vue 的深刻理解以及…

每天写java到期末考试(6.6)-java文件输入输出流实验

1、用字节流读写二进制文件 要求:用DataOutputStreamFileOutputStream类将1,2,…,100,这100个数字写入到文件 d:\out1.bin里,然后再用DatalnputStreamFilelnputStream类将d:\out1.bin的内读出来,并输出到屏幕上。 用DataOutputStreamFileOutputStream写入二进制数据时,直接调…

单元测试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() 函数用于对…

SAAS系统架构设计剖析

多租户数据隔离 用户担心数据安全性,也就是要做数据隔离,不允许 A 租户查到 B 租户的数据 1、软隔离 数据在一起,只不过带着租户 id 查询 在底层驱动 jar 上进行封装,强制带上租户 id 比如:MySQL、MQ、Redis&#…

【论文精读】DCRNN-扩散图卷积循环神经网络

DCRNN 模型是南加州大学的 Li 等人发表在 I C L R 2018 ICLR 2018 ICLR2018 会议上一个用于交通预测的时空预测模型,论文题目为: 《DIFFUSION CONVOLUTIONAL RECURRENT NEURAL NETWORK: DATA-DRIVEN TRAFFIC FORECASTING》,文章地址为: https://arxiv.org/abs/1707.01926。 …

vs中运行程序时,报不能运行解决方式

问题 在vs中编译运行程序中,如果程序还在运行,编译会报错,但是在后台又找不到对应的程序 解决方式 1、tasklist | find “进程名” 2、taskkill /PID

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

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

二叉树的镜像--c++【做题记录】

【问题描述】 给定扩展二叉树的前序序列,构建二叉树。 求这课二叉树的镜像,并输出其前序遍历序列。 【输入形式】 输入扩展二叉树的前序序列。 【输出形式】 输出镜像二叉树的前序遍历序列。 【样例输入】 ab##cd##e## 【样例输出】 镜像后二叉树的前序遍…