hxb
2023-06-29 4e4f605f481af8a8f0ad9e13ae9ab4dbe73eecfd
调整了搜索网关回调
2个文件已添加
10个文件已修改
285 ■■■■ 已修改文件
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/common/exception/HDLLinkCode.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/bean/LinkResponse.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/bean/ModbusResponse.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/callback/ModbusCallBack.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLConnectHelper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/utils/QueueUtils.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/res/values-zh/strings_code.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/res/values/strings_code.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/bean/ModBusBean.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
local.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/common/exception/HDLLinkCode.java
@@ -38,6 +38,7 @@
    public static final HDLLinkCode HDL_TOPIC_NOT_RIGHT=new HDLLinkCode(-2110,HDLLinkLocalSdk.getInstance().getContext().getString(R.string.HDL_TOPIC_NOT_RIGHT));
    public static final HDLLinkCode HDL_OBJECT_NOT_SUPPORT=new HDLLinkCode(-2111,HDLLinkLocalSdk.getInstance().getContext().getString(R.string.HDL_OBJECT_NOT_SUPPORT));
    public static final HDLLinkCode HDL_GATEWAY_REMOTE_NOT_RESPONSE=new HDLLinkCode(-2112,HDLLinkLocalSdk.getInstance().getContext().getString(R.string.HDL_GATEWAY_REMOTE_NOT_RESPONSE));
    public static final HDLLinkCode HDL_SUCCESS=new HDLLinkCode(0,HDLLinkLocalSdk.getInstance().getContext().getString(R.string.SUCCESS));
    private String msg;
    private int code;
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/bean/LinkResponse.java
@@ -34,7 +34,7 @@
    public void setByteData(byte []data) {
        this.byteData = data;
        this.data = new String(data);
//        this.data = new String(data);
        this.length=data.length;
    }
@@ -45,7 +45,7 @@
    public void setData(String data) {
        this.data = data;
        if (!TextUtils.isEmpty(data)) {
            this.byteData = data.getBytes();
//            this.byteData = data.getBytes();
            setLength(data.length());
        } else {
            setLength(0);
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/bean/ModbusResponse.java
New file
@@ -0,0 +1,88 @@
package com.hdl.sdk.link.core.bean;
import androidx.annotation.NonNull;
import com.hdl.sdk.link.common.utils.gson.GsonConvert;
import java.io.Serializable;
/**
 * Created by hxb on 2021/12/19.
 */
public class ModbusResponse implements Serializable {
    /**
     * 原生主题
     */
    private String topic;
    /**
     * 原生数据
     */
    private byte []data;
    /**
     * 网关Oid
     */
    private String oid;
    /**
     * 获取原生主题
     *
     * @return
     */
    public String getTopic() {
        return topic;
    }
    /**
     * 设置原生主题
     *
     * @param topic
     */
    public void setTopic(String topic) {
        this.topic = topic;
    }
    /**
     * 获取原生数据
     *
     * @return
     */
    public byte []getData() {
        return data;
    }
    /**
     * 设置原生数据
     *
     * @param data
     */
    public void setData(byte []data) {
        this.data = data;
    }
    /**
     * 获取网关主要信息,可能是oid,可能是网关Id,可能是mac
     *
     * @return
     */
    public String getOid() {
        return oid;
    }
    /**
     * 设置Oid
     *
     * @param
     */
    public void setOid(String oid) {
        this.oid = oid;
    }
    @NonNull
    @Override
    public String toString() {
        return GsonConvert.getGson().toJson(this);
    }
}
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/callback/ModbusCallBack.java
@@ -8,5 +8,5 @@
 * Created by hxb on 2021/12/15.
 */
public interface ModbusCallBack extends BaseCallBack {
    void onSuccess(String msg);
    void onSuccess(byte []data);
}
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLConnectHelper.java
@@ -12,6 +12,7 @@
import com.hdl.sdk.link.common.utils.ThreadToolUtils;
import com.hdl.sdk.link.core.bean.LinkRequest;
import com.hdl.sdk.link.core.bean.LinkResponse;
import com.hdl.sdk.link.core.bean.ModbusResponse;
import com.hdl.sdk.link.core.bean.ZigbeeResponse;
import com.hdl.sdk.link.core.bean.gateway.GatewayBean;
import com.hdl.sdk.link.core.config.HDLLinkConfig;
@@ -126,6 +127,14 @@
                        else{
                            notifyFailure(HDLLinkCode.HDL_TOPIC_NOT_RIGHT);
                        }
                    }else if(msg instanceof ModbusResponse){
                        ModbusResponse response = (ModbusResponse) msg;
                        if (replyTopic.equals(response.getTopic())) {
                            notifySucceed(response.getData());
                        }
                        else{
                            notifyFailure(HDLLinkCode.HDL_TOPIC_NOT_RIGHT);
                        }
                    }
                    else{
                        notifyFailure(new HDLLinkCode(HDLLinkCode.HDL_OBJECT_NOT_SUPPORT.getCode(), "Object Name:" + msg));
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/connect/HDLModBusConnect.java
@@ -11,9 +11,9 @@
import com.hdl.sdk.link.common.utils.LogUtils;
import com.hdl.sdk.link.core.bean.LinkRequest;
import com.hdl.sdk.link.core.bean.LinkResponse;
import com.hdl.sdk.link.core.bean.ModbusResponse;
import com.hdl.sdk.link.core.bean.ZigbeeResponse;
import com.hdl.sdk.link.core.bean.gateway.GatewayBean;
import com.hdl.sdk.link.core.callback.BaseCallBack;
import com.hdl.sdk.link.core.callback.ModbusCallBack;
import com.hdl.sdk.link.core.callback.ZigbeeCallBack;
import com.hdl.sdk.link.core.config.HDLLinkConfig;
@@ -28,9 +28,9 @@
    private static final String TAG="HDLModbusConnect";
    private static HDLModBusConnect instance;
    /**
     * 内部用,主要是处理处理掉透传主题及link主题后,还原Zigbee原生数据及主题用
     * 内部用,主要是处理处理掉透传主题及link主题后,还原modbus原生数据及主题用
     */
    private final String zigbeeAllTopic = "/Modbus";
    private final String allTopic = "/Modbus";
    /**
     * 返回当前实例,不存在就创建并同时注册监听事件
@@ -54,7 +54,7 @@
        if(null==eventListener){
            return;
        }
        EventDispatcher.getInstance().register(zigbeeAllTopic, eventListener);
        EventDispatcher.getInstance().register(allTopic, eventListener);
    }
    /**
@@ -66,7 +66,7 @@
        if(null==eventListener){
            return;
        }
        EventDispatcher.getInstance().remove(zigbeeAllTopic, eventListener);
        EventDispatcher.getInstance().remove(allTopic, eventListener);
    }
    /**
@@ -76,44 +76,39 @@
        final EventListener eventListener = new EventListener() {
            @Override
            public void onMessage(Object msg) {
//                try {
//                    if (msg instanceof LinkResponse) {
//                        LinkResponse linkResponse = (LinkResponse) msg;
//                        String body = linkResponse.getData();
//                        int index = body.indexOf("{");
//                        //zigbee回复的数据前有主题,后面才是数据
//                        if (index <= 0)
//                            return;
//
//                        String zigbeeTopic = body.substring(0, index).trim();
//                        //zigbee的负载数据
//                        String bodyData = body.substring(index);
//
//                        ZigbeeResponse zigbeeResponse = new ZigbeeResponse();
//                        zigbeeResponse.setTopic(zigbeeTopic);
//                        zigbeeResponse.setData(bodyData);
//                        String oid = null;
//                        //是否是通过主网关透传主题
//                        if (linkResponse.getTopic().contains("/slaveoid/")) {
//                            oid = linkResponse.getTopic().split("/")[8];
//                        } else {
//                            oid = linkResponse.getTopic().split("/")[2];
//                        }
//                        zigbeeResponse.setOid(oid);
//                        for (GatewayBean gatewayBean : HDLLinkLocalGateway.getInstance().getGatewayList()) {
//                            if (oid.equals(gatewayBean.getGatewayId()) || oid.equals(gatewayBean.getDevice_mac()) || oid.equals(gatewayBean.getOid())) {
//                                //上面的oid可能是网关id或者mac或者是oid,不管是哪个统一使用oid表示方式
//                                zigbeeResponse.setOid(gatewayBean.getOid());
//                                break;
//                            }
//                        }
//                        EventDispatcher.getInstance().post(zigbeeTopic, zigbeeResponse);
//                        //发布Zigbee原生主题及数据
//                        EventDispatcher.getInstance().post(zigbeeAllTopic, zigbeeResponse);
//                    }
//                } catch (Exception e) {
//                    LogUtils.e(TAG,"LinkResponse转ZigbeeResponse异常:"+ e.getMessage());
//                }
                try {
                    if (msg instanceof LinkResponse) {
                        LinkResponse linkResponse = (LinkResponse) msg;
                        if(linkResponse.getTopic()==null||!linkResponse.getTopic().contains("custom/native/inverter/"))
                        {
                            return;
                        }
                        byte []data = linkResponse.getByteData();
                        ModbusResponse  modbusResponse= new ModbusResponse();
                        modbusResponse.setTopic("Modbus"+data[0]+data[1]);
                        modbusResponse.setData(data);
                        String oid = null;
                        //是否是通过主网关透传主题
                        if (linkResponse.getTopic().contains("/slaveoid/")) {
                            oid = linkResponse.getTopic().split("/")[8];
                        } else {
                            oid = linkResponse.getTopic().split("/")[2];
                        }
                        modbusResponse.setOid(oid);
                        for (GatewayBean gatewayBean : HDLLinkLocalGateway.getInstance().getGatewayList()) {
                            if (oid.equals(gatewayBean.getGatewayId()) || oid.equals(gatewayBean.getDevice_mac()) || oid.equals(gatewayBean.getOid())) {
                                //上面的oid可能是网关id或者mac或者是oid,不管是哪个统一使用oid表示方式
                                modbusResponse.setOid(gatewayBean.getOid());
                                break;
                            }
                        }
                        EventDispatcher.getInstance().post(allTopic, modbusResponse);
                        //发布Zigbee原生主题及数据
//                        EventDispatcher.getInstance().post(allTopic, zigbeeResponse);
                    }
                } catch (Exception e) {
                    LogUtils.e(TAG,"LinkResponse转ModbusResponse异常:"+ e.getMessage());
                }
            }
        };
        //注册直接通讯的主题,包括直接和主网关通讯或者直接和从网关通讯
@@ -127,11 +122,10 @@
     * 发送原生数据
     *
     * @param gatewayOidOrGatewayId 目标网关的oid或者网关Id
     * @param responeTopic          回复主题
     * @param payload               发送数据
     * @param baseCallBack        结果回调
     */
    public void Send(String gatewayOidOrGatewayId,String responeTopic, String payload, final ModbusCallBack baseCallBack) {
    public void Send(String gatewayOidOrGatewayId, byte []payload, final ModbusCallBack baseCallBack) {
        //如果本地有链接这个网关,则用本地连接
        GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getGatewayByOidOrGatewayId(gatewayOidOrGatewayId);
        if (null == gatewayBean) {
@@ -150,17 +144,19 @@
        } else {
            request.setCloudTopic(String.format(TopicConstant.NATIVE_MODBUS_DOWN_SLAVE, HDLLinkConfig.getInstance().getGatewayId(), gatewayOidOrGatewayId));
        }
        request.setReplyTopic(responeTopic);
        request.setReplyTopic("Modbus"+payload[0]+payload[1]);
        long timeout = 2 * 1000;
        new HDLConnectHelper(timeout, 1, gatewayBean.getIp_address(), 8586, request, new HDLConnectHelper.HdlSocketListener() {
            @Override
            public void onSucceed(Object msg) {
//                if (msg instanceof String) {
//                    if (null != baseCallBack) {
//                        baseCallBack.onSuccess(msg+"");
//                    }
//                }
                if (msg instanceof Byte[]) {
                    if (null != baseCallBack) {
                        baseCallBack.onSuccess((byte[])msg);
                    }
                }else{
                    LogUtils.e("发送Modbus回调对象类型非数组类型,类型是"+msg.getClass());
                }
            }
            @Override
HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/core/utils/QueueUtils.java
@@ -117,6 +117,7 @@
        } else {
            response.setData(new String(linkPacket.getBody(), "utf-8"));
        }
        response.setByteData(linkPacket.getBody());
        if (HDLConnectHelper.isLocal()) {
            LogUtils.i("本地接收到数据:\r\n" + response.getTopic() + "\r\n" + response.getData());
        }
HDLLinkLocalSdk/src/main/res/values-zh/strings_code.xml
@@ -24,4 +24,5 @@
    <string name="HDL_TOPIC_NOT_RIGHT">主题没有匹配</string>
    <string name="HDL_OBJECT_NOT_SUPPORT">对象不支持</string>
    <string name="HDL_GATEWAY_REMOTE_NOT_RESPONSE">网关本地连接失败,通过远程通讯不回复</string>
    <string name="SUCCESS">成功</string>
</resources>
HDLLinkLocalSdk/src/main/res/values/strings_code.xml
@@ -24,4 +24,5 @@
<string name="HDL_TOPIC_NOT_RIGHT">Theme does not match</string>
<string name="HDL_OBJECT_NOT_SUPPORT">Object not supported</string>
<string name="HDL_GATEWAY_REMOTE_NOT_RESPONSE">Gateway local connection failed, unable to reply through remote communication</string>
<string name="SUCCESS">success</string>
</resources>
app/src/main/java/com/hdl/photovoltaic/bean/ModBusBean.java
New file
@@ -0,0 +1,28 @@
package com.hdl.photovoltaic.bean;
import java.io.Serializable;
/**
 * Created by hxb on 2023/6/28.
 */
public class ModBusBean implements Serializable {
    private String oid;//网关oid
    private byte []data;//控制命令
    public String getOid() {
        return oid;
    }
    public void setOid(String oid) {
        this.oid = oid;
    }
    public byte []getData() {
        return data;
    }
    public void setData(byte []data) {
        this.data = data;
    }
}
app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
@@ -7,6 +7,7 @@
import com.google.gson.Gson;
import com.hdl.photovoltaic.HDLApp;
import com.hdl.photovoltaic.bean.BaseEventBus;
import com.hdl.photovoltaic.bean.ModBusBean;
import com.hdl.photovoltaic.config.ConstantManage;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.listener.CloudCallBeak;
@@ -15,9 +16,12 @@
import com.hdl.photovoltaic.uni.HDLUniMPSDKManager;
import com.hdl.photovoltaic.uni.UniToAndroidBean;
import com.hdl.photovoltaic.utils.WifiUtils;
import com.hdl.sdk.link.common.exception.HDLLinkCode;
import com.hdl.sdk.link.common.exception.HDLLinkException;
import com.hdl.sdk.link.common.utils.LogUtils;
import com.hdl.sdk.link.core.bean.gateway.GatewayBean;
import com.hdl.sdk.link.core.callback.GatewayCallBack;
import com.hdl.sdk.link.core.callback.ModbusCallBack;
import com.hdl.sdk.link.core.connect.HDLModBusConnect;
import org.greenrobot.eventbus.EventBus;
@@ -101,21 +105,21 @@
                                HDLUniMP.UniCallBackBaseBean callBackBaseBean = new HDLUniMP.UniCallBackBaseBean();
                                callBackBaseBean.setType(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_LIST);
                                callBackBaseBean.setData(gatewayBeanList);
                                sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, callBackBaseBean);
//                                sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, callBackBaseBean);
                                uniCallbackData(callBackBaseBean, callback);
                            }
                            @Override
                            public void onError(HDLLinkException e) {
                                //发送失败
                                uniCallbackData(null, e.getCode()+"", "", callback);
                            }
                        });
                    }
                    break;
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_MODBUS_SEND: {
                        //发送modbus协议
//                        HDLModBusConnect.getInstance().Send(uniToAndroidBean.getGatewayOid(), null, );
                        sendModBus(data,callback);
                    }
                }
@@ -149,6 +153,38 @@
            HdlLogLogic.print("uni===原生接收uni发来的数据", e.getMessage());
        }
    }
    /**
     * 发送modbus协议数据
     * @param data modbus数据
     * @param callback 回调
     */
    void sendModBus(Object data,DCUniMPJSCallback callback)
    {
        String tempData = getKeyValue("data", data);
        if(tempData==null){
            LogUtils.i("data内容为空");
            return;
        }
        ModBusBean modBusBean = com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(tempData), ModBusBean.class);
        if(modBusBean.getOid()==null || modBusBean.getData()==null) {
            LogUtils.i("内容为空,oid="+modBusBean.getOid()+" data="+modBusBean.getData());
            return;
        }
        //发送modbus协议
        HDLModBusConnect.getInstance().Send(modBusBean.getOid(), modBusBean.getData(), new ModbusCallBack() {
            @Override
            public void onSuccess(byte []data) {
                uniCallbackData(data, callback);
            }
            @Override
            public void onError(HDLLinkException e) {
                uniCallbackData(null,e.getCode()+"","失败",callback);
            }
        });
    }
    /**
@@ -237,6 +273,10 @@
    }
    private void uniCallbackData(Object obj, DCUniMPJSCallback callback) {
        uniCallbackData(obj,HDLLinkCode.HDL_SUCCESS+"",HDLLinkCode.HDL_SUCCESS.getMsg(),callback);
    }
    /**
     * 当前对象转 JSONObject
     *
local.properties
@@ -4,5 +4,5 @@
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Wed Jun 28 17:38:10 CST 2023
sdk.dir=/Users/hdl/Library/Developer/Xamarin/android-sdk-macosx/platform-tools
#Thu Jun 29 10:39:09 CST 2023
sdk.dir=/Users/hdl/Library/Developer/Xamarin/android-sdk-macosx