| | |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.JsonObject; |
| | | import com.google.gson.reflect.TypeToken; |
| | | import com.hdl.sdk.common.event.EventDispatcher; |
| | | import com.hdl.sdk.common.event.EventListener; |
| | | import com.hdl.sdk.connect.bean.AuthenticateResponseBean; |
| | | import com.hdl.sdk.connect.config.HDLLinkConfig; |
| | | import com.hdl.sdk.common.config.TopicConstant; |
| | | import com.hdl.sdk.common.utils.IdUtils; |
| | |
| | | |
| | | void onError(String error); |
| | | |
| | | void onSuccess(String data); |
| | | void onSuccess(String msg); |
| | | |
| | | } |
| | | |
| | |
| | | return updBoot; |
| | | } |
| | | |
| | | private String getOid() { |
| | | return "000101EA9B8C1C22"; |
| | | } |
| | | /** |
| | | * 开始入网及认证请求 |
| | | * |
| | | * @param request 认证请求信息 |
| | | * @param callBack 结果回调 |
| | | */ |
| | | public void startAuthenticateRequest(AuthenticateRequest request, CallBack callBack) { |
| | | //1.启动Socket 开启监听 |
| | | getUdpBoot(IpUtils.getBroadcastAddress()); |
| | | //监听网关广播的入网指令 |
| | | EventDispatcher.getInstance().register(TopicConstant.GATEWAY_AUTH_BROADCAST, new EventListener() { |
| | | @Override |
| | | public void onMessage(Object msg) { |
| | | |
| | | private String getSid() { |
| | | return "000101EA9B8C1C2202010001021A"; |
| | | //移除监听 |
| | | // EventDispatcher.getInstance().remove(this); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() { |
| | | @Override |
| | | public void onSucceed(Object msg) { |
| | | callBack.onSuccess(msg.toString()); |
| | | if(callBack == null) return; |
| | | AuthenticateResponseBean bean = getAuthenticateResponseBean(msg); |
| | | if(bean != null){ |
| | | String localSecret = bean.getAuth().getLocalSecret(); |
| | | String gatewayId = bean.getObjects().getGatewayID(); |
| | | String ipAddress = bean.getObjects().getIPAddress(); |
| | | HDLLinkConfig.getInstance().saveConfig(localSecret,gatewayId,ipAddress); |
| | | callBack.onSuccess("Success"); |
| | | }else{ |
| | | callBack.onSuccess("参数异常"); |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure() { |
| | | Log.i("TAG", "onFailure: "); |
| | | if(callBack == null) return; |
| | | callBack.onError("超时"); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 发送入网及认证请求 |
| | | * |
| | | * @param callBack 结果回调 |
| | | */ |
| | | public void sendAuthenticateRequest(CallBack callBack) { |
| | | String macStr = "AA000000000000BB"; |
| | | String secret = "87ae414b7a853f65"; |
| | | String mac_key = stringToMD5(stringToMD5(macStr + secret)); |
| | | |
| | | String versionString = "HDL_V1.0.1"; |
| | | String time = String.valueOf(System.currentTimeMillis()); |
| | | |
| | | //1.设置认证信息 |
| | | AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); |
| | | requestBean.setMAC(macStr); |
| | | requestBean.setSupplier("HDL"); |
| | | requestBean.setFirmwareVersion(versionString); |
| | | requestBean.setHardwareModel("1956F"); |
| | | AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); |
| | | authbean.setSpk("ir.module"); |
| | | authbean.setMACKey(mac_key); |
| | | authbean.setRequest(requestBean); |
| | | |
| | | |
| | | //2.设置设备信息 |
| | | AuthenticateDeviceInfoBean infoBean = new AuthenticateDeviceInfoBean(); |
| | | infoBean.setDeviceMAC(macStr); |
| | | infoBean.setIPMAC(macStr); |
| | | infoBean.setDeviceName("HDL面板"); |
| | | infoBean.setAccessMode("HDL"); |
| | | infoBean.setOID(getOid()); |
| | | infoBean.setSid(getSid()); |
| | | // infoBean.set |
| | | AuthenticateRequest.VersionBean[] versionBeans = new AuthenticateRequest.VersionBean[]{new AuthenticateRequest.VersionBean("FW", versionString), new AuthenticateRequest.VersionBean("HW", "1956F")}; |
| | | infoBean.setVersions(versionBeans); |
| | | AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, infoBean, authbean); |
| | | |
| | | String ip = IpUtils.getBroadcastAddress(); |
| | | ip = "192.168.10.102"; |
| | | sendAuthenticateRequest(ip, request, callBack); |
| | | } |
| | | // /** |
| | | // * 发送入网及认证请求 |
| | | // * |
| | | // * @param callBack 结果回调 |
| | | // */ |
| | | // public void sendAuthenticateRequest(CallBack callBack) { |
| | | // String macStr = "AA000000000000BB"; |
| | | // String secret = "87ae414b7a853f65"; |
| | | // String mac_key = stringToMD5(stringToMD5(macStr + secret)); |
| | | // |
| | | // String versionString = "HDL_V1.0.1"; |
| | | // String time = String.valueOf(System.currentTimeMillis()); |
| | | // |
| | | // //1.设置认证信息 |
| | | // AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); |
| | | // requestBean.setMAC(macStr); |
| | | // requestBean.setSupplier("HDL"); |
| | | // requestBean.setFirmwareVersion(versionString); |
| | | // requestBean.setHardwareModel("1956F"); |
| | | // AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); |
| | | // authbean.setSpk("ir.module"); |
| | | // authbean.setMACKey(mac_key); |
| | | // authbean.setRequest(requestBean); |
| | | // |
| | | // |
| | | // //2.设置设备信息 |
| | | // AuthenticateDeviceInfoBean infoBean = new AuthenticateDeviceInfoBean(); |
| | | // infoBean.setDeviceMAC(macStr); |
| | | // infoBean.setIPMAC(macStr); |
| | | // infoBean.setDeviceName("HDL面板"); |
| | | // infoBean.setAccessMode("HDL"); |
| | | // infoBean.setOID(getOid()); |
| | | // infoBean.setSid(getSid()); |
| | | //// infoBean.set |
| | | // AuthenticateRequest.VersionBean[] versionBeans = new AuthenticateRequest.VersionBean[]{new AuthenticateRequest.VersionBean("FW", versionString), new AuthenticateRequest.VersionBean("HW", "1956F")}; |
| | | // infoBean.setVersions(versionBeans); |
| | | // AuthenticateRequest request = new AuthenticateRequest(IdUtils.getUUId(), time, infoBean, authbean); |
| | | // |
| | | // String ip = IpUtils.getBroadcastAddress(); |
| | | // ip = "192.168.10.102"; |
| | | // sendAuthenticateRequest(ip, request, callBack); |
| | | // } |
| | | |
| | | public interface SearchGatewayCallBack { |
| | | /** |
| | |
| | | @Override |
| | | public void onSucceed(Object msg) { |
| | | GatewaySearchBean searchBean = getGatewaySearchBean(msg); |
| | | if (searchBean != null && searchBean.getGatewayId() == gatewayId) { |
| | | if (searchBean != null && searchBean.getGatewayId().contains(gatewayId)) { |
| | | Log.i("TAG", "onSuccess: "); |
| | | HDLLinkConfig.getInstance().setCurrentGateway(searchBean); |
| | | HDLLinkConfig.getInstance().setLocalEncrypt(searchBean.isLocalEncrypt()); |
| | | callBack.onSuccess(searchBean); |
| | | }else { |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | return searchBean; |
| | | } |
| | | |
| | | private AuthenticateResponseBean getAuthenticateResponseBean(Object msg) { |
| | | AuthenticateResponseBean mBean = null; |
| | | if (msg instanceof LinkResponse) { |
| | | LinkResponse linkResponse = (LinkResponse) msg; |
| | | String data = linkResponse.getData(); |
| | | if (!TextUtils.isEmpty(data)) { |
| | | AuthenticateResponseBean response = GsonConvert.getGson().fromJson(data, new TypeToken<AuthenticateResponseBean>() { |
| | | }.getType()); |
| | | |
| | | mBean = response; |
| | | } |
| | | |
| | | } |
| | | return mBean; |
| | | } |
| | | |
| | | /** |
| | | * 设备控制 |
| | | */ |
| | | public void propertyDown(List<DeviceControlRequest> request, HDLSocket.CallBack callBack) { |
| | | |
| | | // if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) { |
| | | String time = String.valueOf(System.currentTimeMillis()); |
| | | |
| | | final BaseLocalResponse<List<DeviceControlRequest>> data = new BaseLocalResponse<>(); |
| | | data.setId(IdUtils.getUUId()); |
| | | data.setTime_stamp(time); |
| | | data.setObjects(request); |
| | | |
| | | |
| | | String topic = String.format(TopicConstant.PROPERTY_DOWN, "1406844230123372545"); |
| | | String topic = HDLLinkConfig.getInstance().getFullTopic(TopicConstant.PROPERTY_DOWN); |
| | | LinkRequest message = new LinkRequest(topic, |
| | | GsonConvert.getGson().toJson(data)); |
| | | |
| | | // Log.i("TAG", "propertyDown: " + message.toString()); |
| | | |
| | | String ip = IpUtils.getBroadcastAddress(); |
| | | HdlSocketHelper.send(getUdpBoot(ip), message, null); |
| | | |
| | | // } |
| | | |
| | | } |
| | | |
| | | String stringToMD5(String text) { |
| | | byte[] hash; |
| | | try { |
| | | hash = MessageDigest.getInstance("MD5").digest(text.getBytes("UTF-8")); |
| | | } catch (NoSuchAlgorithmException e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } catch (UnsupportedEncodingException e) { |
| | | e.printStackTrace(); |
| | | return null; |
| | | } |
| | | |
| | | StringBuilder hex = new StringBuilder(hash.length * 2); |
| | | for (byte b : hash) { |
| | | if ((b & 0xFF) < 0x10) |
| | | hex.append("0"); |
| | | hex.append(Integer.toHexString(b & 0xFF)); |
| | | } |
| | | |
| | | return hex.toString(); |
| | | } |
| | | |
| | | |
| | | |