hxb
2023-09-14 a8c3ca4f1d9433e914325222ae5f26da2f9e2489
增加了住宅id功能
6个文件已添加
15个文件已修改
648 ■■■■■ 已修改文件
HDLSDK/.idea/gradle.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/com.hdl.sdk/.DS_Store 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/com.hdl.sdk/build.gradle 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLSDK/.idea/gradle.xml
@@ -7,7 +7,7 @@
        <option name="testRunner" value="GRADLE" />
        <option name="distributionType" value="DEFAULT_WRAPPED" />
        <option name="externalProjectPath" value="$PROJECT_DIR$" />
        <option name="gradleJvm" value="JDK" />
        <option name="gradleJvm" value="Embedded JDK" />
        <option name="modules">
          <set>
            <option value="$PROJECT_DIR$" />
@@ -16,7 +16,6 @@
            <option value="$PROJECT_DIR$/hdl-connect" />
          </set>
        </option>
        <option name="resolveModulePerSourceSet" value="false" />
      </GradleProjectSettings>
    </option>
  </component>
HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java
@@ -5,7 +5,6 @@
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
@@ -18,7 +17,6 @@
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -31,13 +29,16 @@
import com.hdl.sdk.common.event.DeleteNetworkListener;
import com.hdl.sdk.common.event.EventListener;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.AllTopicManagerUtils;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.HDLLink;
import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.bean.request.AttributesRequest;
import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
import com.hdl.sdk.connect.bean.request.ListSidRequest;
import com.hdl.sdk.connect.bean.request.ListUploadRequest;
import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
import com.hdl.sdk.connect.bean.response.GatewaySearchBean;
@@ -49,13 +50,11 @@
import com.hdl.sdk.connect.cloud.HDLException;
import com.hdl.sdk.connect.config.HDLLinkConfig;
import com.hdl.sdk.connect.socket.HDLAuthSocket;
import com.hdl.sdk.connect.utils.AesUtil;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Map;
@@ -192,6 +191,8 @@
                LogUtils.i("setDeleteNetworkListener onFailure");
            }
        });
        UploadSidList();
        ActivityResultLauncher<String[]> launcher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
            @Override
@@ -814,6 +815,47 @@
        });
    }
    private void UploadSidList() {
        tv.setText("上报Sid列表...");
        responseTv.setText("");
        //1.设置设备信息
        AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean();
        ListSidRequest request = new ListSidRequest();
        request.setOid(authenticateDeviceInfoBean.getOID());
        request.setName("sid名称");
        request.setOmodel(authenticateDeviceInfoBean.getDeviceModel());
        request.setSid("12345678");//当前sid的
        request.setSpk("light.switch");//当前spk名称,根据实际设备来定义
        request.setFrom(authenticateDeviceInfoBean.getOID());//来自哪个网关,如果时Link网络设备,则填自身oid;如果是驱动则不需要此字段
        AttributesRequest attributes = new AttributesRequest();
        attributes.setKey("on_off");
        attributes.setData_type("string");
        List<Object> valueList=new ArrayList<>();
        valueList.add("on");
        valueList.add("off");
        attributes.setValue(valueList);
        //添加支持的属性列表
        List<AttributesRequest> attributesList = new ArrayList<>();
        request.setAttributes(attributesList);
        List<ListSidRequest> sidRequestList = new ArrayList<>();
        sidRequestList.add(request);
        HDLLink.getInstance().UploadSidList(sidRequestList, new HDLLinkCallBack() {
            @Override
            public void onError(HDLLinkException error) {
                tv.setText(error.getMsg());
            }
            @Override
            public void onSuccess(String data) {
                tv.setText("上报sid列表成功");
                responseTv.setText(data);
            }
        });
    }
    /**
     * 获取APP版本
     *
HDLSDK/com.hdl.sdk/.DS_Store
Binary files differ
HDLSDK/com.hdl.sdk/build.gradle
@@ -8,8 +8,8 @@
    defaultConfig {
        minSdkVersion rootProject.minSdkVersion
        targetSdkVersion rootProject.targetSdkVersion
        versionCode 6
        versionName "1.1.4"
        versionCode 115
        versionName "1.1.5"
    }
    buildTypes {
        debug {
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/HDLSdk.java
@@ -1,10 +1,13 @@
package com.hdl.sdk.common;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.event.EventListener;
import com.hdl.sdk.common.exception.HDLLinkException;
import com.hdl.sdk.common.utils.AllTopicManagerUtils;
import com.hdl.sdk.common.utils.IdUtils;
import com.hdl.sdk.common.utils.LogUtils;
import com.hdl.sdk.common.utils.gson.GsonConvert;
@@ -32,7 +35,7 @@
        return version;
    }
    private String version = "1.1.0";
    private String version = "1.1.5";
    private HDLSdk() {
    }
@@ -46,10 +49,24 @@
    }
    public void init(Context context) {
        if (this.context != null) {
            return;
        }
        this.context = context.getApplicationContext();
        HDLAuthSocket.getInstance().init();
        HDLSocket.getInstance().broadcastRequest();
        LogUtils.i("HDLSdk Version:" + version);
        //订阅所有的主题
        HDLLink.getInstance().registerAllTopicsListener(new EventListener() {
            @Override
            public void onMessage(Object msg) {
                if (msg == null || !(msg instanceof LinkResponse)) {
                    return;
                }
                AllTopicManagerUtils.manager((LinkResponse) msg);
            }
        });
    }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/config/TopicConstant.java
@@ -121,5 +121,22 @@
    //驱动上报oid列表回复
    public static final String LIST_UPLOAD_REPLY = "/user/%s/custom/device/list/upload_reply";
    /**
     * sid列表上报
     */
    public static final String LIST_SID_UPLOAD="/base/%s/thing/topo/list/upload";
    /**
     * sid列表上报回复
     */
    public static final String LIST_SID_UPLOAD_REPLY="/base/%s/thing/topo/list/upload_reply";
    /*
     * 网关编辑命令
     * 写远程信息的,例如服务器地址、HomeId、密钥之类
     * 与服务器相关的
     * */
    public static final String GATEWAY_EDIT_REMOTE = "/user/%s/custom/gateway/remote/edit";
    public static final String GATEWAY_EDIT_REMOTE_REPLY = "/user/%s/custom/gateway/remote/edit_reply";
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/common/utils/AllTopicManagerUtils.java
New file
@@ -0,0 +1,121 @@
package com.hdl.sdk.common.utils;
import android.text.TextUtils;
import com.google.gson.reflect.TypeToken;
import com.hdl.sdk.common.config.TopicConstant;
import com.hdl.sdk.common.utils.gson.GsonConvert;
import com.hdl.sdk.connect.bean.LinkResponse;
import com.hdl.sdk.connect.bean.request.GatewayRemoteEditRequest;
import com.hdl.sdk.connect.bean.response.DeviceInfoResponse;
import com.hdl.sdk.connect.config.HDLLinkConfig;
import com.hdl.sdk.connect.socket.HDLSocket;
import java.time.chrono.IsoChronology;
/**
 * Created by hxb on 2023/9/14.
 */
public  class AllTopicManagerUtils {
    /**
     * 全局主题处理方法,可以处理所有接收到的数据
     *
     * @param linkResponse
     */
    public static void manager(LinkResponse linkResponse) {
        try {
            String topic = linkResponse.getTopic();
            if (TextUtils.isEmpty(topic)) {
                return;
            }
            String[] topics = topic.split("/");
            //非当前住宅网关的数据返回
            if (topics.length < 3) {
                return;
            }
            String mac_Oid_GatewayId = topics[2];
            if(!isLocalDevice(mac_Oid_GatewayId)){
                LogUtils.i("不是当前设备的网关Id,Id是"+mac_Oid_GatewayId);
                //非当前设备的数据
                return;
            }
            if(isSameTopic(TopicConstant.GATEWAY_EDIT_REMOTE,topic)){
                gatewayRemoteEditRequest(mac_Oid_GatewayId, linkResponse.getData());
            }
            //TODO 通过增加if else 增加其它主题类似这样使用
        } catch (Exception e) {
            LogUtils.e("全局处理模块异常:" + e.getMessage());
        }
    }
    /**
     * 是否当前的设备
     * @param mac_Oid_GatewayId
     * @return
     */
    private static boolean isLocalDevice(String mac_Oid_GatewayId) {
        if (TextUtils.isEmpty(mac_Oid_GatewayId)) {
            return false;
        }
        String mac = HDLLinkConfig.getInstance().getDeviceInfoBean().getDeviceMAC();
        String oid = "123";//HDLLinkConfig.getInstance().getDeviceInfoBean().getOID();
        String gatewayId = HDLLinkConfig.getInstance().getGatewayId();
        return mac_Oid_GatewayId.equals(mac) || mac_Oid_GatewayId.equals(oid) || mac_Oid_GatewayId.equals(gatewayId);
    }
    /**
     * 是否相同主题
     * @param targetTopic 目标的主题
     * @param sourceTopic 接收的主题
     * @return
     */
    private static boolean isSameTopic(String targetTopic,String sourceTopic) {
        if (TextUtils.isEmpty(targetTopic) || TextUtils.isEmpty(sourceTopic)) {
            return false;
        }
        String[] targetTopics = targetTopic.split("/");
        String[] sourceTopics = sourceTopic.split("/");
        if (targetTopics.length != sourceTopics.length) {
            return false;
        }
        for (int i = 0; i < targetTopics.length; i++) {
            if(i==2){
                //这个位置不匹配,是网关id
                continue;
            }
            if (!targetTopics[i] .equals( sourceTopics[i])) {
                return false;
            }
        }
        return true;
    }
    /**
     * 网关信息配置
     * @param body
     */
    private static void gatewayRemoteEditRequest(String mac_Oid_GatewayId,String body) {
        if (TextUtils.isEmpty(body)) {
            return;
        }
        GatewayRemoteEditRequest gatewayRemoteEditRequest = GsonConvert.getGson().fromJson(body, new TypeToken<GatewayRemoteEditRequest>() {
        }.getType());
        if (gatewayRemoteEditRequest == null || gatewayRemoteEditRequest.getObjects() == null) {
            return;
        }
        String homeId = gatewayRemoteEditRequest.getObjects().getHomeId();
        HDLLinkConfig.getInstance().setHomeId(homeId);
        HDLSocket.getInstance().gatewayRemoteEditReply(mac_Oid_GatewayId, gatewayRemoteEditRequest.getId(), null);
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java
@@ -8,6 +8,7 @@
import com.hdl.sdk.common.utils.ThreadToolUtils;
import com.hdl.sdk.connect.bean.request.DeviceAuthRequest;
import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
import com.hdl.sdk.connect.bean.request.ListSidRequest;
import com.hdl.sdk.connect.bean.request.ListUploadRequest;
import com.hdl.sdk.connect.callback.HDLLinkCallBack;
import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack;
@@ -321,6 +322,16 @@
    }
    /**
     * 上报sid列表
     *
     * @param requestList  sid列表
     * @param callBack 回调
     */
    public void UploadSidList(List<ListSidRequest> requestList, HDLLinkCallBack callBack) {
        HDLSocket.getInstance().UploadSidList(requestList, callBack);
    }
    /**
     * 通用UDP发送指令
     * 1秒没响应就让他重新发送,重试3次
     *
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/AttributesRequest.java
New file
@@ -0,0 +1,37 @@
package com.hdl.sdk.connect.bean.request;
import java.io.Serializable;
import java.util.List;
/**
 * Created by hxb on 2023/9/14.
 */
public class AttributesRequest implements Serializable {
    private String key;//key名称
    private String data_type;//数据类型
    private List<Object> value;//值
    public String getKey() {
        return key;
    }
    public void setKey(String key) {
        this.key = key;
    }
    public String getData_type() {
        return data_type;
    }
    public void setData_type(String data_type) {
        this.data_type = data_type;
    }
    public List<Object> getValue() {
        return value;
    }
    public void setValue(List<Object> value) {
        this.value = value;
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/BaseRequest.java
New file
@@ -0,0 +1,30 @@
package com.hdl.sdk.connect.bean.request;
import java.io.Serializable;
/**
 * Created by jlchen on 11/15/21.
 *
 * @Description : BaseResponse
 */
public class BaseRequest implements Serializable {
    private String id;
    private String time_stamp;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTime_stamp() {
        return time_stamp;
    }
    public void setTime_stamp(String time_stamp) {
        this.time_stamp = time_stamp;
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayInfoRequest.java
@@ -23,6 +23,8 @@
    private String master;
    private boolean isLocalEncrypt;
    private String homeId;
    public String getOid() {
        return oid;
    }
@@ -126,4 +128,12 @@
    public void setLocalEncrypt(boolean localEncrypt) {
        isLocalEncrypt = localEncrypt;
    }
    public String getHomeId() {
        return homeId;
    }
    public void setHomeId(String homeId) {
        this.homeId = homeId;
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/GatewayRemoteEditRequest.java
New file
@@ -0,0 +1,49 @@
package com.hdl.sdk.connect.bean.request;
import java.io.Serializable;
/**
 * Created by hxb on 2023/9/14.
 */
public class GatewayRemoteEditRequest extends BaseRequest {
    private GatewayObjects objects;
    public GatewayObjects getObjects() {
        return objects;
    }
    public void setObjects(GatewayObjects value) {
        this.objects = value;
    }
    public static class GatewayObjects implements Serializable {
        /**
         * 住宅Id
         */
        private String homeId;
        /**
         * 服务器地址
         */
        private String server_addr;
        public String getHomeId() {
            return homeId;
        }
        public void setHomeId(String homeId) {
            this.homeId = homeId;
        }
        public String getServer_addr() {
            return server_addr;
        }
        public void setServer_addr(String server_addr) {
            this.server_addr = server_addr;
        }
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/request/ListSidRequest.java
New file
@@ -0,0 +1,107 @@
package com.hdl.sdk.connect.bean.request;
import java.util.List;
/**
 * Created by panlili on 2023/1/31
 * description:获取sid列表
 */
public class ListSidRequest {
    /**
     * 是否在线
     */
    private String online;
    /**
     * 父oid
     */
    private String from;
    /**
     * 支持的属性列表
     */
    private List<AttributesRequest> attributes;
    /**
     * sid
     */
    private String sid;
    /**
     * spk
     */
    private String spk;
    /**
     * 当前oid
     */
    private String oid;//设备的Oid
    /**
     * 回路备注
     */
    private String name;
    /**
     * 模块信息
     */
    private String omodel;
    public String getOid() {
        return oid;
    }
    public void setOid(String oid) {
        this.oid = oid;
    }
    public String getOnline() {
        return online;
    }
    public void setOnline(String online) {
        this.online = online;
    }
    public String getFrom() {
        return from;
    }
    public void setFrom(String from) {
        this.from = from;
    }
    public List<AttributesRequest> getAttributes() {
        return attributes;
    }
    public void setAttributes(List<AttributesRequest> attributes) {
        this.attributes = attributes;
    }
    public String getSid() {
        return sid;
    }
    public void setSid(String sid) {
        this.sid = sid;
    }
    public String getSpk() {
        return spk;
    }
    public void setSpk(String spk) {
        this.spk = spk;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getOmodel() {
        return omodel;
    }
    public void setOmodel(String omodel) {
        this.omodel = omodel;
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/AuthenticateResponse.java
@@ -32,7 +32,7 @@
        this.ip_address = ip_address;
    }
    public class Auth implements Serializable {
    public static class Auth implements Serializable {
        private String localSecret;
        public String getLocalSecret() { return localSecret; }
@@ -42,10 +42,12 @@
    }
    public class GatewayObjects implements Serializable  {
    public static class GatewayObjects implements Serializable  {
        private String ip_address;
        private String gatewayId;
        private String oid;
        private String homeId;
        public String getIPAddress() { return ip_address; }
        public void setIPAddress(String value) {
@@ -59,6 +61,14 @@
        public String getOID() { return oid; }
        public void setOID(String value) { this.oid = value; }
        public String getHomeId() {
            return homeId;
        }
        public void setHomeId(String homeId) {
            this.homeId = homeId;
        }
    }
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceDeleteResponse.java
@@ -19,7 +19,7 @@
        this.objects = objects;
    }
    public class GatewayObjects implements Serializable {
    public static class GatewayObjects implements Serializable {
        private String device_name;
        private String oid;
        private boolean isSaveOidInfo;
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/DeviceInfoResponse.java
@@ -18,7 +18,7 @@
        this.objects = value;
    }
    public class GatewayObjects implements Serializable {
    public static class GatewayObjects implements Serializable {
        private String ip_address;
        private String gatewayId;
        private String oid;
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/bean/response/NetworkAccessBroadcastResponse.java
@@ -10,6 +10,11 @@
    private String oid;
    private String homeId;
    /**
     * 需要入网从机mac
     */
    private String slave_mac;
    public String getIPAddress() { return ip_address; }
    public void setIPAddress(String value) { this.ip_address = value; }
@@ -18,4 +23,12 @@
    public String getHomeID() { return homeId; }
    public void setHomeID(String value) { this.homeId = value; }
    public String getSlave_mac() {
        return slave_mac;
    }
    public void setSlave_mac(String slave_mac) {
        this.slave_mac = slave_mac;
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/config/HDLLinkConfig.java
@@ -21,11 +21,14 @@
    private static final String AUTHENTICATE_IS_LS_KEY = "auth_isls_key";
    public static final String AUTHENTICATE_IS_DEVICEINFO_KEY = "auth_deviceinfo_key";
    public static final String GATEWAY_REMOTEINFO_KEY="gateway_remoteinfo_key";
    private String localSecret;//本地加密密钥
    private String gatewayId;
    private String ipAddress;
    private GatewaySearchBean currentGateway;//当前网关
    private String networkName;
    private String homeId;
    private AuthenticateRequest.AuthenticateDeviceInfoBean deviceInfoBean;//当前设备基本信息
    private AuthenticateRequest.RequestBean requestBean;//当前设备基本信息
@@ -64,10 +67,12 @@
        this.gatewayId = "";
        this.ipAddress = "";
        this.localSecret = "";
        this.homeId="";
        SPUtils.remove(AUTHENTICATE_LS_KEY);
        SPUtils.remove(AUTHENTICATE_GATEWAYID_KEY);
        SPUtils.remove(AUTHENTICATE_IPADDRESS_KEY);
        SPUtils.remove(AUTHENTICATE_IS_LS_KEY);
        SPUtils.remove(GATEWAY_REMOTEINFO_KEY);
    }
    /**
@@ -77,6 +82,7 @@
        localSecret = SPUtils.getString(AUTHENTICATE_LS_KEY, "");
        gatewayId = SPUtils.getString(AUTHENTICATE_GATEWAYID_KEY, "");
        ipAddress = SPUtils.getString(AUTHENTICATE_IPADDRESS_KEY, "");
        homeId = SPUtils.getString(GATEWAY_REMOTEINFO_KEY, "");
    }
    /**
@@ -93,6 +99,7 @@
        SPUtils.put(AUTHENTICATE_LS_KEY, localSecret);
        SPUtils.put(AUTHENTICATE_GATEWAYID_KEY, gatewayId);
        SPUtils.put(AUTHENTICATE_IPADDRESS_KEY, ipAddress);
    }
    /**
@@ -189,6 +196,9 @@
    public AuthenticateRequest.AuthenticateDeviceInfoBean getDeviceInfoBean() {
        AuthenticateRequest.AuthenticateDeviceInfoBean infoBean = (AuthenticateRequest.AuthenticateDeviceInfoBean) SPUtils.getSerializableEntity(AUTHENTICATE_IS_DEVICEINFO_KEY);
        if(infoBean==null){
            infoBean= new AuthenticateRequest.AuthenticateDeviceInfoBean();
        }
        return infoBean;
    }
@@ -212,4 +222,13 @@
    public void setAuthBean(AuthenticateRequest.AuthBean authBean) {
        this.authBean = authBean;
    }
    public String getHomeId() {
        return homeId;
    }
    public void setHomeId(String homeId) {
        this.homeId = homeId;
        SPUtils.put(GATEWAY_REMOTEINFO_KEY, homeId);
    }
}
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/protocol/LinkMessageDecoder.java
@@ -215,7 +215,8 @@
                            LogUtils.i("UploadGatewayInfo onError");
                        }
                    });
                } else if (response.getTopic().equals(updateLocalSecret) || response.getTopic().equals(TopicConstant.LINK_BROADCAST)) {
                }
                else if (response.getTopic().equals(updateLocalSecret) || response.getTopic().equals(TopicConstant.LINK_BROADCAST)) {
                    try {
                        DeviceInfoResponse deviceInfoResponse = GsonConvert.getGson().fromJson(response.getData(), new TypeToken<DeviceInfoResponse>() {
                        }.getType());
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java
@@ -148,19 +148,29 @@
        EventDispatcher.getInstance().register(TopicConstant.GATEWAY_AUTH_BROADCAST, new EventListener() {
            @Override
            public void onMessage(Object msg) {
                LogUtils.i("收到网关认证信息: ");
                NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg);
                if (bean != null) {
                    //移除监听
                    EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
                    LogUtils.i("网关入网广播IP: " + bean.getIPAddress());
                    HDLLinkConfig.getInstance().setIpAddress(bean.getIPAddress());
                    String ipStr = bean.getIPAddress();
                    if (!TextUtils.isEmpty(ipStr)) {
                        sendAuthenticateRequest(ipStr, request, callBack);
                try {
                    LogUtils.i("收到网关认证信息: ");
                    NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg);
                    if (bean != null) {
                        LogUtils.i("网关入网广播IP: " + bean.getIPAddress());
                        if (!TextUtils.isEmpty(bean.getSlave_mac())) {
                            if (!bean.getSlave_mac().equals(request.getObjects().getDeviceMAC())) {
                                LogUtils.i("入网验证的mac和本机不一样,请求的MAC是"+bean.getSlave_mac()+" 本机的是"+request.getObjects().getDeviceMAC());
                                return;
                            }
                        }
                        //移除监听
                        EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST);
                        HDLLinkConfig.getInstance().setIpAddress(bean.getIPAddress());
                        String ipStr = bean.getIPAddress();
                        if (!TextUtils.isEmpty(ipStr)) {
                            sendAuthenticateRequest(ipStr, request, callBack);
                        }
                    }
                }
                }catch (Exception e){
                    LogUtils.e("入网验证异常",e.getMessage());
                }
            }
        });
    }
@@ -205,6 +215,7 @@
        request.setIp_address(authenticateDeviceInfoBean.getIPAddress());
        request.setMaster("false");
        request.setLocalEncrypt(false);
        request.setHomeId(HDLLinkConfig.getInstance().getHomeId());
        data.setObjects(request);
@@ -258,16 +269,21 @@
                            String localSecret = "";
                            String gatewayId = "";
                            String ipAddress = "";
                            String homeId="";
                            if (bean.getAuth() != null) {
                                localSecret = bean.getAuth().getLocalSecret();
                            }
                            if (bean.getObjects() != null) {
                                gatewayId = bean.getObjects().getGatewayID();
                                ipAddress = bean.getObjects().getIPAddress();
                                homeId=bean.getObjects().getHomeId();
                            }
                            if (ipAddress == null) {
                                ipAddress = bean.getIp_address();
                            }
                            if(!TextUtils.isEmpty(homeId)){
                                HDLLinkConfig.getInstance().setHomeId(homeId);
                            }
                            HDLLinkConfig.getInstance().setAuthBean(request.getAuth());
                            //判断网关是否已经注册到云端
HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java
@@ -29,6 +29,7 @@
import com.hdl.sdk.connect.bean.request.GatewayInfoRequest;
import com.hdl.sdk.connect.bean.request.ListOidRequest;
import com.hdl.sdk.connect.bean.request.ListOidRequest2;
import com.hdl.sdk.connect.bean.request.ListSidRequest;
import com.hdl.sdk.connect.bean.request.ListUploadRequest;
import com.hdl.sdk.connect.bean.response.AuthenticateResponse;
import com.hdl.sdk.connect.bean.response.BaseLocalCodeResponse;
@@ -698,6 +699,52 @@
    }
    /**
     * 上报Sid列表
     *
     * @param requestList  sid列表
     * @param callBack 回调
     */
    public void UploadSidList(List<ListSidRequest> requestList, HDLLinkCallBack callBack) {
        if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
            String time = String.valueOf(System.currentTimeMillis());
            final BaseLocalResponse<List<ListSidRequest>> data = new BaseLocalResponse<>();
            data.setId(IdUtils.getUUId());
            data.setTime_stamp(time);
            data.setObjects(requestList);
            String topic = String.format(TopicConstant.LIST_SID_UPLOAD, getGatewayId());
            LinkRequest message = new LinkRequest(topic,
                    GsonConvert.getGson().toJson(data));
            String replyTopic = topic + "_reply";
            try {
                sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
                    @Override
                    public void onSucceed() {
                    }
                    @Override
                    public void onError() {
                        if (callBack != null) {
                            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
                        }
                    }
                });
            } catch (Exception e) {
                if (callBack != null) {
                    callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
                }
            }
        } else {
            if (callBack != null) {
                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
            }
        }
    }
    /**
     * 上报入网认证结果
     *
     * @param mac       mac
@@ -1067,4 +1114,56 @@
    }
    /**
     * 回复网关配置命令
     * @param mac_Oid_GatewayId
     * @param msgId 消息Id
     * @param callBack
     */
    public void gatewayRemoteEditReply(String mac_Oid_GatewayId, String msgId, HDLLinkCallBack callBack) {
        if (TextUtils.isEmpty(mac_Oid_GatewayId)) {
            callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR));
        }
        String time = String.valueOf(System.currentTimeMillis());
        final BaseLocalCodeResponse<List<String>> data = new BaseLocalCodeResponse<>();
        data.setId(msgId);
        data.setTime_stamp(time);
        data.setCode("0");
        String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE_REPLY, mac_Oid_GatewayId);
        LinkRequest message = new LinkRequest(topic,
                GsonConvert.getGson().toJson(data));
        try {
            sendMsg(message.getSendBytes(), topic, callBack, new SendListener() {
                @Override
                public void onSucceed() {
                    if (callBack == null) return;
                    try {
                        callBack.onSuccess("退网成功");
                        HDLLinkConfig.getInstance().clearConfig();
                    } catch (Exception e) {
                        callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR));
                    }
                }
                @Override
                public void onError() {
                    if (callBack != null) {
                        callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
                    }
                }
            });
        } catch (Exception e) {
            if (callBack != null) {
                callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
            }
        }
    }
}