From d451118d4be05f180cfe1f99bc5904f74db8cc3f Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期四, 22 二月 2024 15:40:58 +0800 Subject: [PATCH] 引用线上库 --- HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java | 347 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 328 insertions(+), 19 deletions(-) diff --git a/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java index a35f93a..ffc31ce 100644 --- a/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java +++ b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java @@ -140,7 +140,9 @@ } List<GatewayBean> gatewayBeanList = new ArrayList<>(); for (GatewayBean gatewayBean : this.getGatewayList()) { - if (spkList.contains(gatewayBean.getGatewayType()) && !"MIR01R-LK.10".equals(gatewayBean.getDevice_model())) + if ((spkList.contains(gatewayBean.getGatewayType())) + && !"MIR01R-LK.10".equals(gatewayBean.getDevice_model()) + && !"MSMWP-LK.30".equals(gatewayBean.getDevice_model())) gatewayBeanList.add(gatewayBean); } return gatewayBeanList; @@ -158,8 +160,7 @@ } for (GatewayBean gatewayBean : this.getGatewayList()) { if (macAndSid.equals(gatewayBean.getDevice_mac()) - || macAndSid.equals(gatewayBean.getSid()) - || macAndSid.equals(gatewayBean.getOid())) { + || macAndSid.equals(gatewayBean.getSid())) { return gatewayBean; } } @@ -181,6 +182,24 @@ } } return null; + } + + /** + * 鍒ゆ柇浣忓畢鏄惁鏈変富缃戝叧 + * + * @param homeId + * @return + */ + public boolean hasMainGateway(String homeId) { + boolean hasMain = false; + for (GatewayBean gatewayBean : this.getGatewayList()) { + if (gatewayBean.getMaster().equals("true") + && gatewayBean.getHomeId().equals(homeId) + && gatewayBean.getGatewayType().equals("AGATEWAY")) { + hasMain = true; + } + } + return hasMain; } /** @@ -220,6 +239,56 @@ } /** + * 鏍规嵁浣忓畢id鑾峰彇缃戝叧 + * + * @param homeId 杩囨护鐨勪綇瀹卛d + * @param needEmptyHomeIdGateway 缃戝叧鐨勪綇瀹卛d涓虹┖鏃讹紝鏄惁鍙互鍔犲叆缃戝叧鍒楄〃 + * @param callBack 鍥炶皟鏂规硶 + */ + public void refreshWifiMillimeterZT(boolean needEmptyHomeIdGateway, GatewayCallBack callBack) { + refreshGatewayBySpk(this.getWifiMillimeterZTTypeList(), needEmptyHomeIdGateway, callBack); + } + + /** + * 鑾峰彇缃戠粶璁惧锛屽寘鎷綉鍏冲強姣背娉㈢瓑缃戠粶璁惧 + * + * @param spk 缃戠粶璁惧spk + * @param needEmptyHomeIdGateway 鏄惁闇�瑕佺┖浣忓畢Id璁惧 + * @param callBack 鍥炶皟 + */ + public void refreshGatewayBySpk(List<String> spk, boolean needEmptyHomeIdGateway, GatewayCallBack callBack) { + String topicReply = TopicConstant.GATEWAY_SEARCH_REPLY; + final List<GatewayBean> tempGatewayBeanList = new ArrayList<>(); + EventListener eventListener = getSearchGatewayEvent(spk, needEmptyHomeIdGateway, tempGatewayBeanList); + EventDispatcher.getInstance().register(topicReply, eventListener); + + ThreadToolUtils.getInstance().newFixedThreadPool(1).execute(new Runnable() { + @Override + public void run() { + int count = 5; + while (0 < count--) { + try { + //鎼滅储缃戝叧 + serchGatewayOneTime(); + Thread.sleep(300L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + //瓒呭嚭娆℃暟鍚庣Щ闄ょ洃鍚簨浠� + EventDispatcher.getInstance().remove(topicReply, eventListener); + if (callBack != null) { + if (tempGatewayBeanList.size() == 0) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_GATEWAY_FAILURE_ERROR)); + } else { + callBack.onSuccess(tempGatewayBeanList); + } + } + } + }); + } + + /** * 鑾峰彇缃戠粶璁惧锛屽寘鎷綉鍏冲強姣背娉㈢瓑缃戠粶璁惧 * * @param homeId 浣忓畢Id @@ -236,7 +305,7 @@ ThreadToolUtils.getInstance().newFixedThreadPool(1).execute(new Runnable() { @Override public void run() { - int count = 10; + int count = 5; while (0 < count--) { try { //鎼滅储缃戝叧 @@ -264,11 +333,15 @@ * * @param callBack 鍥炶皟 */ + public void refreshGateway(GatewayCallBack callBack) { + refreshGateway(callBack,this.getGatewayTypeList()); + } + + public void refreshGateway(GatewayCallBack callBack, List<String> spks) { String topicReply = TopicConstant.GATEWAY_SEARCH_REPLY; final List<GatewayBean> tempGatewayBeanList = new ArrayList<>(); EventListener eventListener = getSearchGatewayEvent(spks, tempGatewayBeanList); -// EventListener eventListener = getSearchGatewayEvent(this.getGatewayTypeList(), tempGatewayBeanList); EventDispatcher.getInstance().register(topicReply, eventListener); ThreadToolUtils.getInstance().newFixedThreadPool(1).execute(new Runnable() { @Override @@ -345,6 +418,42 @@ /** * 鑾峰彇鎼滅储缃戝叧浜嬩欢 * + * @return + */ + private EventListener getSearchGatewayEvent(List<String> spk, boolean needEmptyHomeIdGateway, final List<GatewayBean> tempGatewayBeanList) { + //娉ㄥ唽鎼滅储缃戝叧鐩戝惉 + return new EventListener() { + @Override + public void onMessage(Object msg) { + if (!(msg instanceof LinkResponse)) { + return; + } + GatewayBean gateway = getGatewayBeanByResponse((LinkResponse) msg); + if (gateway == null) { + return; + } + gateway.setOnline(true); + gateway.setIsLocalGateWay(true);//鏈湴鎼滅储鍒扮殑缃戝叧鏍囪瘑涓烘湰鍦扮綉鍏� + if ("av.zk.aiks".equals(gateway.getGatewayType())) { + /** 灏嗕富缃戝叧鐨刪omeid璁剧疆鍒板焹鍏嬫柉涓绘満 + */ +// gateway.setHomeId(homeId); + } + //鍙姞杞戒綇瀹呬竴鏍风殑鎴栬�呯綉鍏宠繕娌℃湁閰嶇疆杩囩殑锛屾垨鑰呬笉闇�瑕佷綇瀹卛d涓虹┖鐨勭綉鍏� + //鏇存柊缂撳瓨缃戝叧锛屼細璁板綍鎵�鏈夋敹鍒扮殑缃戝叧锛屼互涓轰簡淇濆瓨缃戝叧鐨処P淇℃伅 + updateGatewayList(gatewayBeanList, gateway); + //闈炴悳绱㈢殑缃戝叧绫讳技杩斿洖 + if (spk.contains(gateway.getGatewayType())) { + //鏇存柊褰撳墠璇诲彇缃戝叧鐨勫垪琛紝杩欎釜鍒楄〃姣忔閮芥槸娓呯┖鍐嶈鍙� + updateGatewayList(tempGatewayBeanList, gateway); + } + } + }; + } + + /** + * 鑾峰彇鎼滅储缃戝叧浜嬩欢 + * * @param homeId * @return */ @@ -362,11 +471,16 @@ } gateway.setOnline(true); gateway.setIsLocalGateWay(true);//鏈湴鎼滅储鍒扮殑缃戝叧鏍囪瘑涓烘湰鍦扮綉鍏� + if ("av.zk.aiks".equals(gateway.getGatewayType())) { + /** 灏嗕富缃戝叧鐨刪omeid璁剧疆鍒板焹鍏嬫柉涓绘満 + */ +// gateway.setHomeId(homeId); + } //鍙姞杞戒綇瀹呬竴鏍风殑鎴栬�呯綉鍏宠繕娌℃湁閰嶇疆杩囩殑锛屾垨鑰呬笉闇�瑕佷綇瀹卛d涓虹┖鐨勭綉鍏� if (homeId.equals(gateway.getHomeId()) || (needEmptyHomeIdGateway == true && TextUtils.isEmpty(gateway.getHomeId()))) { //鏇存柊缂撳瓨缃戝叧锛屼細璁板綍鎵�鏈夋敹鍒扮殑缃戝叧锛屼互涓轰簡淇濆瓨缃戝叧鐨処P淇℃伅 updateGatewayList(gatewayBeanList, gateway); - //闈炴悳绱㈢殑缃戝叧绫诲瀷杩斿洖 + //闈炴悳绱㈢殑缃戝叧绫讳技杩斿洖 if (spk.contains(gateway.getGatewayType())) { //鏇存柊褰撳墠璇诲彇缃戝叧鐨勫垪琛紝杩欎釜鍒楄〃姣忔閮芥槸娓呯┖鍐嶈鍙� updateGatewayList(tempGatewayBeanList, gateway); @@ -409,10 +523,10 @@ /** * 鏇存柊鏀跺埌鐨勭綉鍏冲埌鍒楄〃 * - * @param gatewayBeanList - * @param gateway 褰撳墠鏀跺埌鐨勭綉鍏� + * @param gatewayBeans + * @param gateway 褰撳墠鏀跺埌鐨勭綉鍏� */ - void updateGatewayList(final List<GatewayBean> gatewayBeanList, GatewayBean gateway) { + synchronized void updateGatewayList(final List<GatewayBean> gatewayBeans, GatewayBean gateway) { if (TextUtils.isEmpty(gateway.getOid()) || TextUtils.isEmpty(gateway.getDevice_mac())) { LogUtils.e("缃戝叧Mac鎴栬�匫id涓虹┖锛屾棤鏁堢綉鍏�"); @@ -421,26 +535,36 @@ boolean isFound = false;//鏄惁鍦ㄥ唴瀛樹腑鎵惧埌缃戝叧瀵硅薄 //鎵惧嚭mac涓�鏍风殑缃戝叧鏇存柊鏈�鏂版暟鎹� - for (int i = 0; i < gatewayBeanList.size(); i++) { - if (gatewayBeanList.get(i).getDevice_mac().equals(gateway.getDevice_mac())) { + for (int i = 0; i < gatewayBeans.size(); i++) { + GatewayBean tempGatewayBean = gatewayBeans.get(i); + if (tempGatewayBean.getDevice_mac().equals(gateway.getDevice_mac())) { + /** + * 濡傛灉宸茬粡鏈塽id 闇�瑕佽缃� + */ + if(null!=tempGatewayBean.getUids()&&tempGatewayBean.getUids().size()>0){ + gateway.setUids(tempGatewayBean.getUids()); + } isFound = true; - gatewayBeanList.set(i, gateway); + gatewayBeans.set(i, gateway); + gateway.setAesKey(tempGatewayBean.getAesKey());//淇濈暀浜戠鑾峰彇鐨刟eskey + // break; } } //娓呴櫎oid涓�鏍凤紝mac涓嶄竴鏍风殑缃戝叧缂撳瓨銆備竴鑸槸鍦ㄧ綉鍏虫浛鎹㈢殑鎯呭喌绌洪棿鍑虹幇 - for (int i = 0; i < gatewayBeanList.size(); i++) { - if (gatewayBeanList.get(i).getDevice_mac().equals(gateway.getDevice_mac()) && !gatewayBeanList.get(i).getOid().equals(gateway.getOid())) { - gatewayBeanList.remove(i--); + for (int i = 0; i < gatewayBeans.size(); i++) { + if (gatewayBeans.get(i).getDevice_mac().equals(gateway.getDevice_mac()) && !gatewayBeans.get(i).getOid().equals(gateway.getOid())) { + gatewayBeans.remove(i--); } } //娌℃湁鎵惧埌灏辨坊鍔� if (!isFound) { - gatewayBeanList.add(gateway); + gatewayBeans.add(gateway); } } + /** * 鑾峰彇缃戝叧瀵硅薄 @@ -499,6 +623,44 @@ /* * 缁戝畾缃戝叧 + * */ + public void SetGatewayRemoteInfo(String homeId, String master, String mac, String regionUrl, String ip, boolean isEncrypt, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE, mac); + + JsonObject jObject = new JsonObject(); + if (master.equals("true")) { + jObject.addProperty("server_addr", regionUrl); + jObject.addProperty("remote", "true"); + } else { + jObject.addProperty("server_addr", ""); + jObject.addProperty("remote", "false"); + } + jObject.addProperty("homeId", homeId); + JsonObject sendJsonObj = new JsonObject(); + sendJsonObj.add("objects", jObject); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + String sendStr = sendJsonObj.toString(); + + LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + callBack.onSuccess("1"); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + + /* + * 缁戝畾缃戝叧 * 缂栬緫homeId缁欑綉鍏� * */ public void bindGateway(String master, String mac, String homeId, String regionUrl, String ip, boolean isEncrypt, HDLLinkCallBack callBack) { @@ -527,6 +689,65 @@ public void onSucceed(Object msg) { if (callBack == null) return; callBack.onSuccess("1"); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + + /* + * 缁戝畾姣背娉� + * 缂栬緫homeId缁欐绫虫尝 + * */ + public void bindMillimeterGateway(String homeId, String regionUrl, String ip, String mac, String master, boolean isEncrypt, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_EDIT_LOCAL, mac); + + JsonObject jObject = new JsonObject(); + jObject.addProperty("master", master); + + JsonObject sendJsonObj = new JsonObject(); + sendJsonObj.add("objects", jObject); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + String sendStr = sendJsonObj.toString(); + + LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if ("true".equals(master)) { + String longStr1 = SPUtils.getString("longitude"); + String latStr1 = SPUtils.getString("latitude"); + if (!TextUtils.isEmpty(longStr1) && !TextUtils.isEmpty(latStr1)) { + HDLLinkLocalSdk.getInstance().gatewayLocation(mac, longStr1, latStr1, isEncrypt, new HDLLinkTCallBack<String>() { + @Override + public void onSuccess(String data) { + } + + @Override + public void onError(HDLLinkException e) { + } + }); + } + } + if (callBack == null) return; + callBack.onSuccess("1"); + SetGatewayRemoteInfo(homeId, master, mac, regionUrl, ip, isEncrypt, new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + + } + + @Override + public void onError(HDLLinkException e) { + + } + }); } @Override @@ -686,6 +907,38 @@ }, true).send(); } + /** + * 璁剧疆缃戝叧鍏ョ綉浠庢満妯″紡 缃戝叧338鍙互浣跨敤 + */ + public void AuthGatewayNewVersion(String ip, String mac, String slaveMac, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_AUTH, mac); + + JsonObject sendJsonObj = new JsonObject(); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + JsonObject jObject = new JsonObject(); + jObject.addProperty("spk", "LINKDEVICE"); + jObject.addProperty("mac", slaveMac); + jObject.addProperty("time", "120"); + sendJsonObj.add("objects", jObject); + + + String sendStr = sendJsonObj.toString(); + LinkRequest message = new LinkRequest(topic, sendStr, false); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + callBack.onSuccess(""); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + /* * 鑾峰彇缃戝叧淇℃伅 * */ @@ -718,6 +971,51 @@ /** * 鍙戦�佹暟鎹埌Link缃戝叧 * + * @param ip 缃戝叧IP + * @param mac 缃戝叧mac + * @param isEncrypt 鏄惁鍔犲瘑 + * @param topic 璇锋眰涓婚 + * @param jObject 璐熻浇鏁版嵁<娌℃湁濉玭ull></> + * @param sendPath 鍙戦�佽矾寰�<绫诲悕+鏂规硶鍚�>class->methodName</> + */ + public void sendDataToLinkGateway(String ip, String mac, boolean isEncrypt, + String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { + String topicSend = topic.replace("%s", mac); + //缁勮闇�瑕佸彂閫佺殑鏁版嵁 + String sendStr = createSendData(jObject); +// LogUtils.i("sendDataToLinkGateway->" + sendPath + "->鏈湴鍙戦�乗r\n" + topicSend + "\r\n" + sendStr); + LinkRequest message = new LinkRequest(topicSend, sendStr, isEncrypt); + GatewayBean gatewayBean = this.getLocalGateway(mac); + if (gatewayBean != null) { + message.setCloudTopic(topic.replace("%s", gatewayBean.getGatewayId())); + } + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + try { + JSONObject jsonObject = new JSONObject(new Gson().toJson(msg)); + if (jsonObject.has("data")) { + callBack.onSuccess(jsonObject.getString("data")); + } + } catch (Exception e) { + callBack.onSuccess(e.getMessage()); + } +// LogUtils.i("sendDataToLinkGateway->"+sendPath+"->鏈湴鎺ユ敹鏁版嵁\r\n"+msg.toString()); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); +// LogUtils.i("sendDataToLinkGateway->" + sendPath + "->鏈湴鎺ユ敹鏁版嵁->澶辫触(-200)"); + } + }, true, mac).send(); + } + + /** + * 鍙戦�佹暟鎹埌Link缃戝叧 + * * @param mac 缃戝叧mac * @param isEncrypt 鏄惁鍔犲瘑 * @param topic 璇锋眰涓婚 @@ -728,10 +1026,10 @@ String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { GatewayBean gatewayBean = this.getLocalGateway(mac); if (gatewayBean == null) { - callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GATEWAY_FOUND_LOCALLY)); + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GATEWAY_NOT_EXIST)); return; } - String topicSend = topic.replace("%s", gatewayBean.getOid()); + String topicSend = topic.replace("%s", mac); //缁勮闇�瑕佸彂閫佺殑鏁版嵁 String sendStr = createSendData(jObject); // LogUtils.i("sendDataToLinkGateway->" + sendPath + "->鏈湴鍙戦�乗r\n" + topicSend + "\r\n" + sendStr); @@ -761,6 +1059,7 @@ }, true, mac).send(); } + /** * 鍙戦�佹暟鎹埌Link缃戝叧 * @@ -773,7 +1072,7 @@ String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { GatewayBean gatewayBean = this.getLocalGateway(mac); if (gatewayBean == null) { - callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GATEWAY_FOUND_LOCALLY)); + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GATEWAY_NOT_EXIST)); return; } String topicSend = topic.replace("%s", gatewayBean.getOid()); @@ -797,6 +1096,7 @@ // LogUtils.i("sendDataToLinkGateway->"+sendPath+"->鏈湴鎺ユ敹鏁版嵁\r\n"+msg.toString()); } + @Override public void onFailure(HDLLinkCode hdlLinkCode) { if (callBack == null) return; @@ -805,6 +1105,7 @@ } }, true, mac).send(); } + /** * 缁勮闇�瑕佸彂閫佺殑鏁版嵁 @@ -840,8 +1141,16 @@ private List<String> getGatewayTypeList() { List<String> typeList = new ArrayList<>(); typeList.add("AGATEWAY");//缃戝叧 + typeList.add("av.zk.aiks");//鍩冨厠鏂奖闊充富鏈� typeList.add("sensor.mmv_sleep");//姣背娉pk typeList.add("sensor.mmv_pose");//姣背娉pk + typeList.add("sensor.hdl_mmw_pose");//Wi-Fi姣背娉T鐗堟湰spk + return typeList; + } + + private List<String> getWifiMillimeterZTTypeList() { + List<String> typeList = new ArrayList<>(); + typeList.add("sensor.hdl_mmw_pose");//Wi-Fi姣背娉T鐗堟湰spk return typeList; } } -- Gitblit v1.8.0