<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          天貓精靈家居對(duì)接第三方設(shè)備(詳細(xì)版) 您所在的位置:網(wǎng)站首頁(yè) 兄弟宮化科入十二宮 天貓精靈家居對(duì)接第三方設(shè)備(詳細(xì)版)

          天貓精靈家居對(duì)接第三方設(shè)備(詳細(xì)版)

          2024-12-13 19:21| 來(lái)源: 網(wǎng)絡(luò)整理| 查看: 265

          提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔·

          文章目錄 前言補(bǔ)充準(zhǔn)備階段(內(nèi)網(wǎng)映射到外網(wǎng))一、天貓精靈官網(wǎng)配置準(zhǔn)備二、天貓精靈部分實(shí)現(xiàn)代碼三、天貓精靈配置技能廣場(chǎng)四、天貓精靈語(yǔ)音調(diào)試測(cè)試總結(jié) 前言

          隨著物聯(lián)網(wǎng)的發(fā)展,眾多的硬件廠商都開(kāi)發(fā)出自己的智能家居產(chǎn)品,智能音箱的問(wèn)世,又讓智能家居行業(yè)涌起一段浪潮,今天我?guī)Т蠹沂褂肑ava語(yǔ)言對(duì)接天貓精靈智能家居提供的Api,下面開(kāi)始教程,請(qǐng)仔細(xì)閱讀

          準(zhǔn)備階段

          將本地服務(wù)器發(fā)布到外網(wǎng)上 推薦使用工具為:花生殼

          1、進(jìn)入花生殼官網(wǎng)配置映射內(nèi)網(wǎng)

          ?????花生殼官網(wǎng)

          2、

          ?

          ?補(bǔ)充本地服務(wù)器路由內(nèi)網(wǎng)地址為:

          下載PC端花生殼應(yīng)用??

          一、天貓精靈官網(wǎng)對(duì)接配置 打開(kāi)官網(wǎng)?天貓精靈開(kāi)發(fā)官網(wǎng)

          ?點(diǎn)擊技能開(kāi)發(fā)點(diǎn)擊添加技能配置信息如下

          ?配置完畢后選擇產(chǎn)品開(kāi)發(fā)添加新產(chǎn)品

          設(shè)計(jì)信息如下:??

          ?介紹產(chǎn)品開(kāi)發(fā)信息:

          ?

          1、賬號(hào)的授權(quán): 點(diǎn)擊賬號(hào)授權(quán)跳轉(zhuǎn)到廠商的授權(quán)頁(yè)面?輸入廠商中的賬號(hào)密碼登錄登錄成功后跳轉(zhuǎn)發(fā)AliGennie回調(diào)地址并返回codeAliGennie通過(guò)code獲取到access_token、refresh_tokenAliGennie保存token信息

          出現(xiàn)這個(gè)頁(yè)面就說(shuō)明配置成功了

          ???????二、測(cè)試代碼如下 controller層 @RequestMapping("/toLogin") public String toLogin() { PageData pd = getPageData(); HttpSession session = getRequest().getSession(); session.setAttribute("oauth2", new HashMap(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","天貓測(cè)試","outlet","億易聯(lián)","test-socket","南美洲", status,new JSONObject()); } @RequestMapping("getDevices") @ResponseBody public Map handler(@RequestBody String json) { Map 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"); //判斷請(qǐng)求是否是屬于“設(shè)備發(fā)現(xiàn)” if ("AliGenie.Iot.Device.Discovery".equals(namespace) && "DiscoveryDevices".equals(name)) { //創(chuàng)建一個(gè)數(shù)組類存儲(chǔ)數(shù)據(jù) 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(); //數(shù)據(jù)存入 payload.put("devices", array); //數(shù)據(jù)name修改 header.put("name", "DiscoveryDevicesResponse"); } } //數(shù)據(jù)返回 map.put("header", header); map.put("payload", payload); System.out.println(map); return map; } } ? 前端頁(yè)面 綁定天貓精靈 綁定 實(shí)體類? @Data @AllArgsConstructor public class Device { /** * 設(shè)備id */ private String deviceId; /** * 設(shè)備別名 */ private String deviceName; /** * 設(shè)備英文名 */ private String deviceType; /** * 設(shè)備品牌 */ private String brand; /** * 產(chǎn)品型號(hào) */ private String model; /** * 位置,這里是指廚房,客廳這些 */ private String zone; /** * 設(shè)備狀態(tài) */ private JSONObject status; /** * 設(shè)備的擴(kuò)展信息 */ private JSONObject extensions; }

          作步驟:當(dāng)在登錄頁(yè)面上輸入的信息再做二次請(qǐng)求時(shí)可以獲取這些信息進(jìn)行具體的業(yè)務(wù)

          訪問(wèn)路徑校驗(yàn)權(quán)限/tianmao/home/login 進(jìn)入權(quán)限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 內(nèi)部方法:調(diào)用========================================= 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 =========================================

          例子:測(cè)試獲取當(dāng)前天貓精靈綁定的可用設(shè)備

          ?AliGennie會(huì)進(jìn)入我們配置的網(wǎng)關(guān):tianmao/home/getdevices

          1、先判斷作的類型 比如:DiscoveryDevices請(qǐng)求 獲取設(shè)備信息

          訪問(wèn)路徑校驗(yàn)權(quán)限/tianmao/home/getDevices { ?? ?"header":{ ?? ??? ?"messageId":"40402a38-b764-4f71-a98b-a18661fdb84c",唯一的標(biāo)識(shí)符 ?? ??? ?"name":"DiscoveryDevices",程序名稱 ?? ??? ?"namespace":"AliGenie.Iot.Device.Discovery",命名空間 ?? ??? ?"payLoadVersion":2協(xié)議版本 ?? ?}, ?? ?"payload":{ ?? ??? ?"accessToken":"3107a0a628055992c0fa976d1fc92c56ebfbb33d"

          ? ? ? ? 綁定碼,用來(lái)開(kāi)發(fā)商識(shí)別用戶 會(huì)在請(qǐng)求是攜帶 返回時(shí)不需要攜帶 ?? ?} }

          2、然后按照協(xié)議返回對(duì)應(yīng)的信息就好了,我這里是模擬一個(gè)假的設(shè)備數(shù)據(jù)返回了,封裝類如下,可用作參考,主要是看官方文檔:

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

          補(bǔ)充:產(chǎn)品不顯示問(wèn)題:

          ?

          三、天貓精靈app技能廣場(chǎng)配置

          官方提供了一個(gè)供給開(kāi)發(fā)者對(duì)接設(shè)備的一個(gè)接口。用戶可以通過(guò)天貓精靈app里下載開(kāi)發(fā)者創(chuàng)建的技能,綁定用戶在開(kāi)發(fā)者平臺(tái)擁有的設(shè)備。讓用戶可以使用自己的天貓精靈訪問(wèn)我們的設(shè)備。

          ? 但是在此之前,我覺(jué)得有必要讓開(kāi)發(fā)者首先知道,這個(gè)應(yīng)用是怎么使用的。首先假設(shè)我們的技能發(fā)布上線了,那么我們需要做的是找到我們的技能,并且注冊(cè),且能夠執(zhí)行:

          1、打開(kāi)天貓精靈app 并為其綁定一個(gè)天貓音箱(必須為開(kāi)發(fā)者淘寶賬戶相關(guān)聯(lián))、2、進(jìn)入首頁(yè)面,也就是精靈家這里,然后點(diǎn)擊技能廣場(chǎng),如果找不到,可以去”查看更多“按鈕里面去尋找。進(jìn)入技能廣場(chǎng),點(diǎn)擊搜索按鈕進(jìn)入搜索界面查找我們發(fā)布的技能

          四、調(diào)試天貓語(yǔ)音功能

          下面就可以進(jìn)行下一步了,設(shè)備的開(kāi)關(guān),點(diǎn)擊上圖中的在線調(diào)試按鈕進(jìn)入設(shè)備調(diào)試界面。調(diào)試界面如下,用戶可以點(diǎn)擊標(biāo)準(zhǔn)語(yǔ)料里的按鈕,調(diào)試,在這里查詢?cè)O(shè)備狀態(tài)是不會(huì)發(fā)送請(qǐng)求的。但是設(shè)備開(kāi)關(guān)和需要發(fā)送請(qǐng)求到開(kāi)發(fā)者服務(wù)器的。

          ?設(shè)備入?yún)ⅲ?2022-08-26 14:32:51.022 traceId = 0b085d4216614955709693511e87d7 ,request params = 打開(kāi)插座

          設(shè)備入?yún)ⅲ?2022-08-26 14:32:51.963 traceId=0b085d4216614955709693511e87d7, Request to gateway URL : https://wwwxxxx//tianmao/home/getDevices

          設(shè)備入?yún)ⅲ?2022-08-26 14:32:51.965 HTTP Request Headers: Accept : application/json

          設(shè)備入?yún)ⅲ?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}}

          設(shè)備狀態(tài)設(shè)置:

          ? 能夠查詢?cè)O(shè)備狀態(tài)了,之后就要進(jìn)行設(shè)備的狀態(tài)設(shè)置。依舊是判斷name和namespace這兩個(gè)參數(shù)。之后進(jìn)行數(shù)據(jù)的設(shè)置及返回。這里的代碼如下,判斷請(qǐng)求是否屬于屬性設(shè)置,之后遍歷發(fā)送來(lái)的設(shè)備列表,按照params的內(nèi)容進(jìn)行設(shè)置。并返回。res的內(nèi)容設(shè)置,可以參考設(shè)備控制響應(yīng)協(xié)議格式,返回?cái)?shù)據(jù)使用的是deviceResponseList這個(gè)key值。

          if (header != null && payload != null) { ? ? String namespace = header.getString("namespace"); ? ? String name = header.getString("name"); ? ? //判斷請(qǐng)求是否是屬于“設(shè)備發(fā)現(xiàn)” ? ? 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是有多個(gè)參數(shù)的,這里只接收開(kāi)關(guān)狀態(tài)請(qǐng)求,其他請(qǐng)求忽略 ? ? ? ? ? ? int set = payload.getJSONObject("params").getInteger("powerstate"); ? ? ? ? ? ? myDevice.getStatus().put("powerstate", set); ? ? ? ? ? ? //請(qǐng)求返回 ? ? ? ? ? ? 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); ? ? ? ? } ? ? } } 五、實(shí)際配合天貓精靈語(yǔ)音功能測(cè)試 保證天貓精靈開(kāi)機(jī)并綁定上開(kāi)發(fā)測(cè)試的淘寶賬號(hào)1、直接對(duì)天貓精靈呼叫命令控制打開(kāi)插座2、在天貓精靈app上測(cè)試

          教程如上:新人大佬勿噴



          【本文地址】

          公司簡(jiǎn)介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 若羌县| 乌海市| 宣恩县| 泰宁县| 乌拉特后旗| 建水县| 屯门区| 穆棱市| 雷州市| 黄冈市| 株洲市| 枝江市| 西华县| 金寨县| 瓦房店市| 海城市| 通辽市| 湘潭县| 黔西| 石台县| 潼南县| 浦东新区| 元江| 鹤岗市| 昌都县| 遂昌县| 措勤县| 永登县| 达拉特旗| 广昌县| 博白县| 礼泉县| 江安县| 墨竹工卡县| 仪征市| 云和县| 吴桥县| 岳普湖县| 和顺县| 西乌珠穆沁旗| 华安县| http://444 http://444 http://444 http://444 http://444 http://444