天猫精灵家居对接第三方设备(详细版)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档·

文章目录

  • 前言
  • 补充准备阶段(内网映射到外网)
  • 一、天猫精灵官网配置准备
  • 二、天猫精灵部分实现代码
  • 三、天猫精灵配置技能广场
  • 四、天猫精灵语音调试测试
  • 总结

前言

随着物联网的发展,众多的硬件厂商都开发出自己的智能家居产品,智能音箱的问世,又让智能家居行业涌起一段浪潮,今天我带大家使用Java语言对接天猫精灵智能家居提供的Api,下面开始教程,请仔细阅读


准备阶段

将本地服务器发布到外网上 推荐使用工具为:花生壳

1、进入花生壳官网配置映射内网

​​​​​花生壳官网

2、

 

 补充本地服务器路由内网地址为:

下载PC端花生壳应用  

一、天猫精灵官网对接配置

  • 打开官网 天猫精灵开发官网

  •  点击技能开发
  • 点击添加技能配置信息如下

  •  配置完毕后选择产品开发添加新产品

设计信息如下:  

  •  介绍产品开发信息:

 

  • 1、账号的授权:
    • 点击账号授权跳转到厂商的授权页面 
    • 输入厂商中的账号密码登录
    • 登录成功后跳转发AliGennie回调地址并返回code
    • AliGennie通过code获取到access_token、refresh_token
    • AliGennie保存token信息

出现这个页面就说明配置成功了

​​​​​​​二、测试代码如下

  • controller层
@RequestMapping("/toLogin")
public String toLogin() {PageData pd = getPageData();HttpSession session = getRequest().getSession();session.setAttribute("oauth2", new HashMap<String, Object>(pd));return "/html/system/index/login/loginTMHome.html";
}
@Controller
@RequestMapping("device")
public class TianMaoTestContrllor {public static Device myDevice;static {JSONObject status = new JSONObject();status.put("powerstatus",1);myDevice = new Device("eelinker·eelinker","天猫测试","outlet","亿易联","test-socket","南美洲",status,new JSONObject());}@RequestMapping("getDevices")@ResponseBodypublic Map<String, Object> handler(@RequestBody String json) {Map<String, Object> map = new HashMap<>();JSONObject object = JSONObject.parseObject(json);JSONObject header = object.getJSONObject("header");JSONObject payload = object.getJSONObject("payload");if (header != null && payload != null) {String namespace = header.getString("namespace");String name = header.getString("name");//判断请求是否是属于“设备发现”if ("AliGenie.Iot.Device.Discovery".equals(namespace) && "DiscoveryDevices".equals(name)) {//创建一个数组类存储数据JSONArray array = new JSONArray();JSONObject deviceInfo = new JSONObject();deviceInfo.put("deviceId", myDevice.getDeviceId());deviceInfo.put("deviceName", myDevice.getDeviceName());deviceInfo.put("deviceType", myDevice.getDeviceType());deviceInfo.put("brand", myDevice.getBrand());deviceInfo.put("model", myDevice.getModel());deviceInfo.put("zone", myDevice.getZone());deviceInfo.put("status", myDevice.getStatus());deviceInfo.put("extensions", myDevice.getExtensions());array.add(deviceInfo);payload = new JSONObject();//数据存入payload.put("devices", array);//数据name修改header.put("name", "DiscoveryDevicesResponse");}}//数据返回map.put("header", header);map.put("payload", payload);System.out.println(map);return map;}
}
  •   前端页面
<body onload="load()"><div class="background"></div><div class="content"><div class="head">绑定天猫精灵</div><div class="inp"><input id="phone" type="text" placeholder="用户名" maxlength="11"></div><div class="inp"><input id="password" type="password" placeholder="密码"></div><div class="code"><input id="code" type="text" placeholder="验证码"><img id="yzmImg" src="" alt="" onclick="load()"></div><div class="btn"><button onclick="login()">绑定</button></div></div>
</body>
  • 实体类 
    
    @Data
    @AllArgsConstructor
    public class Device {/*** 设备id*/private String deviceId;/*** 设备别名*/private String deviceName;/*** 设备英文名*/private String deviceType;/*** 设备品牌*/private String brand;/*** 产品型号*/private String model;/*** 位置,这里是指厨房,客厅这些*/private String zone;/*** 设备状态*/private JSONObject status;/*** 设备的扩展信息*/private JSONObject extensions;}
    

操作步骤:当在登录页面上输入的信息再做二次请求时可以获取这些信息进行具体的业务

访问路径校验权限/tianmao/home/login
进入权限validation拦截器key:PHONE   value:1231321
key:PASSWORD   value:123456
key:CODE   value:lyj61
=========================================
key:CODE  |  value:lyj61
key:PASSWORD  |  value:123456
key:PHONE  |  value:12312313
=========================================
sessioncode : LYJ61
内部方法:调用=========================================
key:response_type  |  value:code
key:redirect_uri  |  value:https://open.xxx.xxx.com/oauth/callback?skillId=91880&token=MjIxMzc3NDYxODMwNkFGRUhJTkZEVlE=
key:state  |  value:0.7748120350429886
key:client_id  |  value:Test
=========================================

例子:测试获取当前天猫精灵绑定的可用设备

 AliGennie会进入我们配置的网关:tianmao/home/getdevices

1、先判断操作的类型 比如:DiscoveryDevices请求 获取设备信息

访问路径校验权限/tianmao/home/getDevices
{
    "header":{
        "messageId":"40402a38-b764-4f71-a98b-a18661fdb84c",唯一的标识符
        "name":"DiscoveryDevices",程序名称
        "namespace":"AliGenie.Iot.Device.Discovery",命名空间
        "payLoadVersion":2协议版本
    },
    "payload":{
        "accessToken":"3107a0a628055992c0fa976d1fc92c56ebfbb33d"

        绑定码,用来开发商识别用户 会在请求是携带 返回时不需要携带
    }
}

2、然后按照协议返回对应的信息就好了,我这里是模拟一个假的设备数据返回了,封装类如下,可用作参考,主要是看官方文档:

{
    "payload":{
        "devices":[
            {
                "deviceType":"outlet",
                "extensions":{
                    
                },
                "zone":"NULL",
                "model":"WifiPower",
                "deviceId":"1446223",
                "deviceName":"Wifi插座",
                "brand":"亿益联·eelinker",
                "status":{
                    "powerstate":1
                }
            }
        ],
        "accessToken":"3107a0a628055992c2c92c56ebfbb33d"
    },
    "header":{
        "name":"DiscoveryDevicesResponse",
        "namespace":"AliGenie.Iot.Device.Discovery",
        "messageId":"40402a38-b764-4f71-a98b-a18661fdb84c",
        "payLoadVersion":2
    }
}

补充:产品不显示问题:

 

三、天猫精灵app技能广场配置

官方提供了一个供给开发者对接设备的一个接口。用户可以通过天猫精灵app里下载开发者创建的技能,绑定用户在开发者平台拥有的设备。让用户可以使用自己的天猫精灵访问我们的设备。

​ 但是在此之前,我觉得有必要让开发者首先知道,这个应用是怎么使用的。首先假设我们的技能发布上线了,那么我们需要做的是找到我们的技能,并且注册,且能够执行:

  • 1、打开天猫精灵app 并为其绑定一个天猫音箱(必须为开发者淘宝账户相关联)、
  • 2、进入首页面,也就是精灵家这里,然后点击技能广场,如果找不到,可以去”查看更多“按钮里面去寻找。进入技能广场,点击搜索按钮进入搜索界面查找我们发布的技能

四、调试天猫语音功能

下面就可以进行下一步了,设备的开关,点击上图中的在线调试按钮进入设备调试界面。调试界面如下,用户可以点击标准语料里的按钮,调试,在这里查询设备状态是不会发送请求的。但是设备开关和需要发送请求到开发者服务器的。

 设备入参: 2022-08-26 14:32:51.022 traceId = 0b085d4216614955709693511e87d7 ,request params = 打开插座

设备入参: 2022-08-26 14:32:51.963 traceId=0b085d4216614955709693511e87d7, Request to gateway URL : https://wwwxxxx//tianmao/home/getDevices

设备入参: 2022-08-26 14:32:51.965 HTTP Request Headers: Accept : application/json

设备入参: 2022-08-26 14:32:51.966 Request body : {"header":{"messageId":"9a7df45c-9f22-4667-98ee8ce9cb2dd00","name":"thing.attribute.set","namespace":"AliGenie.Iot.Device.Control","payLoadVersion":2},"payload":{"accessToken":"3107a0a628055992c0fa976d1fc92c56ebfbb33d","deviceIds":["1446263543"],"extensions":{"1446263543":{"aiIcon":"https://ai-genie-center.oss-cn-hangzhou.aliyuncs.com/app-data/iot-center/outlet800.png","productKey":"a19E6Wv0WAL"}},"params":{"powerstate":1}}

设备状态设置:

​ 能够查询设备状态了,之后就要进行设备的状态设置。依旧是判断name和namespace这两个参数。之后进行数据的设置及返回。这里的代码如下,判断请求是否属于属性设置,之后遍历发送来的设备列表,按照params的内容进行设置。并返回。res的内容设置,可以参考设备控制响应协议格式,返回数据使用的是deviceResponseList这个key值。

if (header != null && payload != null) {String namespace = header.getString("namespace");String name = header.getString("name");//判断请求是否是属于“设备发现”if ("AliGenie.Iot.Device.Discovery".equals(namespace) && "DiscoveryDevices".equals(name)) {...} else if ("AliGenie.Iot.Device.Control".equals(namespace) && "thing.attribute.set".equals(name)) {JSONArray array = payload.getJSONArray("deviceIds");if (myDevice.getDeviceId().equals(array.get(0))) {//这里的params是有多个参数的,这里只接收开关状态请求,其他请求忽略int set = payload.getJSONObject("params").getInteger("powerstate");myDevice.getStatus().put("powerstate", set);//请求返回JSONObject res = new JSONObject();res.put("deviceId", array.get(0));res.put("errorCode", "SUCCESS");res.put("message", "SUCCESS");JSONArray resArr = new JSONArray();resArr.add(res);payload = new JSONObject();payload.put("deviceResponseList", resArr);}}
}

五、实际配合天猫精灵语音功能测试

  • 保证天猫精灵开机并绑定上开发测试的淘宝账号
  • 1、直接对天猫精灵呼叫命令控制打开插座
  • 2、在天猫精灵app上测试

教程如上:新人大佬勿喷

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

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

相关文章

如何让 ChatGPT 充当细致入微的 Java 代码优化工? | 得物技术

注&#xff1a;本文使用 New Bing&#xff08;GPT4.0&#xff09;演示 让他扮演一个 Java 软件开发者 第一步&#xff1a;我们让 ChatGPT 扮演一个 Java 软件开发者的角色 提示词插件&#xff1a;地址&#xff1a;ChatGPT BingChat GPT3 Prompt Generator App (Streamlit) - a…

低代码是行业毒瘤吗?ChatGPT这样回答

一、低代码现状 从2019年开始低代码领域备受资本市场关注&#xff0c;在争议中不断发展&#xff0c;至今仍存在诸多尚未厘清的概念有待探讨&#xff0c;比如低代码是行业毒瘤吗&#xff1f; 根据对行业近况的搜罗&#xff0c;总结以下现状&#xff1a;当前低代码行业在中国面…

万亿赛道大爆发,are you ready? “2022首届AIGC共创共建论坛”来了!

图片来源&#xff1a;由无界版图 AI 绘画工具生成 12月初的这个周末&#xff0c;ChatGPT在科技圈彻底火了&#xff0c;这是OpenAI新推出的AI聊天机器人&#xff0c;它就像科幻电影的智能助理&#xff0c;不管什么问题&#xff0c;它都能给出最优解。AIGC&#xff0c;人工智能内…

QQ 群聊美少女语音AI(ChatGLM 本地化版本)

QQ 群聊美少女语音AI&#xff08;ChatGLM 本地化版本&#xff09; ✨ 基于 go-cqhttp 以及 VITS-fast-fine-tuning ChatGLM 实现 ✨ Combination of ChatGLM and VITs anime girl AI voice and used in QQ robot 项目地址&#xff1a;https://github.com/Panzer-Jack/ChatGL…

谷歌、OpenAI 都白干,开源才是终极赢家!谷歌内部文件泄露:欲借开源打败 OpenAI...

&#xff09;省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年4月份热门报告合集 无需翻墙&#xff0c;ChatGPT直接使用 万字干货&#xff1a;ChatGPT的工作原理 2023年创业&#xff08;有创业想法&#xff09;必读手…

从零训练一个多模态LLM

本文尝试梳理一个完整的多模态LLM的训练流程。包括模型结构选择、数据预处理、模型预训练、指令微调、对齐、融合多模态以及链接外部系统等环节。 一、准备阶段 1 模型结构 目前主要有三种模型架构&#xff0c;基于Transformer解码器&#xff0c;基于General Language Model…

从零训练一个多模态LLM:预训练+指令微调+对齐+融合多模态+链接外部系统

深度学习自然语言处理 分享知乎&#xff1a;逃脱鱼子酱 进NLP群—>加入NLP交流群 本文尝试梳理一个完整的多模态LLM的训练流程。包括模型结构选择、数据预处理、模型预训练、指令微调、对齐、融合多模态以及链接外部系统等环节。 一、准备阶段 1 模型结构 目前主要有三种模型…

【LLM GPT】李宏毅大型语言模型课程

目录 1 概述1.1 发展历程1.2 预训练监督学习预训练的好处 1.3 增强式学习1.4 对训练数据的记忆1.5 更新参数1.6 AI内容检测1.7 保护隐私1.8 gpt和bert穷人怎么用gpt 2 生成式模型2.1 生成方式2.1.1 各个击破 Autoregressive2.1.2 一次到位 Non-autoregressive2.1.3 两者结合 2.…

GPT-4比人类更懂融资!AI企划书让VC疯狂打call

尚恩 发自 凹非寺量子位 | 公众号 QbitAI 你敢信&#xff0c;一份由AI写的融资企划书&#xff0c;竟然引发VC疯狂追捧&#xff01; 甚至有VC投资人当场承诺&#xff0c;愿意给这份由GPT-4生成的企划书直接投资。 又一个用GPT赚钱的小技能&#xff0c;Get。 对此咱真不得不感叹一…

微信小游戏个人开发者上架:从注册到上线的详细步骤

微信小游戏个人开发者上架&#xff1a;从注册到上线的详细步骤 一&#xff0c;注册小程序账号1.1 微信公众平台1.2 填写信息1.3 绑定管理 二&#xff0c;打包步骤2.1 工具准备2.2 关于Unity版本2.3 打包详解 三&#xff0c;提包步骤3.1 填写用户隐私3.2 完善开发者自查3.3 游戏…

对标GPT核心技术RLHF!港科大开源RAFT「木筏」,适用GPT扩散模型

梦晨 发自 凹非寺 量子位 | QbitAI 开源大模型火爆&#xff0c;已有大小羊驼LLaMA、Vicuna等很多可选。 但这些羊驼们玩起来经常没有ChatGPT效果好&#xff0c;比如总说自己只是一个语言模型、没有感情blabla&#xff0c;拒绝和用户交朋友。 归根结底&#xff0c;是这些模型没…

DDPM详解 AI绘画

话说DDPM DDPM模型&#xff0c;全称Denoising Diffusion Probabilistic Model&#xff0c;可以说是现阶段diffusion模型的开山鼻祖。不同于前辈GAN、VAE和flow等模型&#xff0c;diffusion模型的整体思路是通过一种偏向于优化的方式&#xff0c; 逐步从一个纯噪音的图片中生成图…

对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;对抗生成网络GAN系列——GAN原理及手写数字生成小案例 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞…

用户画像·用户性别预测

文章目录 一、为什么进行性别预测二、特征数据选取三、算法选择四、代码示例1、使用朴素贝叶斯&#xff0c;进行建模2、使用支持向量机3、使用逻辑斯蒂回归 一、为什么进行性别预测 用户注册时&#xff0c;所填写的性别&#xff0c;存在大概率的随意性&#xff1b;不能完全作为…

云开发视频资源变现微信小程序源码

简介&#xff1a; 云开发视频资源变现微信小程序源码&#xff0c;带有流量主功能。获取视频&#xff0c;获取资源需先看广告&#xff0c;资源变现小程序全源码无删减&#xff0c;自己付费做的。 主要功能&#xff0c;就是用户想观看你的视频或者获取你的资源&#xff0c;就需…

拉伯证券|年报行情如火如荼 博弈“超预期”还须警惕“风险点

本周以来&#xff0c;在指数转入高位盘整的背景下&#xff0c;A股商场资金围绕年报头绪展开布局&#xff0c;“年报预增”一跃成为商场最强主线&#xff0c;不少成绩预增公司短期股价收获明显超额收益。 Choice数据显现&#xff0c;截至1月12日盘前&#xff0c;开年以来共136家…

基于上证金融数据的情感分析和走势预测 代码+数据

目录 情感分析结果&#xff1a; ​编辑 首先是获取 股票评论数据的网站&#xff1a; 程序&#xff1a; 数据展示&#xff1a; 情感分析结果&#xff1a; 首先是获取 股票评论数据的网站&#xff1a; 上证指数股吧_上证指数分析讨论社区-东方财富网 程序&#xff1a; im…

FTT暴雷加密熊市雪上加霜?如何对抗系统风险

11月加密领域&#xff0c;正在上演一场新的戏剧&#xff1a;CZ vs SBF。 行情及后续风险预判&#xff0c;这是一场亿万富翁之战。中心化交易所币安和FTX的首席执行官CZ和SBF正在对峙。 FTX事件到11月11日似乎进入了一个新的阶段&#xff0c;在过去的几天里发生的事情几乎可以确…

fastposter v2.9.3 简单易用的海报生成器

&#x1f525;&#x1f525;&#x1f525; fastposter海报生成器是一款快速开发海报的工具。只需上传一张背景图&#xff0c;在对应的位置放上组件&#xff08;文字、图片、二维&#x1f434;、头像&#xff09;即可生成海报。 点击代码直接生成各种语言的调用代码&#xff0c;…

fastposter v2.6.1 发布 程序员专属海报生成器

fastposter v2.6.1 发布 程序员专属海报生成器 fastposter电商级海报生成器&#xff0c;程序员专属海报生成器&#xff0c;一分钟完成海报开发&#xff0c;轻松在线作图。支持Java、Python、PHP、 Go、JavaScript等多种语言。 v2.6.1 发布 程序员专属海报生成器 解决Windows下…