mac
2024-06-12 d8d41b0623146ec890ec9191b613c0e8f13197dd
app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
@@ -34,6 +34,7 @@
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer;
import com.hdl.photovoltaic.internet.TcpClient;
import com.hdl.photovoltaic.internet.api.HttpApi;
import com.hdl.photovoltaic.internet.api.TopicApi;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.listener.LinkCallBack;
@@ -43,8 +44,9 @@
import com.hdl.photovoltaic.ui.bean.Geolocation;
import com.hdl.photovoltaic.ui.bean.LinkBean;
import com.hdl.photovoltaic.ui.bean.OidBean;
import com.hdl.photovoltaic.ui.bean.UnCountBean;
import com.hdl.photovoltaic.ui.me.AsRegardsActivity;
import com.hdl.photovoltaic.ui.me.PersonalDataActivity;
import com.hdl.photovoltaic.ui.me.CPersonalDataActivity;
import com.hdl.photovoltaic.ui.me.SetActivity;
import com.hdl.photovoltaic.ui.newC.MessageCenterList;
import com.hdl.photovoltaic.ui.newC.PowerStationsListEdit;
@@ -63,6 +65,7 @@
import com.hdl.sdk.link.core.connect.HDLModBusConnect;
import com.hdl.sdk.link.core.connect.HDLUdpConnect;
import com.hdl.sdk.link.gateway.HDLLinkLocalGateway;
import com.huawei.hms.api.Api;
import org.greenrobot.eventbus.EventBus;
import org.json.JSONObject;
@@ -89,6 +92,8 @@
 */
public class HdlUniLogic implements HDLUniMPSDKManager.IOnOtherUniMPEventCallBack {
    private static volatile HdlUniLogic sHdlUniLogic;
    public final static String separator = "---";
    /**
     * 获取当前对象
@@ -126,8 +131,8 @@
            }
            String type = getKeyValue("type", data);//小类
            String logTag = getKeyValue("logTag", data);//标记uni指令
            String mode_type = "大类->" + topic + "--->" + "小类->" + type;//用来打印的
            HdlLogLogic.print(logTag + ":" + "uni--->发送--->" + mode_type + "\r\n" + data, true);
            String mode_type = "大类-" + topic + "---" + "小类-" + type;//用来打印的
            HdlLogLogic.print(logTag + ":" + "uni---发送---" + mode_type + "\r\n" + data, true);
            if (HDLUniMP.UNI_EVENT_REPLY_USER_MODEL.equals(topic)) {
                //用户模块
                switch (type) {
@@ -197,6 +202,11 @@
            } else if (HDLUniMP.UNI_EVENT_REPLY_DEVICE_MODEL.equals(topic)) {
                //设备模块
                switch (type) {
                    //modBus协议专用
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_MODBUS_SEND: {
                        sendModBus(mode_type, data, callback);
                    }
                    break;
                    //添加逆变器到云端
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_ADD: {
                        this.uniAddInverterDeviceToCloud(mode_type, data, callback);
@@ -222,11 +232,6 @@
                        this.uniGetCurrentHomeLocalAndCloudGatewayList(mode_type, data, callback);
                    }
                    break;
                    //modBus协议专用
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_MODBUS_SEND: {
                        sendModBus(mode_type, data, callback);
                    }
                    break;
                    //获取oid列表
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_OID: {
                        this.uniGetInverterOidList(mode_type, data, callback);
@@ -236,7 +241,6 @@
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_TIME: {
                        this.uniGetInverterTime(mode_type, data, callback);
                    }
                    break;
                    //逆变器时间编辑
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_TIME_EDIT: {
@@ -268,43 +272,78 @@
                        this.uniGetMessageNumber(mode_type, data, callback);
                    }
                    break;
                    //初始化逆变器
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_INITIALIZEINVERTER: {
                        this.setInitializeGateway(mode_type, data, callback);
                    }
                    break;
                    //读取设备远程信息
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_REMOTEINFO: {
                        this.setInverterDeviceRemoteInfo(mode_type, data, callback);
                    }
                    break;
                    //设备名称修改(修改是云端oid名称,设备使用modbus协议修改)
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_EDIT_NAME: {
                        this.uniOidEditName(mode_type, data, callback);
                    }
                    break;
                }
            } else if (HDLUniMP.UNI_EVENT_REPLY_WIFI_MODEL.equals(topic)) {
                WifiUtils wifiUtils = WifiUtils.getInstance();
                //wifi模块
                switch (type) {
                    //获取wifi列表
                    case HDLUniMP.UNI_EVENT_REPLY_WIFI_LIST: {
                    //获取手机wifi列表
                    case HDLUniMP.UNI_EVENT_REPLY_PHONE_WIFI_LIST: {
                        if (callback != null) {
                            uniCallbackData(mode_type, wifiUtils.getScanResult(), callback);
                        }
                    }
                    break;
                    //当前wifi详情
                    case HDLUniMP.UNI_EVENT_REPLY_WIFI_PHONE_INFO: {
                    //获取手机当前wifi详情
                    case HDLUniMP.UNI_EVENT_REPLY_PHONE_WIFI_INFO: {
                        if (callback != null) {
                            uniCallbackData(mode_type, wifiUtils.getCurrentConnectWifiInfo(), callback);
                        }
                    }
                    break;
                    //配置WiFi信息给逆变器
                    case HDLUniMP.UNI_EVENT_REPLY_WIFI_SET_DEVICE: {
                        String mac = getKeyValue("mac", getKeyValue("data", data));//
                        String wif_type = getKeyValue("wif_type", getKeyValue("data", data));//1:热点,2:无线wifi,3:以太网
                        String ssid = getKeyValue("ssid", getKeyValue("data", data));//
                        String password = getKeyValue("password", getKeyValue("data", data));//
                        startTcpThreadSendAccountAndPassword(mode_type, ssid, password, callback);
                    }
                    break;
                    //打开手机Wifi设置界面
                    case HDLUniMP.UNI_EVENT_REPLY_OPEN_WIFI_SETTINGS: {
                    case HDLUniMP.UNI_EVENT_REPLY_PHONE_OPEN_WIFI_SETTINGS: {
                        Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        HDLApp.getInstance().startActivity(intent);
                    }
                    //逆变器WiFi信息配置
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_WIFI_SET: {
                        uniGetAndSetNetwork(mode_type, data, TopicApi.DELETING_GATEWAY_WIFI_EDIT, callback);
                    }
                    break;
                    //逆变器WiFi信息获取
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_WIFI_GET: {
                        uniGetAndSetNetwork(mode_type, data, TopicApi.DELETING_GATEWAY_WIFI_GET, callback);
                    }
                    break;
                    //逆变器热点配置
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_HOTSPOT_SET: {
                        uniGetAndSetNetwork(mode_type, data, TopicApi.DELETING_GATEWAY_HOTSPOT_EDIT, callback);
                    }
                    break;
                    //逆变器热点获取
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_HOTSPOT_GET: {
                        uniGetAndSetNetwork(mode_type, data, TopicApi.DELETING_GATEWAY_HOTSPOT_GET, callback);
                    }
                    break;
                    //逆变器以太网配置
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_ETHERNET_SET: {
                        uniGetAndSetNetwork(mode_type, data, TopicApi.DELETING_GATEWAY_ETHERNET_EDIT, callback);
                    }
                    break;
                    //逆变器以太网获取
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_ETHERNET_GET: {
                        uniGetAndSetNetwork(mode_type, data, TopicApi.DELETING_GATEWAY_ETHERNET_GET, callback);
                    }
                    break;
                }
            } else if (HDLUniMP.UNI_EVENT_REPLY_OTA_MODEL.equals(topic)) {
                //OTA升级模块
@@ -393,7 +432,7 @@
                    case HDLUniMP.UNI_EVENT_REPLY_MINE_EDIT_USER_INFO: {
                        Intent intent = new Intent();
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.setClass(HDLApp.getInstance(), PersonalDataActivity.class);
                        intent.setClass(HDLApp.getInstance(), CPersonalDataActivity.class);
                        HDLApp.getInstance().startActivity(intent);
                    }
                    break;
@@ -427,6 +466,12 @@
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.setClass(HDLApp.getInstance(), SetActivity.class);
                        HDLApp.getInstance().startActivity(intent);
                    }
                    break;
                    //成员列表
                    case HDLUniMP.UNI_EVENT_REPLY_MEMBER_LIST: {
                    }
                    break;
@@ -460,17 +505,14 @@
                    //专门收集uni日志
                    case HDLUniMP.UNI_EVENT_REPLY_OTHER_UNI_LOG: {
                        String customizeContentFormat = getKeyValue("customizeContentFormat", getKeyValue("data", data));
                        HdlLogLogic.print("uni--->log--->" + customizeContentFormat, true);
                        HdlLogLogic.print("uni---log---" + customizeContentFormat, true);
                    }
                    break;
                    //uni主页点击返回通知
                    case HDLUniMP.UNI_EVENT_REPLY_OTHER_BACK: {
                        //EventBus事件分发
                        BaseEventBus baseEventBus = new BaseEventBus();
                        baseEventBus.setTopic(HDLUniMP.UNI_EVENT_REPLY_OTHER_MODEL);
                        baseEventBus.setType(HDLUniMP.UNI_EVENT_REPLY_OTHER_BACK);
                        EventBus.getDefault().post(baseEventBus);
                        HdlCommonLogic.getInstance().postEventBus(HDLUniMP.UNI_EVENT_REPLY_OTHER_MODEL, HDLUniMP.UNI_EVENT_REPLY_OTHER_BACK);
                    }
                    break;
@@ -483,7 +525,7 @@
            }
        } catch (Exception e) {
            HdlLogLogic.print("uni--->发送--->" + e.getMessage(), true);
            HdlLogLogic.print("uni---发送---" + e.getMessage(), true);
        }
    }
@@ -498,7 +540,13 @@
    public void openUniMP(String path, JSONObject jsonObject) {
        JSONObject json = this.createdJSONObject(jsonObject, true);
        HDLUniMPSDKManager.getInstance().openUniMP(HDLUniMP.UNI_APP_ID, path, json, HdlUniLogic.this);
        HdlLogLogic.print("uni--->组装uni发送数据格式--->" + json, false);
        HdlLogLogic.print("uni---组装uni发送数据格式---" + json, false);
    }
    public void openUniMPDelay(String path, JSONObject jsonObject) {
        JSONObject json = this.createdJSONObject(jsonObject, true);
        HDLUniMPSDKManager.getInstance().openUniMPDelay(HDLUniMP.UNI_APP_ID, path, json, HdlUniLogic.this);
        HdlLogLogic.print("uni---组装uni发送数据格式---" + json, false);
    }
    /**
@@ -512,7 +560,7 @@
        try {
            HDLUniMPSDKManager.getInstance().sendUniMPEvent(HDLUniMP.UNI_APP_ID, topic, getJSONObject(callBackBaseBean));
        } catch (Exception e) {
            HdlLogLogic.print("uni--->原生主动向小程序发送通知事件--->" + e.getMessage(), false);
            HdlLogLogic.print("uni---原生主动向小程序发送通知事件---" + e.getMessage(), false);
        }
    }
@@ -525,6 +573,43 @@
    //endregion
    //region ******uni接口方法******
    /**
     * 获取或者配置逆变器网络(包括逆变器热点,wifi,以太网)信息
     */
    private void uniGetAndSetNetwork(String type, Object data, String TopicApi, DCUniMPJSCallback callback) {
        String mac = getKeyValue("mac", getKeyValue("data", data));
        JsonArray jsonArray = new JsonArray();
        JsonObject jObject = null;
        String attribute_data = getKeyValue("attribute_data", getKeyValue("data", data));
        if (!TextUtils.isEmpty(attribute_data)) {
            try {
                jObject = new Gson().fromJson(attribute_data, JsonObject.class);
            } catch (Exception ignored) {
                jObject = new JsonObject();
            }
        }
        jsonArray.add(jObject);
        //解密负载数据(写密钥给网关一定是明文,因为那时网关还没有密钥)
        TcpClient.getInstance().sendDataToLinkGateway(mac, false, TopicApi, jsonArray, "", new HDLLinkCallBack() {
            @Override
            public void onSuccess(String msg) {
                if (callback != null) {
                    uniCallbackData(type, msg, callback);
                }
            }
            @Override
            public void onError(HDLLinkException e) {
                if (callback != null) {
                    uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
                }
            }
        });
    }
    /**
     * 获取位置信息,包括经纬度
@@ -726,11 +811,11 @@
        String module = "FW#" + imageId;//模块信息(HW:硬件)
        //升级本地优先->云端升级
        HdlDeviceLogic.getInstance().isLocalConnect(deviceMac, new CloudCallBeak<Boolean>() {
        HdlDeviceLogic.getInstance().isLocalConnect(homeId, deviceMac, new CloudCallBeak<Boolean>() {
            @Override
            public void onSuccess(Boolean b) {
                if (b) {
                    HdlLogLogic.print("本地升级--->", true);
                    HdlLogLogic.print("本地升级---", true);
                    //本地
                    //1,建立本地服务;
                    //2,告诉网关手机ip和端口;
@@ -768,7 +853,7 @@
                        }
                    });
                } else {
                    HdlLogLogic.print("在线升级--->", true);
                    HdlLogLogic.print("在线升级---", true);
                    //远程升级需要检测在逆变器有没有连接上云
                    HdlDeviceLogic.getInstance().checkInverterConnectedCloud(homeId, deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() {
                        @Override
@@ -807,7 +892,7 @@
            @Override
            public void onFailure(HDLException e) {
                HdlLogLogic.print("在线升级--->", true);
                HdlLogLogic.print("在线升级---", true);
                //远程升级需要检测在逆变器有没有连接上云
                HdlDeviceLogic.getInstance().checkInverterConnectedCloud(homeId, deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() {
                    @Override
@@ -978,11 +1063,11 @@
        String imageId = getKeyValue("imageId", getKeyValue("data", data));//固件镜像id
        String module = driverCode + "#" + imageId;
        //升级本地优先->云端升级
        HdlDeviceLogic.getInstance().isLocalConnect(deviceMac, new CloudCallBeak<Boolean>() {
        HdlDeviceLogic.getInstance().isLocalConnect(homeId, deviceMac, new CloudCallBeak<Boolean>() {
            @Override
            public void onSuccess(Boolean b) {
                if (b) {
                    HdlLogLogic.print("本地升级--->", true);
                    HdlLogLogic.print("本地升级---", true);
                    //本地
                    //1,建立本地服务;
                    // 2,告诉网关手机ip和端口;
@@ -1020,7 +1105,7 @@
                        }
                    });
                } else {
                    HdlLogLogic.print("在线升级--->", true);
                    HdlLogLogic.print("在线升级---", true);
                    //远程升级需要【检测】在逆变器有没有连接上云
                    HdlDeviceLogic.getInstance().checkInverterConnectedCloud(homeId, deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() {
                        @Override
@@ -1059,7 +1144,7 @@
            @Override
            public void onFailure(HDLException e) {
                HdlLogLogic.print("在线升级--->", true);
                HdlLogLogic.print("在线升级---", true);
                //远程升级需要【检测】在逆变器有没有连接上云
                HdlDeviceLogic.getInstance().checkInverterConnectedCloud(homeId, deviceMac, new CloudCallBeak<CloudInverterDeviceBean>() {
                    @Override
@@ -1265,9 +1350,9 @@
     */
    private void uniGetMessageNumber(String type, Object data, DCUniMPJSCallback callback) {
        String homeId = getKeyValue("homeId", getKeyValue("data", data));
        HdlMessageLogic.getInstance().getMessageUntreatedCount(homeId, new CloudCallBeak<String>() {
        HdlMessageLogic.getInstance().getMessageUntreatedCount(homeId, new CloudCallBeak<UnCountBean>() {
            @Override
            public void onSuccess(String data) {
            public void onSuccess(UnCountBean data) {
                uniCallbackData(type, data, callback);
            }
@@ -1423,7 +1508,7 @@
//        com.alibaba.fastjson.JSONArray jsonArray = JSON.parseArray(data);
        try {
            String devices = getKeyValue("devices", getKeyValue("data", data));
            String homeId = UserConfigManage.getInstance().getHomeId(); //绑定成功之后通知
            String homeId = getKeyValue("homeId", getKeyValue("data", data));
            Gson gson = new Gson();
            Type typeOfT = new TypeToken<List<GatewayBean>>() {
            }.getType();
@@ -1492,7 +1577,10 @@
     */
    private void uniDelInverterDevice(String type, Object data, DCUniMPJSCallback callback) {
        String deviceId = getKeyValue("deviceId", getKeyValue("data", data));
        String homeId = UserConfigManage.getInstance().getHomeId();
        String homeId = getKeyValue("homeId", getKeyValue("data", data));
        if (TextUtils.isEmpty(homeId)) {
            homeId = UserConfigManage.getInstance().getHomeId();
        }
        HdlDeviceLogic.getInstance().delInverterDevice(homeId, deviceId, new CloudCallBeak<Boolean>() {
            @Override
            public void onSuccess(Boolean obj) {
@@ -1651,73 +1739,165 @@
     * @param callback uni回调
     */
    public void startTcpThreadSendAccountAndPassword(String type, String ssid, String password, DCUniMPJSCallback callback) {
        new Thread(
                () -> {
                    Socket socket = null;
                    OutputStream outputStreamTcp = null;
                    InputStream inputStreamTcp = null;
                    try {
                        socket = new Socket();
                        socket.setTcpNoDelay(true);
                        socket.setSoTimeout(10 * 1000);//10秒超时
                        socket.connect(new InetSocketAddress("192.168.8.1", 8586));
                        socket.setKeepAlive(true);
        new Thread(() -> {
            Socket socket = null;
            OutputStream outputStreamTcp = null;
            InputStream inputStreamTcp = null;
            try {
                socket = new Socket();
                socket.setTcpNoDelay(true);
                socket.setSoTimeout(10 * 1000);//10秒超时
                socket.connect(new InetSocketAddress("192.168.8.1", 8586));
                socket.setKeepAlive(true);
//                        logMessage("tcp连接状态成功", 0, "");
                        outputStreamTcp = socket.getOutputStream();
                        JsonObject jsonObject = new JsonObject();
                        jsonObject.addProperty("id", "102030");
                        jsonObject.addProperty("ssid", ssid);
                        jsonObject.addProperty("password", password);
                        jsonObject.addProperty("server_addr", HDLLinkPMUser.getInstance().getHomeRegionUrl());
                        jsonObject.addProperty("homeId", UserConfigManage.getInstance().getHomeId());
                        String sendData = "Topic:/user/id/custom/wifi/set\r\n";
                        sendData += "Length:" + jsonObject.toString().getBytes().length + "\r\n\r\n";
                        sendData += jsonObject.toString();
                        outputStreamTcp.write(sendData.getBytes());
                        outputStreamTcp.flush();
                        Thread.sleep(200);
                        inputStreamTcp = socket.getInputStream();
                        byte[] bytes = new byte[1204 * 2];
                        int len = inputStreamTcp.read(bytes);
                        if (len != -1) {
                            String str = new String(bytes, 0, bytes.length);
                            String[] strings = str.split("\r\n\r\n");
                            String[] topicAndLength = strings[0].split("\r\n");
                            String topic = topicAndLength[0];
                            JSONObject json = new JSONObject(strings[1]);
                outputStreamTcp = socket.getOutputStream();
                JsonObject jsonObject = new JsonObject();
                jsonObject.addProperty("id", "102030");
                jsonObject.addProperty("ssid", ssid);
                jsonObject.addProperty("password", password);
                jsonObject.addProperty("server_addr", HDLLinkPMUser.getInstance().getHomeRegionUrl());
                jsonObject.addProperty("homeId", UserConfigManage.getInstance().getHomeId());
                String sendData = "Topic:/user/id/custom/wifi/set\r\n";
                sendData += "Length:" + jsonObject.toString().getBytes().length + "\r\n\r\n";
                sendData += jsonObject.toString();
                outputStreamTcp.write(sendData.getBytes());
                outputStreamTcp.flush();
                Thread.sleep(200);
                inputStreamTcp = socket.getInputStream();
                byte[] bytes = new byte[1204 * 2];
                int len = inputStreamTcp.read(bytes);
                if (len != -1) {
                    String str = new String(bytes, 0, bytes.length);
                    String[] strings = str.split("\r\n\r\n");
                    String[] topicAndLength = strings[0].split("\r\n");
                    String topic = topicAndLength[0];
                    JSONObject json = new JSONObject(strings[1]);
//                            logMessage("tcp回复数据", 0, strings[0] + "\r\n" + json.toString());
                            if (topic.endsWith("wifi/set_reply") || topic.endsWith("wifi/result/notify")) {
                                if (callback != null) {
                                    uniCallbackData(type, json, callback);
                                }
                                if (json.has("mac")) { //回复成功再拿设备mac
                    if (topic.endsWith("wifi/set_reply") || topic.endsWith("wifi/result/notify")) {
                        if (callback != null) {
                            uniCallbackData(type, json, callback);
                        }
                        if (json.has("mac")) { //回复成功再拿设备mac
//                                    this.device_mac = json.getString("mac");
//                                    this.isSucceedTcp = true;//表示成功
                                }
                            }
                        }
                    } catch (Exception ignored) {
                    } finally {
                        try {
                            if (outputStreamTcp != null) {
                                outputStreamTcp.close();
                                outputStreamTcp = null;
                            }
                            if (inputStreamTcp != null) {
                                inputStreamTcp.close();
                                inputStreamTcp = null;
                            }
                            if (socket != null) {
                                socket.close();
                                socket = null;
                            }
                        } catch (Exception ignored) {
                        }
                    }
                }
        ).start();
            } catch (Exception ignored) {
            } finally {
                try {
                    if (outputStreamTcp != null) {
                        outputStreamTcp.close();
                        outputStreamTcp = null;
                    }
                    if (inputStreamTcp != null) {
                        inputStreamTcp.close();
                        inputStreamTcp = null;
                    }
                    if (socket != null) {
                        socket.close();
                        socket = null;
                    }
                } catch (Exception ignored) {
                }
            }
        }).start();
    }
    /**
     * 初始化逆变器
     *
     * @param type     账号
     * @param data     uni请求数据
     * @param callback uni回调
     */
    public void setInitializeGateway(String type, Object data, DCUniMPJSCallback callback) {
        String mac = getKeyValue("mac", getKeyValue("data", data));
        HdlDeviceLogic.getInstance().initializeInverter(mac, new LinkCallBack<Boolean>() {
            @Override
            public void onSuccess(Boolean obj) {
                uniCallbackData(type, obj, callback);
            }
            @Override
            public void onError(HDLLinkException e) {
                uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
            }
        });
    }
    /**
     * 初始化逆变器
     *
     * @param type     账号
     * @param data     uni请求数据
     * @param callback uni回调
     */
    public void setInverterDeviceRemoteInfo(String type, Object data, DCUniMPJSCallback callback) {
        String homeId = getKeyValue("homeId", getKeyValue("data", data));
        String json = getKeyValue("list", getKeyValue("data", data));
        List<CloudInverterDeviceBean> newList = new ArrayList<>();
        try {
            List<GatewayBean> list = new Gson().fromJson(json, new TypeToken<List<GatewayBean>>() {
            }.getType());
            if (list != null && list.size() > 0) {
                for (int i = 0; i < list.size(); i++) {
                    GatewayBean gatewayBean = list.get(i);
                    CloudInverterDeviceBean inverterDeviceBean = new CloudInverterDeviceBean();
                    inverterDeviceBean.setCategorySecondName(gatewayBean.getCategorySecondName());
                    inverterDeviceBean.setOsn(gatewayBean.getDevice_mac());
                    inverterDeviceBean.setOmodel(gatewayBean.getDevice_model());
                    inverterDeviceBean.setOid(gatewayBean.getOid());
                    inverterDeviceBean.setAddresses(gatewayBean.getAddresses());
                    inverterDeviceBean.setSid(gatewayBean.getSid());
                    inverterDeviceBean.setDeviceId(gatewayBean.getDeviceId());
                    inverterDeviceBean.setName(gatewayBean.getDevice_name());
                    inverterDeviceBean.setDeviceStatus(gatewayBean.getDeviceStatus());
                    inverterDeviceBean.setSpk(gatewayBean.getSpk());
                    inverterDeviceBean.setDeviceType(gatewayBean.getDeviceType());
                    newList.add(inverterDeviceBean);
                }
            }
        } catch (Exception ignored) {
        }
        HdlDeviceLogic.getInstance().setDeviceRemoteInfo(newList, homeId, new CloudCallBeak<List<GatewayBean>>() {
            @Override
            public void onSuccess(List<GatewayBean> obj) {
                uniCallbackData(type, obj, callback);
            }
            @Override
            public void onFailure(HDLException e) {
                uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
            }
        });
    }
    /**
     * 修改设备名称逆变器BMS电池包
     *
     * @param type     账号
     * @param data     uni请求数据
     * @param callback uni回调
     */
    public void uniOidEditName(String type, Object data, DCUniMPJSCallback callback) {
        String homeId = getKeyValue("homeId", getKeyValue("data", data));
        String deviceType = getKeyValue("deviceType", getKeyValue("data", data));
        String deviceId = getKeyValue("deviceId", getKeyValue("data", data));
        String name = getKeyValue("name", getKeyValue("data", data));
        HdlDeviceLogic.getInstance().setRename(homeId, deviceType, deviceId, name, new CloudCallBeak<Boolean>() {
            @Override
            public void onSuccess(Boolean obj) {
                uniCallbackData(type, obj, callback);
            }
            @Override
            public void onFailure(HDLException e) {
                uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
            }
        });
    }
@@ -1739,7 +1919,7 @@
        String tempData = getKeyValue("data", data);
        if (TextUtils.isEmpty(tempData)) {
            uniCallbackData(type, null, -2, "data内容为空", callback);
            //HdlLogLogic.print("data内容为空--->", false);
            //HdlLogLogic.print("data内容为空---", false);
            return;
        }
        ModBusBean modBusBean = new Gson().fromJson(tempData, ModBusBean.class);
@@ -1751,24 +1931,24 @@
//        }
        if (modBusBean.getMac() == null || modBusBean.getData() == null) {
            uniCallbackData(type, null, -2, "发送失败,(mac或者oid)为空", callback);
            //HdlLogLogic.print("uni--->发送--->ModBus--->发送失败,(mac或者oid)为空." + Arrays.toString(modBusBean.getData()), true);
            //HdlLogLogic.print("uni---发送---ModBus---发送失败,(mac或者oid)为空." + Arrays.toString(modBusBean.getData()), true);
            return;
        }
        //HdlLogLogic.print("uni--->发送--->ModBus--->" + Arrays.toString(modBusBean.getData()), true);
        //HdlLogLogic.print("uni---发送---ModBus---" + Arrays.toString(modBusBean.getData()), true);
        //发送modbus协议
        HDLModBusConnect.getInstance().Send(modBusBean.getMac(), modBusBean.getData(), new ModbusCallBack() {
            @Override
            public void onSuccess(int[] data) {
                uniCallbackData(type, data, callback);
//                HdlLogLogic.print("uni--->接收--->ModBus--->" + Arrays.toString(data), true);
//                HdlLogLogic.print("uni---接收---ModBus---" + Arrays.toString(data), true);
            }
            @Override
            public void onError(HDLLinkException e) {
                uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
//                HdlLogLogic.print("uni--->接收--->ModBus--->" + e.getMsg() + "(" + e.getCode() + ")", true);
//                HdlLogLogic.print("uni---接收---ModBus---" + e.getMsg() + "(" + e.getCode() + ")", true);
            }
        });
    }
@@ -1804,7 +1984,7 @@
            uniCallBackBaseBean.setData(data);
            return getJSONObject(uniCallBackBaseBean);
        } catch (Exception e) {
            HdlLogLogic.print("uni--->组装发送给uni数据格式有异常--->" + e.getMessage(), false);
            HdlLogLogic.print("uni---组装发送给uni数据格式有异常---" + e.getMessage(), false);
        }
        return new JSONObject();
    }
@@ -1829,10 +2009,10 @@
            if (callback != null) {
                callback.invoke(getJSONObject(uniCallBackBaseBean));
//                callback.invoke(uniCallBackBaseBean);
                HdlLogLogic.print("uni--->回复--->" + type + "--->" + new Gson().toJson(uniCallBackBaseBean), true);
                HdlLogLogic.print("uni---回复---" + type + "---" + new Gson().toJson(uniCallBackBaseBean), true);
            }
        } catch (Exception e) {
            HdlLogLogic.print("uni--->回复--->" + type + "--->" + e.getMessage(), true);
            HdlLogLogic.print("uni---回复---" + type + "---" + e.getMessage(), true);
        }