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

这篇具有很好参考价值的文章主要介绍了天猫精灵家居对接第三方设备(详细版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

文章目录

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

前言

随着物联网的发展,众多的硬件厂商都开发出自己的智能家居产品,智能音箱的问世,又让智能家居行业涌起一段浪潮,今天我带大家使用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")
    @ResponseBody
    public 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上测试

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

教程如上:新人大佬勿喷文章来源地址https://www.toymoban.com/news/detail-455555.html

到了这里,关于天猫精灵家居对接第三方设备(详细版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信第三方平台对接小程序发版

    微信第三方平台是商家把公众号或小程序代交给服务商来管理, 当商家把小程序授权给第三方平台后,同时授权小程序开发与数据分析,小程序后台就无法发版 ,必须开发人员调小程序的api才能实现发版;如不需要调第三方平台接口的方式发布,取消 小程序开发与数据分析

    2024年02月16日
    浏览(61)
  • 海康威视iSC 平台第三方对接门禁权限分享

    一、 场景描述 iSC 平台的门禁产品及功能在项目应用广泛,第三方对接门禁权限功能的需求也越来也 多,由于门禁权限下发需要涉及到往设备上下发,第三方接口调用一旦不正确,不合理的接 口调用很容易给我们平台造成额外的性能消耗,甚至导致我们平台挂掉,特此梳理

    2024年02月02日
    浏览(255)
  • java对接第三方接口的三种方式

    在日常工作中,经常需要跟第三方系统对接,我们做为客户端,调用他们的接口进行业务处理,常用的几种调用方式有: 1.原生的Java.net.HttpURLConnection(jdk); 2.再次封装的HttpClient、CloseableHttpClient(Apache); 3.Spring提供的RestTemplate; 当然还有其他工具类进行封装的接口,比

    2024年04月28日
    浏览(42)
  • 3PL第三方物流如何对接TSC EDI?

    TractorSupply(以下简称为TSC)是一家总部位于美国的零售公司,主要专注于农业、家庭和宠物用品。在美国拥有数百家门店,广泛分布在城市、城镇和农村地区,这使得他们能够满足各种地理位置和社区的需求。为了确保其供应链以及物流运营的高效性,TSC选择与3PL(第三方物

    2024年02月07日
    浏览(27)
  • 自营外卖配送平台的商家如何对接第三方美饿的订单

    自营外卖跑腿平台对接第三方美饿的好处 单说美团饿了么自身的流量优势,很多商家不能忽视,但是美团饿了么的高额配送成本与抽成,同样也不能忽视。很多商家希望选择自配送或者其他更划算的配送方式来节省成本。这时,区域性的自建外卖平台与美团、饿了么实现订单

    2024年02月13日
    浏览(25)
  • PHP聚合支付网站源码/对接十多个支付接口 第三方/第四方支付/系统源码

    PHP聚合支付网站源码/对接十多个支付接口 第三方/第四方支付/系统源码 内附数十个支付接口代码文件。 下载地址:https://bbs.csdn.net/topics/616764485  

    2024年02月11日
    浏览(37)
  • 对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)

    一个web系统,从接口的使用范围也可以分为对内和对外两种,对内的接口主要限于一些我们内部系统的调用,多是通过内网进行调用,往往不用考虑太复杂的鉴权操作。但是,对于对外的接口,我们就不得不重视这个问题,外部接口没有做鉴权的操作就直接发布到互联网,而

    2024年04月29日
    浏览(62)
  • 73. python第三方库安装教程(超详细)

    Python 的库分为2类。 标准库:不需要安装,需要导入。 第三库:需要安装、需要导入。 【导入语法】 import + 库名 【示例】 openpyxl = open + python + xlsx 【简写如下】 openpyxl = open +py + xl open 是打开的意思。 py 指 python 。 xl 是 xlsx/xlsm/xltx/xltm 的缩写。 xlsx/xlsm/xltx/xltm 是电子表格的

    2024年02月09日
    浏览(36)
  • Python第三方库安装详细教程(图文结合)

    在安装Python第三方库要先确保Python环境已经安装,如果没有安装可以参考我的文章。 Pytnon安装教程: https://blog.csdn.net/qq_41515916/article/details/130216678 Pycharm安装及汉化教程: https://blog.csdn.net/qq_41515916/article/details/130283522 Python模块安装主要有两种方法(安装方法很多,只列举了常

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包